Changeset: 272d9c5179ea for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=272d9c5179ea
Modified Files:
        MonetDB5/src/mal/mal_linker.mx
Branch: Jun2010
Log Message:

ensure that module autoload scripts are globally ordered
(10_first.mal, 20_second.mal, etc.)
even if we have multiple prefixes and hence multiple autoload directories


diffs (47 lines):

diff -r 826d23f08b53 -r 272d9c5179ea MonetDB5/src/mal/mal_linker.mx
--- a/MonetDB5/src/mal/mal_linker.mx    Fri May 28 17:01:31 2010 +0200
+++ b/MonetDB5/src/mal/mal_linker.mx    Sat May 29 12:45:27 2010 +0200
@@ -324,9 +324,13 @@
 an environment variable. 
 @c
 static int
-cmpstr(const void *p1, const void *p2)
+cmpstr(const void *_p1, const void *_p2)
 {
-       return strcmp(*(char* const*)p1, *(char* const*)p2);
+       const char *p1 = *(char* const*)_p1;
+       const char *p2 = *(char* const*)_p2;
+       const char *f1 = strrchr(p1, (int) DIR_SEP);
+       const char *f2 = strrchr(p2, (int) DIR_SEP);
+       return strcmp(f1?f1:p1, f2?f2:p2);
 }
 
 #define MAXMULTISCRIPT 48
@@ -377,7 +381,6 @@
                /* see if this is a directory, if so, recurse */
                if (recurse == 1 && (rdir = opendir(fullname)) != NULL) {
                        struct dirent *e;
-                       int ps = lasts;
                        /* list *ext, sort, return */
                        while ((e = readdir(rdir)) != NULL) {
                                if (strcmp(e->d_name, "..") == 0 || 
strcmp(e->d_name, ".") == 0)
@@ -398,10 +401,6 @@
                                if (lasts >= MAXMULTISCRIPT)
                                        break;
                        }
-                       if (lasts - ps > 0) {
-                               /* assure that an ordering such as 10_first, 
20_second works */
-                               qsort(strs + ps, lasts - ps, sizeof(char *), 
cmpstr);
-                       }
                        (void)closedir(rdir);
                } else {
                        strcat(fullname + i + 1, ext);
@@ -418,6 +417,8 @@
        if (lasts > 0) {
                size_t i = 0;
                int c;
+               /* assure that an ordering such as 10_first, 20_second works */
+               qsort(strs, lasts, sizeof(char *), cmpstr);
                for (c = 0; c < lasts; c++)
                        i += strlen(strs[c]) + 1; /* PATH_SEP or \0 */
                fullname = GDKrealloc(fullname, i);
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to