summarylogtreecommitdiffstats
path: root/sendmail-8.18.1-gcc-15-fix.patch
blob: 1b38cea303b0936bde3c9eed1760ef176f2b328f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
diff --git a/libsm/vfscanf.c b/libsm/vfscanf.c
index e1b7830..b0aa923 100644
--- a/libsm/vfscanf.c
+++ b/libsm/vfscanf.c
@@ -37,6 +37,7 @@ SM_IDSTR(id, "@(#)$Id: vfscanf.c,v 1.55 2013-11-22 20:51:44 ca Exp $")
 #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 @@ sm_vfscanf(fp, timeout, fmt0, ap)
 	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 @@ sm_vfscanf(fp, timeout, fmt0, ap)
 	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 @@ literal:
 			/* 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 @@ literal:
 			/* 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 @@ literal:
 			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 @@ literal:
 			if (isupper(c))
 				flags |= LONG;
 			c = CT_INT;
-			ccfn = (ULONGLONG_T (*)()) sm_strtoll;
 			base = 10;
 			break;
 		}
@@ -628,7 +620,12 @@ literal:
 				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;
diff --git a/mailstats/mailstats.c b/mailstats/mailstats.c
index 6b34a57..5395bec 100644
--- a/mailstats/mailstats.c
+++ b/mailstats/mailstats.c
@@ -65,7 +65,7 @@ main(argc, argv)
 	char sfilebuf[MAXPATHLEN];
 	char buf[MAXLINE];
 	struct statistics stats;
-	extern char *ctime();
+	extern char *ctime(const time_t *);
 	extern char *optarg;
 	extern int optind;
 # define MSOPTS "cC:f:opP"