Author: kib
Date: Thu Jan 10 10:37:19 2019
New Revision: 342915
URL: https://svnweb.freebsd.org/changeset/base/342915

Log:
  MFC r342551, r342574:
  Bump sys_errlist size to keep ABI backward-compatible for some time.

Modified:
  stable/12/lib/libc/gen/errlst.c
  stable/12/lib/libc/include/errlst.h
  stable/12/lib/libc/string/strerror.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/lib/libc/gen/errlst.c
==============================================================================
--- stable/12/lib/libc/gen/errlst.c     Thu Jan 10 08:54:33 2019        
(r342914)
+++ stable/12/lib/libc/gen/errlst.c     Thu Jan 10 10:37:19 2019        
(r342915)
@@ -33,9 +33,12 @@
 __SCCSID("@(#)errlst.c 8.2 (Berkeley) 11/16/93");
 __FBSDID("$FreeBSD$");
 
+#include <errno.h>
 #include <stdio.h>
 #include "errlst.h"
 
+const char __uprefix[] = "Unknown error";
+
 const char *const sys_errlist[] = {
        "No error: 0",                          /*  0 - ENOERROR */
        "Operation not permitted",              /*  1 - EPERM */
@@ -155,8 +158,67 @@ const char *const sys_errlist[] = {
        "Not permitted in capability mode",     /* 94 - ECAPMODE */
        "State not recoverable",                /* 95 - ENOTRECOVERABLE */
        "Previous owner died",                  /* 96 - EOWNERDEAD */
+
+/*
+ * Reserved space in sys_errlist, take the next slot for a next error code.
+ * Reserve prevents the array size from changing for some time.
+ */
+       __uprefix,                              /* 97 */
+       __uprefix,                              /* 98 */
+       __uprefix,                              /* 99 */
+       __uprefix,                              /* 100 */
+       __uprefix,                              /* 101 */
+       __uprefix,                              /* 102 */
+       __uprefix,                              /* 103 */
+       __uprefix,                              /* 104 */
+       __uprefix,                              /* 105 */
+       __uprefix,                              /* 106 */
+       __uprefix,                              /* 107 */
+       __uprefix,                              /* 108 */
+       __uprefix,                              /* 109 */
+       __uprefix,                              /* 110 */
+       __uprefix,                              /* 111 */
+       __uprefix,                              /* 112 */
+       __uprefix,                              /* 113 */
+       __uprefix,                              /* 114 */
+       __uprefix,                              /* 115 */
+       __uprefix,                              /* 116 */
+       __uprefix,                              /* 117 */
+       __uprefix,                              /* 118 */
+       __uprefix,                              /* 119 */
+       __uprefix,                              /* 120 */
+       __uprefix,                              /* 121 */
+       __uprefix,                              /* 122 */
+       __uprefix,                              /* 123 */
+       __uprefix,                              /* 124 */
+       __uprefix,                              /* 125 */
+       __uprefix,                              /* 126 */
+       __uprefix,                              /* 127 */
+       __uprefix,                              /* 128 */
+       __uprefix,                              /* 129 */
+       __uprefix,                              /* 130 */
+       __uprefix,                              /* 131 */
+       __uprefix,                              /* 132 */
+       __uprefix,                              /* 133 */
+       __uprefix,                              /* 134 */
+       __uprefix,                              /* 135 */
+       __uprefix,                              /* 136 */
+       __uprefix,                              /* 137 */
+       __uprefix,                              /* 138 */
+       __uprefix,                              /* 139 */
+       __uprefix,                              /* 140 */
+       __uprefix,                              /* 141 */
+       __uprefix,                              /* 142 */
+       __uprefix,                              /* 143 */
+       __uprefix,                              /* 144 */
+       __uprefix,                              /* 145 */
+       __uprefix,                              /* 146 */
+       __uprefix,                              /* 147 */
+       __uprefix,                              /* 148 */
+       __uprefix,                              /* 149 */
+       __uprefix,                              /* 150 */
 };
-const int sys_nerr = sizeof(sys_errlist) / sizeof(sys_errlist[0]);
+const int sys_nerr = ELAST + 1;
 
 #ifdef PIC
 __strong_reference(sys_errlist, __hidden_sys_errlist);

Modified: stable/12/lib/libc/include/errlst.h
==============================================================================
--- stable/12/lib/libc/include/errlst.h Thu Jan 10 08:54:33 2019        
(r342914)
+++ stable/12/lib/libc/include/errlst.h Thu Jan 10 10:37:19 2019        
(r342915)
@@ -42,4 +42,6 @@ extern const int __hidden_sys_nerr __hidden;
 #define __hidden_sys_nerr sys_nerr
 #endif
 
+extern const char __uprefix[] __hidden;
+
 #endif /* __ERRLST_H__ */

Modified: stable/12/lib/libc/string/strerror.c
==============================================================================
--- stable/12/lib/libc/string/strerror.c        Thu Jan 10 08:54:33 2019        
(r342914)
+++ stable/12/lib/libc/string/strerror.c        Thu Jan 10 10:37:19 2019        
(r342915)
@@ -46,22 +46,19 @@ __FBSDID("$FreeBSD$");
 
 #include "errlst.h"
 
-#define        UPREFIX         "Unknown error"
-
 /*
- * Define a buffer size big enough to describe a 64-bit signed integer
- * converted to ASCII decimal (19 bytes), with an optional leading sign
- * (1 byte); finally, we get the prefix, delimiter (": ") and a trailing
- * NUL from UPREFIX.
+ * Define buffer big enough to contain delimiter (": ", 2 bytes),
+ * 64-bit signed integer converted to ASCII decimal (19 bytes) with
+ * optional leading sign (1 byte), and a trailing NUL.
  */
-#define        EBUFSIZE        (20 + 2 + sizeof(UPREFIX))
+#define        EBUFSIZE        (2 + 19 + 1 + 1)
 
 /*
  * Doing this by hand instead of linking with stdio(3) avoids bloat for
  * statically linked binaries.
  */
 static void
-errstr(int num, char *uprefix, char *buf, size_t len)
+errstr(int num, const char *uprefix, char *buf, size_t len)
 {
        char *t;
        unsigned int uerr;
@@ -94,9 +91,9 @@ strerror_r(int errnum, char *strerrbuf, size_t buflen)
        if (errnum < 0 || errnum >= __hidden_sys_nerr) {
                errstr(errnum,
 #if defined(NLS)
-                       catgets(catd, 1, 0xffff, UPREFIX),
+                       catgets(catd, 1, 0xffff, __uprefix),
 #else
-                       UPREFIX,
+                       __uprefix,
 #endif
                        strerrbuf, buflen);
                retval = EINVAL;
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to