dgaudet 98/07/06 21:54:05
Modified: src/modules/standard mod_autoindex.c Log: - fix a gcc -Wall warning in dsortf() (Ken you should be using -Wall) - remove unnecessary complexity and verbiage (backport dsortf from apache-nspr) Revision Changes Path 1.85 +21 -74 apache-1.3/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -r1.84 -r1.85 --- mod_autoindex.c 1998/06/20 11:20:39 1.84 +++ mod_autoindex.c 1998/07/07 04:54:04 1.85 @@ -1017,12 +1017,9 @@ static int dsortf(struct ent **e1, struct ent **e2) { - char *s1; - char *s2; struct ent *c1; struct ent *c2; int result = 0; - int compare_by_string = 1; /* * First, see if either of the entries is for the parent directory. @@ -1040,87 +1037,37 @@ */ if ((*e1)->ascending) { c1 = *e1; - c2 = *e2; + c2 = *e2; } else { c1 = *e2; c2 = *e1; } - /* - * Choose the right values for the sort keys. - */ switch (c1->key) { case K_LAST_MOD: - /* - * Since the last-modified time is a monotonically increasing integer, - * we can short-circuit this process with a simple comparison. - */ - result = c1->lm - c2->lm; - if (result != 0) { - result = (result > 0) ? 1 : -1; - } - compare_by_string = 0; - break; + if (c1->lm > c2->lm) { + return 1; + } + else if (c1->lm < c2->lm) { + return -1; + } + break; case K_SIZE: - /* - * We can pull the same trick with the size as with the mtime. - */ - result = c1->size - c2->size; - if (result != 0) { - result = (result > 0) ? 1 : -1; - } - compare_by_string = 0; - break; + if (c1->size > c2->size) { + return 1; + } + else if (c1->size < c2->size) { + return -1; + } + break; case K_DESC: - s1 = c1->desc; - s2 = c2->desc; - break; - case K_NAME: - default: - s1 = c1->name; - s2 = c2->name; - break; - } - - if (compare_by_string) { - /* - * Take some care, here, in case one string or the other (or both) is - * NULL. - */ - - /* - * Two valid strings, compare normally. - */ - if ((s1 != NULL) && (s2 != NULL)) { - result = strcmp(s1, s2); - } - /* - * Two NULL strings - primary keys are equal (fake it). - */ - else if ((s1 == NULL) && (s2 == NULL)) { - result = 0; - } - /* - * s1 is NULL, but s2 is a string - so s2 wins. - */ - else if (s1 == NULL) { - result = -1; - } - /* - * Last case: s1 is a string and s2 is NULL, so s1 wins. - */ - else { - result = 1; - } - } - /* - * If the keys were equal, the file name is *always* the secondary key - - * in ascending order. - */ - if (!result) { - result = strcmp((*e1)->name, (*e2)->name); + result = strcmp(c1->desc ? c1->desc : "", c2->desc ? c2->desc : ""); + if (result) { + return result; + } + break; } - return result; + return strcmp(c1->name, c2->name); }