Changeset 3613 for trunk/src/sed/lib/strerror.c
- Timestamp:
- Sep 19, 2024, 2:34:43 AM (10 months ago)
- Location:
- trunk/src/sed
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/sed
-
Property svn:mergeinfo
set to
/vendor/sed/current merged eligible
-
Property svn:mergeinfo
set to
-
trunk/src/sed/lib/strerror.c
r599 r3613 1 /* strerror -- return a string corresponding to an error number. 2 This is a quickie version only intended as compatability glue 3 for systems which predate the ANSI C definition of the function; 4 the glibc version is recommended for more general use. 1 /* strerror.c --- POSIX compatible system error routine 5 2 6 Copyright (C) 1998Free Software Foundation, Inc.3 Copyright (C) 2007-2022 Free Software Foundation, Inc. 7 4 8 This program is free software; you can redistribute it and/or modify it9 under the terms of the GNU General Public License as published by the10 Free Software Foundation; either version 2, or (at your option) any11 later version.5 This file is free software: you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 12 9 13 This programis distributed in the hope that it will be useful,10 This file is distributed in the hope that it will be useful, 14 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details.13 GNU Lesser General Public License for more details. 17 14 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, 51 Franklin Street, Fifth Floor, 21 Boston, MA 02110-1301, USA. */ 15 You should have received a copy of the GNU Lesser General Public License 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 22 17 23 #include "config.h"18 #include <config.h> 24 19 25 #ifndef HAVE_STRERROR 20 /* Specification. */ 21 #include <string.h> 26 22 27 # ifndef BOOTSTRAP 28 # include <stdio.h> 29 # endif 30 # ifdef HAVE_STRING_H 31 # include <string.h> 32 # endif 33 # include <errno.h> 34 # undef strerror 23 #include <errno.h> 24 #include <stdio.h> 25 #include <stdlib.h> 26 #include <string.h> 35 27 36 extern int sys_nerr; 37 extern char *sys_errlist[]; 28 #include "intprops.h" 29 #include "strerror-override.h" 30 31 /* Use the system functions, not the gnulib overrides in this file. */ 32 #undef sprintf 38 33 39 34 char * 40 strerror (e)41 int e; 35 strerror (int n) 36 #undef strerror 42 37 { 43 static char unknown_string[] =44 "Unknown error code #xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";38 static char buf[STACKBUF_LEN]; 39 size_t len; 45 40 46 if (0<=e && e<sys_nerr) 47 return sys_errlist[e]; 48 sprintf(unknown_string+20, "%d", e); 49 return unknown_string; 41 /* Cast away const, due to the historical signature of strerror; 42 callers should not be modifying the string. */ 43 const char *msg = strerror_override (n); 44 if (msg) 45 return (char *) msg; 46 47 msg = strerror (n); 48 49 /* Our strerror_r implementation might use the system's strerror 50 buffer, so all other clients of strerror have to see the error 51 copied into a buffer that we manage. This is not thread-safe, 52 even if the system strerror is, but portable programs shouldn't 53 be using strerror if they care about thread-safety. */ 54 if (!msg || !*msg) 55 { 56 static char const fmt[] = "Unknown error %d"; 57 static_assert (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); 58 sprintf (buf, fmt, n); 59 errno = EINVAL; 60 return buf; 61 } 62 63 /* Fix STACKBUF_LEN if this ever aborts. */ 64 len = strlen (msg); 65 if (sizeof buf <= len) 66 abort (); 67 68 memcpy (buf, msg, len + 1); 69 return buf; 50 70 } 51 52 #endif /* !HAVE_STRERROR */
Note:
See TracChangeset
for help on using the changeset viewer.