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

Reply via email to