Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fvbe.git;a=commitdiff;h=6fe19f44dca15eb460bb8ba27bcf14c62f186b07
commit 6fe19f44dca15eb460bb8ba27bcf14c62f186b07 Author: James Buren <[email protected]> Date: Sat Sep 21 20:26:25 2013 -0500 utility: add static functions for sorting path lists diff --git a/src/utility.c b/src/utility.c index 05b2742..4ee7884 100644 --- a/src/utility.c +++ b/src/utility.c @@ -17,6 +17,53 @@ #include "local.h" +static inline size_t dirs_count(const char *s) +{ + size_t n = 0; + bool trail = false; + + if(s == 0 || s[0] != '/') + { + errno = EINVAL; + error(strerror(errno)); + return 0; + } + + for( ; s[0] != 0 ; ++s ) + { + if(s[0] == '/') + ++n; + + if(s[0] == '/' && s[1] == 0) + trail = true; + } + + if(!trail) + ++n; + + return n; +} + +static int dirs_ascend_compare(const void *A,const void *B) +{ + const char *a = * (char **) A; + const char *b = * (char **) B; + size_t c = dirs_count(a); + size_t d = dirs_count(b); + + return (c < d) ? -1 : (c > d) ? 1 : 0; +} + +static int dirs_descend_compare(const void *A,const void *B) +{ + const char *a = * (char **) A; + const char *b = * (char **) B; + size_t c = dirs_count(a); + size_t d = dirs_count(b); + + return (c < d) ? 1 : (c > d) ? -1 : 0; +} + static int raid_compare(const void *A,const void *B) { const char *a = (const char *) A; _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
