test suite fixes for some locales; fix to make bind -x bindings work with negative arguments; several portability fixes from pkgsrc; fixes for funsubs with return builtin state and local OPTIND

This commit is contained in:
Chet Ramey
2023-12-04 16:14:53 -05:00
parent 2b877d5f9c
commit 9702b74a28
24 changed files with 930 additions and 847 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
/*
Copyright (C) 2020,2022 Free Software Foundation, Inc.
Copyright (C) 2020,2022,2023 Free Software Foundation, Inc.
Bash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -210,7 +210,7 @@ asort_builtin(WORD_LIST *list)
return EX_USAGE;
}
if (legal_identifier (list->word->word) == 0) {
if (valid_identifier (list->word->word) == 0) {
sh_invalidid (list->word->word);
return EXECUTION_FAILURE;
}
@@ -220,7 +220,7 @@ asort_builtin(WORD_LIST *list)
builtin_usage();
return EX_USAGE;
}
if (legal_identifier (list->next->word->word) == 0) {
if (valid_identifier (list->next->word->word) == 0) {
sh_invalidid (list->next->word->word);
return EXECUTION_FAILURE;
}
+1 -1
View File
@@ -477,7 +477,7 @@ cut_internal (int which, WORD_LIST *list)
}
list = loptend;
if (array_name && (legal_identifier (array_name) == 0))
if (array_name && (valid_identifier (array_name) == 0))
{
sh_invalidid (array_name);
return (EXECUTION_FAILURE);
+2 -2
View File
@@ -2,7 +2,7 @@
array with the fields */
/*
Copyright (C) 2022 Free Software Foundation, Inc.
Copyright (C) 2022,2023 Free Software Foundation, Inc.
Bash is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -203,7 +203,7 @@ dsv_builtin (WORD_LIST *list)
if (array_name == 0)
array_name = DSV_ARRAY_DEFAULT;
if (legal_identifier (array_name) == 0)
if (valid_identifier (array_name) == 0)
{
sh_invalidid (array_name);
return (EXECUTION_FAILURE);
+13 -1
View File
@@ -98,9 +98,21 @@ static const struct
# define O_NOSIGPIPE 0
#endif
#ifndef O_NDELAY
/* Solaris has this */
# define O_NDELAY 0
#endif
#ifndef O_LARGEFILE
/* HP-UX has this */
# define O_LARGEFILE 0
#endif
#ifndef O_CLOEXEC
# define IGNOREFLAGS (O_RDONLY|O_WRONLY|O_RDWR)
# define ALLFLAGS (O_APPEND|O_ASYNC|O_SYNC|O_NONBLOCK|O_FSYNC|O_DSYNC|\
O_RSYNC|O_ALT_IO|O_DIRECT|O_NOATIME|O_NOSIGPIPE)
O_RSYNC|O_ALT_IO|O_DIRECT|O_NOATIME|O_NOSIGPIPE|O_NDELAY|O_LARGEFILE|\
IGNOREFLAGS)
/* An unused bit in the file status flags word we can use to pass around the
state of close-on-exec. */
+14
View File
@@ -340,7 +340,9 @@ static const struct conf vars[] =
{ "_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO, SYSCONF },
#endif
{ "_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING, SYSCONF },
#ifdef _SC_REALTIME_SIGNALS
{ "_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS, SYSCONF },
#endif
{ "_POSIX_SAVED_IDS", _SC_SAVED_IDS, SYSCONF },
#ifdef _SC_SELECT
{ "_POSIX_SELECT", _SC_SELECT, SYSCONF },
@@ -377,7 +379,9 @@ static const struct conf vars[] =
{ "_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED, SYSCONF },
{ "_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS, SYSCONF },
{ "_POSIX_TIMERS", _SC_TIMERS, SYSCONF },
#ifdef _SC_TIMER_MAX
{ "TIMER_MAX", _SC_TIMER_MAX, SYSCONF },
#endif
#ifdef _POSIX_TZNAME_MAX
{ "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
#else
@@ -754,8 +758,12 @@ static const struct conf vars[] =
{ "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF },
#endif
{ "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF },
#ifdef _SC_CPUTIME
{ "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF },
#endif
#ifdef _SC_THREAD_CPUTIME
{ "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF },
#endif
#ifdef _SC_DEVICE_SPECIFIC
{ "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF },
#endif
@@ -837,7 +845,9 @@ static const struct conf vars[] =
#ifdef _SC_AIO_PRIO_DELTA_MAX
{ "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF },
#endif
#ifdef _SC_DELAYTIMER_MAX
{ "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF },
#endif
{ "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF },
{ "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
{ "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF },
@@ -857,14 +867,18 @@ static const struct conf vars[] =
#ifdef _SC_TRACE_LOG
{ "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF },
#endif
#ifdef _SC_RTSIG_MAX
{ "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF },
#endif
#ifdef _SC_SEM_NSEMS_MAX
{ "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF },
#endif
#ifdef _SC_SEM_VALUE_MAX
{ "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF },
#endif
#ifdef _SC_SIGQUEUE_MAX
{ "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF },
#endif
#ifdef _PC_FILESIZEBITS
{ "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF },
#endif
+1 -1
View File
@@ -157,7 +157,7 @@ kv_builtin (WORD_LIST *list)
if (array_name == 0)
array_name = KV_ARRAY_DEFAULT;
if (legal_identifier (array_name) == 0)
if (valid_identifier (array_name) == 0)
{
sh_invalidid (array_name);
return (EXECUTION_FAILURE);
+1 -1
View File
@@ -428,7 +428,7 @@ cut_internal (int which, WORD_LIST *list)
}
list = loptend;
if (array_name && (legal_identifier (array_name) == 0))
if (array_name && (valid_identifier (array_name) == 0))
{
sh_invalidid (array_name);
return (EXECUTION_FAILURE);
+1 -1
View File
@@ -75,7 +75,7 @@ mktemp_builtin (WORD_LIST *list)
if (varname) /* check for validity, not readonly */
{
if (legal_identifier (varname) == 0)
if (valid_identifier (varname) == 0)
{
if (qflag == 0)
sh_invalidid (varname);
+1 -1
View File
@@ -109,7 +109,7 @@ print_builtin (WORD_LIST *list)
case 'p':
break; /* NOP */
case 'u':
if (all_digits (list_optarg) && legal_number (list_optarg, &lfd) && lfd == (int)lfd)
if (all_digits (list_optarg) && valid_number (list_optarg, &lfd) && lfd == (int)lfd)
ofd = lfd;
else
{
+2 -2
View File
@@ -22,7 +22,7 @@
*/
/*
Copyright (C) 1999-2009,2021,2022 Free Software Foundation, Inc.
Copyright (C) 1999-2009,2021,2022,2023 Free Software Foundation, Inc.
This file is part of GNU Bash.
Bash is free software: you can redistribute it and/or modify
@@ -122,7 +122,7 @@ realpath_builtin(WORD_LIST *list)
}
#if defined (ARRAY_VARS)
if (aflag && legal_identifier (aname) == 0) {
if (aflag && valid_identifier (aname) == 0) {
sh_invalidid(aname);
return (EXECUTION_FAILURE);
}
+1 -1
View File
@@ -371,7 +371,7 @@ stat_builtin (WORD_LIST *list)
}
}
if (legal_identifier (aname) == 0)
if (valid_identifier (aname) == 0)
{
sh_invalidid (aname);
return (EXECUTION_FAILURE);