diff options
| author | Ian MacArthur <imacarthur@gmail.com> | 2011-12-21 10:42:14 +0000 |
|---|---|---|
| committer | Ian MacArthur <imacarthur@gmail.com> | 2011-12-21 10:42:14 +0000 |
| commit | c4e1e39f6be6b60c4cbd69e5b0a2eb6b87473dc1 (patch) | |
| tree | 6e8c527d68f62a8063775eada663824f98c7d63a /src/scandir.c | |
| parent | 3f944961913f862645f206e6a7901589e4880f8f (diff) | |
Per STR 2687, remove the old fltk-local scandir implementation which might
have been re-using "borrowed" code with inappropriate licensing.
NOTE: It is not expected that this makes any real difference, it
is assumed that all modern hosts actually provice their own
scandir implementation and that the code (now excised) was orpahned
a long, long time ago...
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9210 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/scandir.c')
| -rw-r--r-- | src/scandir.c | 125 |
1 files changed, 29 insertions, 96 deletions
diff --git a/src/scandir.c b/src/scandir.c index ac6dd34cd..ab2a50d3f 100644 --- a/src/scandir.c +++ b/src/scandir.c @@ -1,20 +1,22 @@ -/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. +/* + * "$Id$" + * + * This is a placekeeper stub that puuls in scandir implementations for host + * systems that do not provide a compatible one natively + * + * Copyright 1998-2010 by Bill Spitzak and others. + * + * This library is free software. Distribution and use rights are outlined in + * the file "COPYING" which should have been included with this file. If this + * file is missing or damaged, see the license at: + * + * http://www.fltk.org/COPYING.php + * + * Please report all bugs and problems on the following page: + * + * http://www.fltk.org/str.php + */ -You should have received a copy of the GNU Library General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -USA. */ #if defined(WIN32) && !defined(__CYGWIN__) # include "scandir_win32.c" @@ -22,7 +24,8 @@ USA. */ # include "flstring.h" -# if !HAVE_SCANDIR +/* NOTE: Most (all?) modern non-WIN32 hosts DO have a usable scandir */ +# if !HAVE_SCANDIR # include <stdlib.h> # include <sys/types.h> # include <errno.h> @@ -30,98 +33,28 @@ USA. */ # if HAVE_DIRENT_H # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) -# else +# else /* HAVE_DIRENT_H */ # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include <sys/ndir.h> -# endif +# endif /* HAVE_SYS_NDIR_H */ # if HAVE_SYS_DIR_H # include <sys/dir.h> -# endif +# endif /* HAVE_SYS_DIR_H */ # if HAVE_NDIR_H # include <ndir.h> -# endif +# endif /* HAVE_NDIR_H */ # endif -/* This warning added to help identify any hosts that actually use this function... */ +/* This warning added to help identify any non-WIN32 hosts that actually try to use + * our "private" implementation of the scandir function, which was suspect... */ # if defined(__GNUC__) -# warning Using deprecated scandir() replacement function +# warning Attempting to use the deprecated scandir() replacement function # endif /*__GNUC__*/ +# error No compatible scandir implementation found (STR 2687 applies!) -int -fl_scandir(const char *dir, struct dirent ***namelist, - int (*select)(struct dirent *), - int (*compar)(struct dirent **, struct dirent **)) -{ - DIR *dp = opendir (dir); - struct dirent **v = NULL; - size_t vsize = 0, i; - struct dirent *d; - int save; - - if (dp == NULL) - return -1; - - save = errno; - errno = 0; - - i = 0; - while ((d = readdir (dp)) != NULL) - if (select == NULL || (*select) (d)) - { - size_t dsize; - - if (i == vsize) - { - struct dirent **newv; - if (vsize == 0) - vsize = 10; - else - vsize *= 2; - newv = (struct dirent **) realloc (v, vsize * sizeof (*v)); - if (newv == NULL) - { - lose: - errno = ENOMEM; - break; - } - v = newv; - } - -# define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name)) -# define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \ - _D_EXACT_NAMLEN (d) + 1) - - dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d; - v[i] = (struct dirent *) malloc (dsize); - if (v[i] == NULL) - goto lose; - - memcpy (v[i++], d, dsize); - } - - if (errno != 0) - { - save = errno; - (void) closedir (dp); - while (i > 0) - free (v[--i]); - free (v); - errno = save; - return -1; - } - - (void) closedir (dp); - errno = save; - - /* Sort the list if we have a comparison function to sort with. */ - if (compar) qsort (v, i, sizeof (*v), (int (*)(const void *, const void *))compar); - *namelist = v; - return i; -} - -# endif +# endif /* !HAVE_SCANDIR */ #endif /* |
