|
Line
Link Here
|
| 0 |
-- wv/field.c |
0 |
++ wv/field.c |
|
Lines 48-67
Link Here
|
| 48 |
return (ret); |
48 |
return (ret); |
| 49 |
} |
49 |
} |
| 50 |
|
50 |
|
|
|
51 |
#define TIMESTR_SIZE 4096 |
| 52 |
|
| 51 |
int |
53 |
int |
| 52 |
wvHandleDateTimePicture (char *retstring, size_t max, char *token, |
54 |
wvHandleDateTimePicture (char *retstring, size_t max, char *token, |
| 53 |
time_t * mytime) |
55 |
time_t * mytime) |
| 54 |
{ |
56 |
{ |
| 55 |
int no; |
57 |
int no; |
|
|
58 |
int consumed = 0; |
| 56 |
struct tm *current; |
59 |
struct tm *current; |
| 57 |
char timestr[4096]; |
60 |
char timestr[TIMESTR_SIZE]; |
| 58 |
char temp[64]; |
61 |
char temp[64]; |
| 59 |
timestr[0] = '\0'; |
62 |
timestr[0] = '\0'; |
| 60 |
|
63 |
|
| 61 |
if (!token) |
64 |
if (!token) |
| 62 |
return (0); |
65 |
return (0); |
| 63 |
current = localtime (mytime); |
66 |
current = localtime (mytime); |
| 64 |
while (*token) |
67 |
/* the '11' is the max width of an integer (10 digits for '4 billion') + nul */ |
|
|
68 |
while (*token && (consumed < (TIMESTR_SIZE - 11))) |
| 65 |
{ |
69 |
{ |
| 66 |
switch (*token) |
70 |
switch (*token) |
| 67 |
{ |
71 |
{ |
|
Lines 87-101
Link Here
|
| 87 |
case 1: |
91 |
case 1: |
| 88 |
sprintf (temp, "%d", current->tm_mon+1); |
92 |
sprintf (temp, "%d", current->tm_mon+1); |
| 89 |
strcat (timestr, temp); |
93 |
strcat (timestr, temp); |
|
|
94 |
consumed += strlen (temp); |
| 90 |
break; |
95 |
break; |
| 91 |
case 2: |
96 |
case 2: |
| 92 |
strcat (timestr, "%m"); |
97 |
strcat (timestr, "%m"); |
|
|
98 |
consumed += 2; |
| 93 |
break; |
99 |
break; |
| 94 |
case 3: |
100 |
case 3: |
| 95 |
strcat (timestr, "%b"); |
101 |
strcat (timestr, "%b"); |
|
|
102 |
consumed += 2; |
| 96 |
break; |
103 |
break; |
| 97 |
default: |
104 |
default: |
| 98 |
strcat (timestr, "%B"); |
105 |
strcat (timestr, "%B"); |
|
|
106 |
consumed += 2; |
| 99 |
break; |
107 |
break; |
| 100 |
} |
108 |
} |
| 101 |
break; |
109 |
break; |
|
Lines 154-162
Link Here
|
| 154 |
case 1: |
162 |
case 1: |
| 155 |
sprintf (temp, "%d", current->tm_hour % 12); |
163 |
sprintf (temp, "%d", current->tm_hour % 12); |
| 156 |
strcat (timestr, temp); |
164 |
strcat (timestr, temp); |
|
|
165 |
consumed += strlen (temp); |
| 157 |
break; |
166 |
break; |
| 158 |
default: |
167 |
default: |
| 159 |
strcat (timestr, "%I"); |
168 |
strcat (timestr, "%I"); |
|
|
169 |
consumed += 2; |
| 160 |
break; |
170 |
break; |
| 161 |
} |
171 |
} |
| 162 |
break; |
172 |
break; |
|
Lines 182-187
Link Here
|
| 182 |
case 1: |
192 |
case 1: |
| 183 |
sprintf (temp, "%d", current->tm_min); |
193 |
sprintf (temp, "%d", current->tm_min); |
| 184 |
strcat (timestr, temp); |
194 |
strcat (timestr, temp); |
|
|
195 |
consumed += strlen (temp); |
| 185 |
break; |
196 |
break; |
| 186 |
default: |
197 |
default: |
| 187 |
strcat (timestr, "%M"); |
198 |
strcat (timestr, "%M"); |