strptime.c (71579) | strptime.c (72168) |
---|---|
1/* 2 * Powerdog Industries kindly requests feedback from anyone modifying 3 * this function: 4 * 5 * Date: Thu, 05 Jun 1997 23:17:17 -0400 6 * From: Kevin Ruddy <kevin.ruddy@powerdog.com> 7 * To: James FitzGibbon <james@nexis.net> 8 * Subject: Re: Use of your strptime(3) code (fwd) --- 39 unchanged lines hidden (view full) --- 48 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 49 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 50 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 51 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 52 */ 53 54#ifdef LIBC_RCS 55static const char rcsid[] = | 1/* 2 * Powerdog Industries kindly requests feedback from anyone modifying 3 * this function: 4 * 5 * Date: Thu, 05 Jun 1997 23:17:17 -0400 6 * From: Kevin Ruddy <kevin.ruddy@powerdog.com> 7 * To: James FitzGibbon <james@nexis.net> 8 * Subject: Re: Use of your strptime(3) code (fwd) --- 39 unchanged lines hidden (view full) --- 48 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 49 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 50 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 51 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 52 */ 53 54#ifdef LIBC_RCS 55static const char rcsid[] = |
56 "$FreeBSD: head/lib/libc/stdtime/strptime.c 71579 2001-01-24 13:01:12Z deischen $"; | 56 "$FreeBSD: head/lib/libc/stdtime/strptime.c 72168 2001-02-08 17:08:13Z phantom $"; |
57#endif 58 59#ifndef lint 60#ifndef NOID 61static char copyright[] = 62"@(#) Copyright (c) 1994 Powerdog Industries. All rights reserved."; 63static char sccsid[] = "@(#)strptime.c 0.1 (Powerdog) 94/03/27"; 64#endif /* !defined NOID */ --- 18 unchanged lines hidden (view full) --- 83static char * 84_strptime(const char *buf, const char *fmt, struct tm *tm) 85{ 86 char c; 87 const char *ptr; 88 int i, 89 len; 90 int Ealternative, Oalternative; | 57#endif 58 59#ifndef lint 60#ifndef NOID 61static char copyright[] = 62"@(#) Copyright (c) 1994 Powerdog Industries. All rights reserved."; 63static char sccsid[] = "@(#)strptime.c 0.1 (Powerdog) 94/03/27"; 64#endif /* !defined NOID */ --- 18 unchanged lines hidden (view full) --- 83static char * 84_strptime(const char *buf, const char *fmt, struct tm *tm) 85{ 86 char c; 87 const char *ptr; 88 int i, 89 len; 90 int Ealternative, Oalternative; |
91 struct lc_time_T *tptr = __get_current_time_locale(); |
|
91 92 ptr = fmt; 93 while (*ptr != 0) { 94 if (*buf == 0) 95 break; 96 97 c = *ptr++; 98 --- 13 unchanged lines hidden (view full) --- 112 switch (c) { 113 case 0: 114 case '%': 115 if (*buf++ != '%') 116 return 0; 117 break; 118 119 case '+': | 92 93 ptr = fmt; 94 while (*ptr != 0) { 95 if (*buf == 0) 96 break; 97 98 c = *ptr++; 99 --- 13 unchanged lines hidden (view full) --- 113 switch (c) { 114 case 0: 115 case '%': 116 if (*buf++ != '%') 117 return 0; 118 break; 119 120 case '+': |
120 buf = _strptime(buf, Locale->date_fmt, tm); | 121 buf = _strptime(buf, tptr->date_fmt, tm); |
121 if (buf == 0) 122 return 0; 123 break; 124 125 case 'C': 126 if (!isdigit((unsigned char)*buf)) 127 return 0; 128 --- 34 unchanged lines hidden (view full) --- 163 break; 164 Oalternative++; 165 goto label; 166 167 case 'F': 168 case 'f': 169 if (!Ealternative) 170 break; | 122 if (buf == 0) 123 return 0; 124 break; 125 126 case 'C': 127 if (!isdigit((unsigned char)*buf)) 128 return 0; 129 --- 34 unchanged lines hidden (view full) --- 164 break; 165 Oalternative++; 166 goto label; 167 168 case 'F': 169 case 'f': 170 if (!Ealternative) 171 break; |
171 buf = _strptime(buf, (c == 'f') ? Locale->Ef_fmt : Locale->EF_fmt, tm); | 172 buf = _strptime(buf, (c == 'f') ? tptr->Ef_fmt : tptr->EF_fmt, tm); |
172 if (buf == 0) 173 return 0; 174 break; 175 176 case 'R': 177 buf = _strptime(buf, "%H:%M", tm); 178 if (buf == 0) 179 return 0; --- 7 unchanged lines hidden (view full) --- 187 188 case 'T': 189 buf = _strptime(buf, "%H:%M:%S", tm); 190 if (buf == 0) 191 return 0; 192 break; 193 194 case 'X': | 173 if (buf == 0) 174 return 0; 175 break; 176 177 case 'R': 178 buf = _strptime(buf, "%H:%M", tm); 179 if (buf == 0) 180 return 0; --- 7 unchanged lines hidden (view full) --- 188 189 case 'T': 190 buf = _strptime(buf, "%H:%M:%S", tm); 191 if (buf == 0) 192 return 0; 193 break; 194 195 case 'X': |
195 buf = _strptime(buf, Locale->X_fmt, tm); | 196 buf = _strptime(buf, tptr->X_fmt, tm); |
196 if (buf == 0) 197 return 0; 198 break; 199 200 case 'x': | 197 if (buf == 0) 198 return 0; 199 break; 200 201 case 'x': |
201 buf = _strptime(buf, Locale->x_fmt, tm); | 202 buf = _strptime(buf, tptr->x_fmt, tm); |
202 if (buf == 0) 203 return 0; 204 break; 205 206 case 'j': 207 if (!isdigit((unsigned char)*buf)) 208 return 0; 209 --- 73 unchanged lines hidden (view full) --- 283 ptr++; 284 break; 285 286 case 'p': 287 /* 288 * XXX This is bogus if parsed before hour-related 289 * specifiers. 290 */ | 203 if (buf == 0) 204 return 0; 205 break; 206 207 case 'j': 208 if (!isdigit((unsigned char)*buf)) 209 return 0; 210 --- 73 unchanged lines hidden (view full) --- 284 ptr++; 285 break; 286 287 case 'p': 288 /* 289 * XXX This is bogus if parsed before hour-related 290 * specifiers. 291 */ |
291 len = strlen(Locale->am); 292 if (strncasecmp(buf, Locale->am, len) == 0) { | 292 len = strlen(tptr->am); 293 if (strncasecmp(buf, tptr->am, len) == 0) { |
293 if (tm->tm_hour > 12) 294 return 0; 295 if (tm->tm_hour == 12) 296 tm->tm_hour = 0; 297 buf += len; 298 break; 299 } 300 | 294 if (tm->tm_hour > 12) 295 return 0; 296 if (tm->tm_hour == 12) 297 tm->tm_hour = 0; 298 buf += len; 299 break; 300 } 301 |
301 len = strlen(Locale->pm); 302 if (strncasecmp(buf, Locale->pm, len) == 0) { | 302 len = strlen(tptr->pm); 303 if (strncasecmp(buf, tptr->pm, len) == 0) { |
303 if (tm->tm_hour > 12) 304 return 0; 305 if (tm->tm_hour != 12) 306 tm->tm_hour += 12; 307 buf += len; 308 break; 309 } 310 311 return 0; 312 313 case 'A': 314 case 'a': | 304 if (tm->tm_hour > 12) 305 return 0; 306 if (tm->tm_hour != 12) 307 tm->tm_hour += 12; 308 buf += len; 309 break; 310 } 311 312 return 0; 313 314 case 'A': 315 case 'a': |
315 for (i = 0; i < asizeof(Locale->weekday); i++) { | 316 for (i = 0; i < asizeof(tptr->weekday); i++) { |
316 if (c == 'A') { | 317 if (c == 'A') { |
317 len = strlen(Locale->weekday[i]); | 318 len = strlen(tptr->weekday[i]); |
318 if (strncasecmp(buf, | 319 if (strncasecmp(buf, |
319 Locale->weekday[i], | 320 tptr->weekday[i], |
320 len) == 0) 321 break; 322 } else { | 321 len) == 0) 322 break; 323 } else { |
323 len = strlen(Locale->wday[i]); | 324 len = strlen(tptr->wday[i]); |
324 if (strncasecmp(buf, | 325 if (strncasecmp(buf, |
325 Locale->wday[i], | 326 tptr->wday[i], |
326 len) == 0) 327 break; 328 } 329 } | 327 len) == 0) 328 break; 329 } 330 } |
330 if (i == asizeof(Locale->weekday)) | 331 if (i == asizeof(tptr->weekday)) |
331 return 0; 332 333 tm->tm_wday = i; 334 buf += len; 335 break; 336 337 case 'U': 338 case 'W': --- 62 unchanged lines hidden (view full) --- 401 if (*buf != 0 && isspace((unsigned char)*buf)) 402 while (*ptr != 0 && !isspace((unsigned char)*ptr)) 403 ptr++; 404 break; 405 406 case 'B': 407 case 'b': 408 case 'h': | 332 return 0; 333 334 tm->tm_wday = i; 335 buf += len; 336 break; 337 338 case 'U': 339 case 'W': --- 62 unchanged lines hidden (view full) --- 402 if (*buf != 0 && isspace((unsigned char)*buf)) 403 while (*ptr != 0 && !isspace((unsigned char)*ptr)) 404 ptr++; 405 break; 406 407 case 'B': 408 case 'b': 409 case 'h': |
409 for (i = 0; i < asizeof(Locale->month); i++) { | 410 for (i = 0; i < asizeof(tptr->month); i++) { |
410 if (Oalternative) { 411 if (c == 'B') { | 411 if (Oalternative) { 412 if (c == 'B') { |
412 len = strlen(Locale->alt_month[i]); | 413 len = strlen(tptr->alt_month[i]); |
413 if (strncasecmp(buf, | 414 if (strncasecmp(buf, |
414 Locale->alt_month[i], | 415 tptr->alt_month[i], |
415 len) == 0) 416 break; 417 } 418 } else { 419 if (c == 'B') { | 416 len) == 0) 417 break; 418 } 419 } else { 420 if (c == 'B') { |
420 len = strlen(Locale->month[i]); | 421 len = strlen(tptr->month[i]); |
421 if (strncasecmp(buf, | 422 if (strncasecmp(buf, |
422 Locale->month[i], | 423 tptr->month[i], |
423 len) == 0) 424 break; 425 } else { | 424 len) == 0) 425 break; 426 } else { |
426 len = strlen(Locale->mon[i]); | 427 len = strlen(tptr->mon[i]); |
427 if (strncasecmp(buf, | 428 if (strncasecmp(buf, |
428 Locale->mon[i], | 429 tptr->mon[i], |
429 len) == 0) 430 break; 431 } 432 } 433 } | 430 len) == 0) 431 break; 432 } 433 } 434 } |
434 if (i == asizeof(Locale->month)) | 435 if (i == asizeof(tptr->month)) |
435 return 0; 436 437 tm->tm_mon = i; 438 buf += len; 439 break; 440 441 case 'm': 442 if (!isdigit((unsigned char)*buf)) --- 97 unchanged lines hidden --- | 436 return 0; 437 438 tm->tm_mon = i; 439 buf += len; 440 break; 441 442 case 'm': 443 if (!isdigit((unsigned char)*buf)) --- 97 unchanged lines hidden --- |