From d59d500af7204cf419d91553dccfc2ff0069ca65 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Mon, 27 Jan 2003 20:39:31 +0000 Subject: Moved the scandir code into it's own files so that it can be used by other OSes where libc does not have a native scandir() implementation. --- win32/readdir.c | 80 --------------------------------------------------------- 1 file changed, 80 deletions(-) (limited to 'win32/readdir.c') diff --git a/win32/readdir.c b/win32/readdir.c index 78db689b29..e33d19bde5 100644 --- a/win32/readdir.c +++ b/win32/readdir.c @@ -141,83 +141,3 @@ int rewinddir(DIR *dp) return 0; } - -int alphasort(const struct dirent **a, const struct dirent **b) -{ - return strcoll((*a)->d_name,(*b)->d_name); -} - -int scandir(const char *dirname, - struct dirent **namelist[], - int (*selector) (const struct dirent *entry), - int (*compare) (const struct dirent **a, const struct dirent **b)) -{ - DIR *dirp = NULL; - struct dirent **vector = NULL; - struct dirent *dp = NULL; - int vector_size = 0; - - int nfiles = 0; - int fail = 0; - - if (namelist == NULL) - return -1; - - dirp = opendir(dirname); - if (dirp == NULL) - return -1; - - for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) - { - int dsize = 0; - struct dirent *newdp = NULL; - - if (selector && (*selector)(dp) == 0) - continue; - - if (nfiles == vector_size) - { - struct dirent **newv; - if (vector_size == 0) - vector_size = 10; - else - vector_size *= 2; - - newv = (struct dirent **) realloc (vector, vector_size * sizeof (struct dirent *)); - if (newv == NULL) - { - fail = 1; - break; - } - vector = newv; - } - - dsize = sizeof (struct dirent) + ((strlen(dp->d_name) + 1) * sizeof(char)); - newdp = (struct dirent *) malloc(dsize); - - if (newdp == NULL) - { - fail = 1; - break; - } - - vector[nfiles++] = (struct dirent *) memcpy(newdp, dp, dsize); - } - - closedir(dirp); - - if (fail) - { - while (nfiles-- > 0) free(vector[nfiles]); - free(vector); - return -1; - } - - - *namelist = vector; - - if (compare) - qsort (*namelist,nfiles,sizeof (struct dirent *),compare); - - return nfiles; -} -- cgit v1.2.1