mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-12-19 08:29:37 +00:00
* Finally, use `PATCHES()` array * Backport C23 fixes from 8.18.1.10 snapshot to 8.18.1 Signed-off-by: Cristian Othón Martínez Vera <cfuga@cfuga.mx> Part-of: https://github.com/gentoo/gentoo/pull/43481 Signed-off-by: Sam James <sam@gentoo.org>
113 lines
2.6 KiB
Diff
113 lines
2.6 KiB
Diff
Bug: https://bugs.gentoo.org/944460
|
|
Bug: https://bugs.gentoo.org/945726
|
|
|
|
--- a/libsm/vfscanf.c
|
|
+++ b/libsm/vfscanf.c
|
|
@@ -37,6 +37,7 @@
|
|
#define SUPPRESS 0x10 /* suppress assignment */
|
|
#define POINTER 0x20 /* weird %p pointer (`fake hex') */
|
|
#define NOSKIP 0x40 /* do not skip blanks */
|
|
+#define UNSIGNED 0x80 /* unsigned conversions */
|
|
|
|
/*
|
|
** The following are used in numeric conversions only:
|
|
@@ -122,9 +123,6 @@
|
|
int nassigned; /* number of fields assigned */
|
|
int nread; /* number of characters consumed from fp */
|
|
int base; /* base argument to strtoll/strtoull */
|
|
-
|
|
- /* conversion function (strtoll/strtoull) */
|
|
- ULONGLONG_T (*ccfn) __P((const char *, char **, int));
|
|
char ccltab[256]; /* character class table for %[...] */
|
|
char buf[BUF]; /* buffer for numeric conversions */
|
|
SM_EVENT *evt = NULL;
|
|
@@ -160,7 +158,6 @@
|
|
nassigned = 0;
|
|
nread = 0;
|
|
base = 0; /* XXX just to keep gcc happy */
|
|
- ccfn = NULL; /* XXX just to keep gcc happy */
|
|
for (;;)
|
|
{
|
|
c = *fmt++;
|
|
@@ -240,13 +237,11 @@
|
|
/* FALLTHROUGH */
|
|
case 'd':
|
|
c = CT_INT;
|
|
- ccfn = (ULONGLONG_T (*)())sm_strtoll;
|
|
base = 10;
|
|
break;
|
|
|
|
case 'i':
|
|
c = CT_INT;
|
|
- ccfn = (ULONGLONG_T (*)())sm_strtoll;
|
|
base = 0;
|
|
break;
|
|
|
|
@@ -255,21 +250,20 @@
|
|
/* FALLTHROUGH */
|
|
case 'o':
|
|
c = CT_INT;
|
|
- ccfn = sm_strtoull;
|
|
+ flags |= UNSIGNED;
|
|
base = 8;
|
|
break;
|
|
|
|
case 'u':
|
|
c = CT_INT;
|
|
- ccfn = sm_strtoull;
|
|
+ flags |= UNSIGNED;
|
|
base = 10;
|
|
break;
|
|
|
|
case 'X':
|
|
case 'x':
|
|
- flags |= PFXOK; /* enable 0x prefixing */
|
|
+ flags |= PFXOK | UNSIGNED;
|
|
c = CT_INT;
|
|
- ccfn = sm_strtoull;
|
|
base = 16;
|
|
break;
|
|
|
|
@@ -297,9 +291,8 @@
|
|
break;
|
|
|
|
case 'p': /* pointer format is like hex */
|
|
- flags |= POINTER | PFXOK;
|
|
+ flags |= POINTER | PFXOK | UNSIGNED;
|
|
c = CT_INT;
|
|
- ccfn = sm_strtoull;
|
|
base = 16;
|
|
break;
|
|
|
|
@@ -324,7 +317,6 @@
|
|
if (isupper(c))
|
|
flags |= LONG;
|
|
c = CT_INT;
|
|
- ccfn = (ULONGLONG_T (*)()) sm_strtoll;
|
|
base = 10;
|
|
break;
|
|
}
|
|
@@ -628,7 +620,12 @@
|
|
ULONGLONG_T res;
|
|
|
|
*p = 0;
|
|
- res = (*ccfn)(buf, (char **)NULL, base);
|
|
+ if (flags & UNSIGNED)
|
|
+ res = sm_strtoull(buf, (char **)NULL,
|
|
+ base);
|
|
+ else
|
|
+ res = sm_strtoll(buf, (char **)NULL,
|
|
+ base);
|
|
if (flags & POINTER)
|
|
*SM_VA_ARG(ap, void **) =
|
|
(void *)(long) res;
|
|
--- a/mailstats/mailstats.c
|
|
+++ b/mailstats/mailstats.c
|
|
@@ -65,7 +65,6 @@
|
|
char sfilebuf[MAXPATHLEN];
|
|
char buf[MAXLINE];
|
|
struct statistics stats;
|
|
- extern char *ctime();
|
|
extern char *optarg;
|
|
extern int optind;
|
|
# define MSOPTS "cC:f:opP"
|