X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dirent%2Fscandir.c;h=ae03630d6ec5e1fda4d30a42fb0b6e9eb796ae8a;hb=refs%2Fheads%2Ftizen_base;hp=cffe5056ac2339601ec802e31a2f58d48581a52e;hpb=c40298232a7ed3fb1b64eb4ffe352829deb79694;p=platform%2Fupstream%2Flinaro-glibc.git diff --git a/dirent/scandir.c b/dirent/scandir.c index cffe505..ae03630 100644 --- a/dirent/scandir.c +++ b/dirent/scandir.c @@ -1,93 +1,48 @@ -/* Copyright (C) 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1992-2014 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 free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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. + 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 + Lesser General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ -#include -#include -#include -#include - -int -scandir (dir, namelist, select, cmp) - const char *dir; - struct dirent ***namelist; - int (*select) __P ((struct dirent *)); - int (*cmp) __P ((const void *, const void *)); -{ - 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; - __set_errno (0); +/* We need to avoid the header declaration of scandir64, because + the types don't match scandir and then the compiler will + complain about the mismatch when we do the alias below. */ +#define scandir64 __renamed_scandir64 - i = 0; - while ((d = readdir (dp)) != NULL) - if (select == NULL || (*select) (d)) - { - size_t dsize; - - if (i == vsize) - { - struct dirent **new; - if (vsize == 0) - vsize = 10; - else - vsize *= 2; - new = (struct dirent **) realloc (v, vsize * sizeof (*v)); - if (new == NULL) - { - lose: - __set_errno (ENOMEM); - break; - } - v = new; - } +#include - dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d; - v[i] = (struct dirent *) malloc (dsize); - if (v[i] == NULL) - goto lose; +#undef scandir64 - memcpy (v[i++], d, dsize); - } +#include - if (errno != 0) - { - save = errno; - (void) closedir (dp); - while (i > 0) - free (v[--i]); - free (v); - __set_errno (save); - return -1; - } +#ifndef SCANDIR +# define SCANDIR scandir +# define SCANDIRAT scandirat +# define DIRENT_TYPE struct dirent +#endif - (void) closedir (dp); - __set_errno (save); - /* Sort the list if we have a comparison function to sort with. */ - if (cmp != NULL) - qsort (v, i, sizeof (*v), cmp); - *namelist = v; - return i; +int +SCANDIR (dir, namelist, select, cmp) + const char *dir; + DIRENT_TYPE ***namelist; + int (*select) (const DIRENT_TYPE *); + int (*cmp) (const DIRENT_TYPE **, const DIRENT_TYPE **); +{ + return SCANDIRAT (AT_FDCWD, dir, namelist, select, cmp); } + +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (scandir, scandir64) +#endif