summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIan MacArthur <imacarthur@gmail.com>2011-12-21 10:42:14 +0000
committerIan MacArthur <imacarthur@gmail.com>2011-12-21 10:42:14 +0000
commitc4e1e39f6be6b60c4cbd69e5b0a2eb6b87473dc1 (patch)
tree6e8c527d68f62a8063775eada663824f98c7d63a /src
parent3f944961913f862645f206e6a7901589e4880f8f (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')
-rw-r--r--src/scandir.c125
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
/*