⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.c

📁 keyring是一种用于保护PALM中关键信息的系统
💻 C
字号:
/* -*- c-file-style: "java"; -*- * * $Header: /cvsroot/gnukeyring/keyring/sort.c,v 1.10 2006/01/13 14:09:04 hoenicke Exp $ *  * Keyring -- store passwords securely on a handheld * Copyright (C) 1999, 2000 Martin Pool <mbp@users.sourceforge.net> * Copyright (C) 2002-2003 Jochen Hoenicke <hoenicke@users.sourceforge.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "includes.h"/* * Alphanumeric sorting of records. * * Perhaps the best sort order (not implemented yet) would be: * reserved records (fixed positions), records with no name in order * of insertion by database index, normal records sorted by name and * then by database index, and finally deleted records.  I think we'll * try just always inserting into the right position and never * explicitly inserting. * * We must make sure never to move the reserved records, and also that * things are stable whichever category we sort. *//* Compare records for sorting or sorted insertion. * * Because all records begin with the field containing the record name * the comparison is pretty simple: we sort in string order, except * that deleted records go to the end.   */static Int16 Keys_Compare(void * rec1, void * rec2,                          Int16 UNUSED(other),                          SortRecordInfoPtr info1,                          SortRecordInfoPtr info2,                          MemHandle UNUSED(appInfoHand)){    Int16 result;    FieldHeaderType *fd1, *fd2;    Char  *cp1, *cp2;    const Int16 attr1 = info1->attributes, attr2 = info2->attributes;        if (attr1 & dmRecAttrSecret) {	if (attr2 & dmRecAttrSecret)	    result = 0;	else	    result = -1;    } else if (attr2 & dmRecAttrSecret) {	result = +1;    } else if (!rec1) {	if (!rec2)	    result = 0;	else	    result = -1;    } else if (!rec2) {	result = +1;    } else {	fd1 = (FieldHeaderType *) rec1;	fd2 = (FieldHeaderType *) rec2;	cp1 = (Char *) (fd1+1);	cp2 = (Char *) (fd2+1);	result = TxtGlueCaselessCompare(cp1, fd1->len, NULL, 					cp2, fd2->len, NULL);    }    if (!result)	result = MemCmp(info1->uniqueID, info2->uniqueID, 3);    return result;}/* * Sort the whole database.  Called on returning to the list after * modification. */void Keys_Sort(void){     Err err;     /* Insertion sort is actually much faster than quick sort      * in the common case (where most records are already in order).      */     err = DmInsertionSort(gKeyDB, Keys_Compare, 0);     if (err) {          UI_ReportSysError2(SortErrorAlert, err, __FUNCTION__);     }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -