diff options
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 41 | ||||
-rw-r--r-- | libiberty/Makefile.in | 31 | ||||
-rw-r--r-- | libiberty/config.in | 6 | ||||
-rwxr-xr-x | libiberty/configure | 17 | ||||
-rw-r--r-- | libiberty/configure.ac | 14 | ||||
-rw-r--r-- | libiberty/configure.com | 2 | ||||
-rw-r--r-- | libiberty/functions.texi | 14 | ||||
-rw-r--r-- | libiberty/ldirname.c | 94 | ||||
-rw-r--r-- | libiberty/makefile.vms | 2 | ||||
-rw-r--r-- | libiberty/memrchr.c | 33 | ||||
-rw-r--r-- | libiberty/regex.c | 2 |
11 files changed, 239 insertions, 17 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 83e9120..2ae5626 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,44 @@ +2025-05-13 Andreas Schwab <schwab@suse.de> + + * regex.c (regex_compile): Don't write beyond array bounds when + collecting range expression. + +2025-03-29 Iain Sandoe <iain@sandoe.co.uk> + + PR cobol/119283 + * Makefile.in: Add memrchr build rules. + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Check for memrchr. + * functions.texi: Document memrchr. + * memrchr.c: New file. + +2025-03-25 Iain Sandoe <iain@sandoe.co.uk> + + PR other/119218 + * config.in: Regenerate. + * configure: Regenerate. + * configure.ac: Append <libgen.h> to AC_INCLUDES_DEFAULT + when checking for the 'basename' decl. + +2025-03-18 Jose E. Marchesi <jose.marchesi@oracle.com> + + * ldirname.c: New file. + * Makefile.in (CFILES): Add ldirname.c. + (REQUIRED_OFILES): Add ldirname.$(objext). + (./ldirname.$(objext)): New rule. + * makefile.vms (OBJS): Add ldirname.obj. + * configure.com (FILES): Add ldirname. + +2024-12-11 Matthieu Longo <matthieu.longo@arm.com> + + * configure: Regenerate. + * configure.ac: Fix autoupdate warnings. + +2024-12-11 Sangamesh Mallayya <swamy.sangamesh@gmail.com> + + * getopt.c: Remove _NO_PROTO block + 2024-11-19 Evgeny Karpov <evgeny.karpov@microsoft.com> * simple-object-coff.c: Add aarch64. diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index b11df75..387975d 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -136,10 +136,11 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \ hashtab.c hex.c \ index.c insque.c \ lbasename.c \ + ldirname.c \ lrealpath.c \ make-relative-prefix.c \ - make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmem.c \ - memmove.c mempcpy.c memset.c mkstemps.c \ + make-temp-file.c md5.c memchr.c memrchr.c memcmp.c memcpy.c \ + memmem.c memmove.c mempcpy.c memset.c mkstemps.c \ objalloc.c obstack.c \ partition.c pexecute.c \ pex-common.c pex-djgpp.c pex-msdos.c pex-one.c \ @@ -179,7 +180,7 @@ REQUIRED_OFILES = \ ./fnmatch.$(objext) ./fopen_unlocked.$(objext) \ ./getopt.$(objext) ./getopt1.$(objext) ./getpwd.$(objext) \ ./getruntime.$(objext) ./hashtab.$(objext) ./hex.$(objext) \ - ./lbasename.$(objext) ./lrealpath.$(objext) \ + ./lbasename.$(objext) ./ldirname.$(objext) ./lrealpath.$(objext)\ ./make-relative-prefix.$(objext) ./make-temp-file.$(objext) \ ./objalloc.$(objext) \ ./obstack.$(objext) \ @@ -212,8 +213,8 @@ CONFIGURED_OFILES = ./asprintf.$(objext) ./atexit.$(objext) \ ./getcwd.$(objext) ./getpagesize.$(objext) \ ./gettimeofday.$(objext) \ ./index.$(objext) ./insque.$(objext) \ - ./memchr.$(objext) ./memcmp.$(objext) ./memcpy.$(objext) \ - ./memmem.$(objext) ./memmove.$(objext) \ + ./memchr.$(objext) ./memrchr.$(objext) ./memcmp.$(objext) \ + ./memcpy.$(objext) ./memmem.$(objext) ./memmove.$(objext) \ ./mempcpy.$(objext) ./memset.$(objext) ./mkstemps.$(objext) \ ./pex-djgpp.$(objext) ./pex-msdos.$(objext) \ ./pex-unix.$(objext) ./pex-win32.$(objext) \ @@ -966,6 +967,17 @@ $(CONFIGURED_OFILES): stamp-picdir stamp-noasandir else true; fi $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION) +./ldirname.$(objext): $(srcdir)/ldirname.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/ldirname.c -o pic/$@; \ + else true; fi + if [ x"$(NOASANFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/ldirname.c -o noasan/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/ldirname.c $(OUTPUT_OPTION) + ./lrealpath.$(objext): $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h if [ x"$(PICFLAG)" != x ]; then \ @@ -1014,6 +1026,15 @@ $(CONFIGURED_OFILES): stamp-picdir stamp-noasandir else true; fi $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION) +./memrchr.$(objext): $(srcdir)/memrchr.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memrchr.c -o pic/$@; \ + else true; fi + if [ x"$(NOASANFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memrchr.c -o noasan/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memrchr.c $(OUTPUT_OPTION) + ./memcmp.$(objext): $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h if [ x"$(PICFLAG)" != x ]; then \ $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \ diff --git a/libiberty/config.in b/libiberty/config.in index 1b1f2b0..3b87165 100644 --- a/libiberty/config.in +++ b/libiberty/config.in @@ -153,6 +153,9 @@ /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the <libgen.h> header file. */ +#undef HAVE_LIBGEN_H + /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H @@ -183,6 +186,9 @@ /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `memrchr' function. */ +#undef HAVE_MEMRCHR + /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET diff --git a/libiberty/configure b/libiberty/configure index f83b42f..f0309ff 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -5745,7 +5745,7 @@ host_makefile_frag=${frag} # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. -for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h spawn.h +for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h spawn.h libgen.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header" @@ -6210,6 +6210,7 @@ funcs="$funcs gettimeofday" funcs="$funcs index" funcs="$funcs insque" funcs="$funcs memchr" +funcs="$funcs memrchr" funcs="$funcs memcmp" funcs="$funcs memcpy" funcs="$funcs memmem" @@ -6276,7 +6277,7 @@ if test "x" = "y"; then ffs __fsetlocking \ getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \ index insque \ - memchr memcmp memcpy memmem memmove memset mkstemps \ + memchr memrchr memcmp memcpy memmem memmove memset mkstemps \ on_exit \ pipe2 posix_spawn posix_spawnp psignal \ pstat_getdynamic pstat_getstatic putenv \ @@ -6691,7 +6692,7 @@ esac for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \ getcwd getpagesize getrusage gettimeofday \ - index insque memchr memcmp memcpy memmove memset psignal \ + index insque memchr memrchr memcmp memcpy memmove memset psignal \ putenv random rename rindex sbrk setenv stpcpy strcasecmp \ strchr strdup strerror strncasecmp strrchr strstr strtod \ strtol strtoul sysconf times tmpnam vfprintf vprintf \ @@ -7389,7 +7390,12 @@ fi done as_ac_Symbol=`$as_echo "ac_cv_have_decl_basename(char *)" | $as_tr_sh` -ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" "$ac_includes_default" +ac_fn_c_check_decl "$LINENO" "basename(char *)" "$as_ac_Symbol" " +$ac_includes_default +#ifdef HAVE_LIBGEN_H +# include <libgen.h> +#endif +" if eval test \"x\$"$as_ac_Symbol"\" = x"yes"; then : ac_have_decl=1 else @@ -7399,7 +7405,8 @@ fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BASENAME $ac_have_decl _ACEOF -ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" + + ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" if test "x$ac_cv_have_decl_ffs" = xyes; then : ac_have_decl=1 else diff --git a/libiberty/configure.ac b/libiberty/configure.ac index c27e08e..3de5eca 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -291,7 +291,7 @@ AC_SUBST_FILE(host_makefile_frag) # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. -AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h spawn.h) +AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h spawn.h libgen.h) AC_HEADER_SYS_WAIT AC_HEADER_TIME @@ -370,6 +370,7 @@ funcs="$funcs gettimeofday" funcs="$funcs index" funcs="$funcs insque" funcs="$funcs memchr" +funcs="$funcs memrchr" funcs="$funcs memcmp" funcs="$funcs memcpy" funcs="$funcs memmem" @@ -436,7 +437,7 @@ if test "x" = "y"; then ffs __fsetlocking \ getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \ index insque \ - memchr memcmp memcpy memmem memmove memset mkstemps \ + memchr memrchr memcmp memcpy memmem memmove memset mkstemps \ on_exit \ pipe2 posix_spawn posix_spawnp psignal \ pstat_getdynamic pstat_getstatic putenv \ @@ -555,7 +556,7 @@ if test -n "${with_target_subdir}"; then for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \ getcwd getpagesize getrusage gettimeofday \ - index insque memchr memcmp memcpy memmove memset psignal \ + index insque memchr memrchr memcmp memcpy memmove memset psignal \ putenv random rename rindex sbrk setenv stpcpy strcasecmp \ strchr strdup strerror strncasecmp strrchr strstr strtod \ strtol strtoul sysconf times tmpnam vfprintf vprintf \ @@ -723,7 +724,12 @@ if test -z "${setobjs}"; then [AC_MSG_RESULT([no])]) AC_CHECK_FUNCS($checkfuncs) - AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf]) + AC_CHECK_DECLS([basename(char *)], [], [], [ +AC_INCLUDES_DEFAULT +#ifdef HAVE_LIBGEN_H +# include <libgen.h> +#endif]) + AC_CHECK_DECLS([ffs, asprintf, vasprintf, snprintf, vsnprintf]) AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc]) case "${host}" in *-*-darwin*) ;; # Darwin's sbrk implementation is deprecated. diff --git a/libiberty/configure.com b/libiberty/configure.com index 03018291..55aee2f 100644 --- a/libiberty/configure.com +++ b/libiberty/configure.com @@ -17,7 +17,7 @@ $DECK $ FILES="getopt,obstack,xexit,xmalloc,hex,getopt1,cplus-dem,cp-demangle,"+- "cp-demint,asprintf,vasprintf,mkstemps,concat,getruntime,getpagesize,"+- "getpwd,xstrerror,xmemdup,xstrdup,xatexit,choose-temp,fnmatch,objalloc,"+- - "safe-ctype,hashtab,lbasename,argv,lrealpath,make-temp-file,"+- + "safe-ctype,hashtab,lbasename,ldirname,argv,lrealpath,make-temp-file,"+- "stpcpy,unlink-if-ordinary" $ OPT="/noopt/debug/warnings=disable=(missingreturn)" $ CFLAGS=OPT + "/include=([],[-.include])/name=(as_is,shortened)" +- diff --git a/libiberty/functions.texi b/libiberty/functions.texi index b56b02e..7c7da1b 100644 --- a/libiberty/functions.texi +++ b/libiberty/functions.texi @@ -749,6 +749,20 @@ returned. @end deftypefn +@c memrchr.c:3 +@deftypefn Supplemental void* memrchr (const void *@var{s}, int @var{c}, @ + size_t @var{n}) + +This function searches memory for the character @var{c} in reverse order, +starting at @code{*@var{s}+@var{n}-1} . The search only ends with +the first occurrence of @var{c}, or when the start us reached; in particular, +a null character does not terminate the search. If the character @var{c} is +found within @var{length} characters of @code{*@var{s}}, a pointer +to the character is returned. If @var{c} is not found, then @code{NULL} is +returned. + +@end deftypefn + @c memcmp.c:6 @deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @ size_t @var{count}) diff --git a/libiberty/ldirname.c b/libiberty/ldirname.c new file mode 100644 index 0000000..e3cd5c8 --- /dev/null +++ b/libiberty/ldirname.c @@ -0,0 +1,94 @@ +/* Libiberty dirname. Like dirname, but is not overridden by the + system C library. + Copyright (C) 2025 Free Software Foundation, Inc. + +This file is part of the libiberty library. +Libiberty 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. + +Libiberty 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. + +You should have received a copy of the GNU Library General Public +License along with libiberty; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, +Boston, MA 02110-1301, USA. */ + +/* + +@deftypefn Replacement {char*} ldirname (const char *@var{name}) + +Given a pointer to a string containing a typical pathname +(@samp{/usr/src/cmd/ls/ls.c} for example), returns a string containing the +passed string up to, but not including, the final directory separator. + +If the given pathname doesn't contain a directory separator then this funtion +returns the empty string; this includes an empty given pathname. @code{NULL} +is returned on memory allocation error. + +@end deftypefn + +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "ansidecl.h" +#include "libiberty.h" +#include "safe-ctype.h" +#include "filenames.h" + +/* For malloc. */ +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +/* For memcpy. */ +# if HAVE_STRING_H +# include <string.h> +# else +# if HAVE_STRINGS_H +# include <strings.h> +# endif +# endif + +#define LDIRNAME(FPREFIX,DIRSEP) \ + char *FPREFIX##_ldirname (const char *name) \ + { \ + /* Note that lbasename guarantees that the returned */ \ + /* pointer lies within the passed string. */ \ + const char *basename = FPREFIX##_lbasename (name); \ + size_t size = basename - name; \ + char *res = NULL; \ + \ + res = (char*) malloc (size + 1); \ + if (res != NULL) \ + { \ + if (size > 0) \ + { \ + if (IS_DIR_SEPARATOR_1 ((DIRSEP),name[size - 1])) \ + size -= 1; \ + memcpy (res, name, size); \ + } \ + res[size] = '\0'; \ + } \ + \ + return res; \ + } + +LDIRNAME(dos,1) +LDIRNAME(unix,0) + +char * +ldirname (const char *name) +{ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + return dos_ldirname (name); +#else + return unix_ldirname (name); +#endif +} diff --git a/libiberty/makefile.vms b/libiberty/makefile.vms index 15a7d0a..4cfcc98 100644 --- a/libiberty/makefile.vms +++ b/libiberty/makefile.vms @@ -12,7 +12,7 @@ OBJS=getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\ asprintf.obj vasprintf.obj,mkstemps.obj,filename_cmp.obj,\ concat.obj,getruntime.obj,getpagesize.obj,getpwd.obj,xstrerror.obj,\ xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,\ - objalloc.obj,safe-ctype.obj,hashtab.obj,lbasename.obj,argv.obj,\ + objalloc.obj,safe-ctype.obj,hashtab.obj,lbasename.obj,ldirname.obj,argv.obj,\ lrealpath.obj,make-temp-file.obj,stpcpy.obj,unlink-if-ordinary.obj,\ dwarfnames.obj diff --git a/libiberty/memrchr.c b/libiberty/memrchr.c new file mode 100644 index 0000000..fe7713e --- /dev/null +++ b/libiberty/memrchr.c @@ -0,0 +1,33 @@ +/* + +@deftypefn Supplemental void* memrchr (const void *@var{s}, int @var{c}, @ + size_t @var{n}) + +This function searches memory for the character @var{c} in reverse order, +starting at @code{*@var{s}+@var{n}-1} . The search only ends with +the first occurrence of @var{c}, or when the start us reached; in particular, +a null character does not terminate the search. If the character @var{c} is +found within @var{length} characters of @code{*@var{s}}, a pointer +to the character is returned. If @var{c} is not found, then @code{NULL} is +returned. + +@end deftypefn + +*/ + +#include <ansidecl.h> +#include <stddef.h> + +void * +memrchr (const void *src_void, int c, size_t length) +{ + if (length == 0) + return NULL; + + const unsigned char *p = (const unsigned char*)src_void; + p += length; + while (*--p != (unsigned char)c) + if (src_void == p) + return NULL; + return (void *)p; +} diff --git a/libiberty/regex.c b/libiberty/regex.c index bc36f43..8337dea 100644 --- a/libiberty/regex.c +++ b/libiberty/regex.c @@ -3468,7 +3468,7 @@ PREFIX(regex_compile) (const char *ARG_PREFIX(pattern), PATFETCH (c); if ((c == '.' && *p == ']') || p == pend) break; - if (c1 < sizeof (str)) + if (c1 < sizeof (str) - 1) str[c1++] = c; else /* This is in any case an invalid class name. */ |