• Paul Eggert's avatar
    glob: merge from glibc with Zanella glob changes · 32107c10
    Paul Eggert authored
    Merge glob from glibc, with changes for glob proposed
    by Adhemerval Zanella in the thread starting here:
    https://sourceware.org/ml/libc-alpha/2017-08/msg01079.html
    plus some fixes for this merge.
    * lib/flexmember.h: Change license wording to something that
    works unchanged in Glibc, since this code might be used in
    Glibc and this will minimize 'diff' output.
    * lib/glob_internal.h, lib/glob_pattern_p.c, lib/globfree.c:
    New files, ported from glibc.
    * lib/glob_pattern_p.c, lib/globfree.c, lib/glob.c [!_LIBC]:
    Include <config.h> first.
    * lib/glob-libc.h (_Restrict_): Remove.  All uses replaced
    with __restrict.
    (__size_t): Remove.  All uses replaced by size_t.
    (size_t): Define by defining __need_size_t and including <stddef.h>.
    This should work even in non-glibc platforms, where any name
    pollution is OK.
    Use __USE_MISC instead of __USE_BSD || __USE_GNU.
    (struct stat64): Don’t worry about __GLOB_GNULIB.
    (glob, globfree, glob_pattern_p): Remove macros for
    __USE_FILE_OFFSET64 && __GNUC__ < 2 && !defined __GLOB_GNULIB
    case.  Remove _GL_ARG_NONNULL as GNU behavior is to accept NULL
    but set errno.
    * lib/glob.c (_GL_ARG_NONNULL) [!_LIBC]: Remove.  All uses
    removed since the glibc behavior works on null pointers.
    Do not include stdio.h; old SunOS is irrelevant now.
    Do not worry about GLOB_ONLY_P as we now mimic glibc here.
    Include glob_internal.h.
    (D_INO_TO_RESULT): Depend on (_LIBC || D_INO_IN_DIRENT), not
    ((POSIX || WINDOWS32) && !__GNU_LIBRARY__).  The latter probably
    worked only coincidentally.
    (attribute_hidden, __attribute_noinline__, __glibc_unlikely):
    Remove macros; now done in glob.in.h.
    (size_add_wrapv): Do not use __builtin_add_overflow if __ICC.
    (glob): Properly initialize glob structure with
    GLOB_BRACE|GLOB_DOOFFS (bug 20707).
    Remove old code using SHELL since Bash no longer
    uses this.
    (glob, prefix_array): Separate MS code better.
    (glob, glob_in_dir): Use C99 decls before statements when glibc
    does.
    (glob_in_dir): Remove old Amiga and VMS code.
    (globfree, __glob_pattern_type, __glob_pattern_p): Move to
    separate files.
    * lib/glob.in.h (attribute_hidden, __attribute_noinline__)
    (__glibc_unlikely):
    Move here from glob.c.
    (__restrict): New macro here, replacing the _Restrict_ in glob.c.
    (weak_alias): New macro.
    (__size_t): Remove.  All uses replaced by size_t.
    * modules/d-ino (License): Now LGPLv2+, for compatibility with glob.
    * modules/flexmember (License): Now LGPLv2+, which it should have
    been anyway since flexmember.h is not unlimited-license.
    * modules/glob (Files): Add +lib/glob_internal.h,
    lib/glob_pattern_p.c, lib/globfree.c.
    (Depends-on): Remove snippet/arg-nonnull.
    32107c10