diff options
Diffstat (limited to 'usr/src/lib/libbc/libc/gen/common/scandir.c')
-rw-r--r-- | usr/src/lib/libbc/libc/gen/common/scandir.c | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/usr/src/lib/libbc/libc/gen/common/scandir.c b/usr/src/lib/libbc/libc/gen/common/scandir.c deleted file mode 100644 index 633354971b..0000000000 --- a/usr/src/lib/libbc/libc/gen/common/scandir.c +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -/* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -/* - * Scan the directory dirname calling select to make a list of selected - * directory entries then sort using qsort and compare routine dcomp. - * Returns the number of entries and a pointer to a list of pointers to - * struct direct (through namelist). Returns -1 if there were any errors. - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/dir.h> - -int -scandir(char *dirname, struct direct *(*namelist[]), - int (*select)(), int (*dcomp)()) -{ - struct direct *d, *p, **names; - int nitems; - char *cp1, *cp2; - struct stat stb; - long arraysz; - DIR *dirp; - - if ((dirp = opendir(dirname)) == NULL) - return (-1); - if (fstat(dirp->dd_fd, &stb) < 0) - return (-1); - - /* - * estimate the array size by taking the size of the directory file - * and dividing it by a multiple of the minimum size entry. - */ - arraysz = (stb.st_size / 24); - names = (struct direct **)malloc(arraysz * sizeof(struct direct *)); - if (names == NULL) - return (-1); - - nitems = 0; - while ((d = readdir(dirp)) != NULL) { - if (select != NULL && !(*select)(d)) - continue; /* just selected names */ - /* - * Make a minimum size copy of the data - */ - p = (struct direct *)malloc(DIRSIZ(d)); - if (p == NULL) - return (-1); - p->d_ino = d->d_ino; - p->d_reclen = d->d_reclen; - p->d_namlen = d->d_namlen; - for (cp1 = p->d_name, cp2 = d->d_name; *cp1++ = *cp2++; ); - /* - * Check to make sure the array has space left and - * realloc the maximum size. - */ - if (++nitems >= arraysz) { - if (fstat(dirp->dd_fd, &stb) < 0) - return (-1); /* just might have grown */ - arraysz = stb.st_size / 12; - names = (struct direct **)realloc((char *)names, - arraysz * sizeof(struct direct *)); - if (names == NULL) - return (-1); - } - names[nitems-1] = p; - } - closedir(dirp); - if (nitems && dcomp != NULL) - qsort(names, nitems, sizeof(struct direct *), dcomp); - *namelist = names; - return (nitems); -} - -/* - * Alphabetic order comparison routine for those who want it. - */ -int -alphasort(struct direct **d1, struct direct **d2) -{ - return (strcmp((*d1)->d_name, (*d2)->d_name)); -} |