| /* { dg-options "-O2 -mcmodel=small -fPIC -fno-builtin" } */ |
| /* { dg-do compile } */ |
| |
| typedef long unsigned int size_t; |
| enum |
| { |
| __LC_TIME = 2, |
| }; |
| enum |
| { |
| ABDAY_1 = (((__LC_TIME) << 16) | (0)), |
| DAY_1, |
| ABMON_1, |
| MON_1, |
| D_T_FMT, |
| }; |
| typedef struct __locale_struct |
| { |
| struct locale_data *__locales[13]; |
| } *__locale_t; |
| struct tm |
| { |
| int tm_sec; |
| int tm_min; |
| int tm_hour; |
| }; |
| struct locale_data |
| { |
| const char *name; |
| struct |
| { |
| const char *string; |
| } |
| values []; |
| }; |
| extern const struct locale_data _nl_C_LC_TIME __attribute__ ((visibility ("hidden"))); |
| extern void *memset (void *s, int c, size_t n); |
| extern size_t strlen (const char *s); |
| extern int __strncasecmp_l (const char *s1, const char *s2, size_t n, __locale_t locale); |
| char * |
| __strptime_internal (rp, fmt, tmp, statep , locale) |
| const char *rp; |
| const char *fmt; |
| __locale_t locale; |
| void *statep; |
| int tmp; |
| { |
| struct locale_data *const current = locale->__locales[__LC_TIME]; |
| const char *rp_backup; |
| const char *rp_longest; |
| int cnt; |
| size_t val; |
| enum ptime_locale_status { not, loc, raw } decided_longest; |
| struct __strptime_state |
| { |
| enum ptime_locale_status decided : 2; |
| } s; |
| struct tm tmb; |
| struct tm *tm; |
| if (statep == ((void *)0)) |
| { |
| memset (&s, 0, sizeof (s)); |
| } |
| { |
| tm = &tmb; |
| } |
| while (*fmt != '\0') |
| { |
| if (*fmt != '%') |
| { |
| if (*fmt++ != *rp++) return ((void *)0); |
| continue; |
| } |
| if (statep != ((void *)0)) |
| { |
| ++fmt; |
| } |
| rp_backup = rp; |
| switch (*fmt++) |
| { |
| case '%': |
| for (cnt = 0; cnt < 7; ++cnt) |
| { |
| const char *trp; |
| if (s.decided !=raw) |
| { |
| if (({ size_t len = strlen ((current->values[((int) (DAY_1 + cnt) & 0xffff)].string)); int result = __strncasecmp_l (((current->values[((int) (DAY_1 + cnt) & 0xffff)].string)), (trp), len, locale) == 0; if (result) (trp) += len; result; }) |
| && trp > rp_longest) |
| { |
| } |
| if (({ size_t len = strlen ((current->values[((int) (ABDAY_1 + cnt) & 0xffff)].string)); int result = __strncasecmp_l (((current->values[((int) (ABDAY_1 + cnt) & 0xffff)].string)), (trp), len, locale) == 0; if (result) (trp) += len; result; }) |
| && trp > rp_longest) |
| { |
| } |
| } |
| if (s.decided != loc |
| && (((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (DAY_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (DAY_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; })) |
| && trp > rp_longest) |
| || ((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (ABDAY_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (ABDAY_1) & 0xffff)].string)[cnt]), (rp), len, locale) == 0; if (result) (rp) += len; result; })) |
| && trp > rp_longest))) |
| { |
| } |
| } |
| { |
| const char *trp; |
| if (s.decided != loc |
| && (((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (MON_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (MON_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; })) |
| && trp > rp_longest) |
| || ((trp = rp, ({ size_t len = strlen ((&_nl_C_LC_TIME.values[((int) (ABMON_1) & 0xffff)].string)[cnt]); int result = __strncasecmp_l (((&_nl_C_LC_TIME.values[((int) (ABMON_1) & 0xffff)].string)[cnt]), (trp), len, locale) == 0; if (result) (trp) += len; result; })) |
| && trp > rp_longest))) |
| { |
| } |
| } |
| case 'c': |
| { |
| if (!(*((current->values[((int) (D_T_FMT) & 0xffff)].string)) != '\0' && (rp = __strptime_internal (rp, ((current->values[((int) (D_T_FMT) & 0xffff)].string)), tm, &s , locale)) != ((void *)0))) |
| { |
| rp = rp_backup; |
| } |
| } |
| case 'C': |
| do { int __n = 2; val = 0; while (*rp == ' ') ++rp; if (*rp < '0' || *rp > '9') return ((void *)0); do { val *= 10; val += *rp++ - '0'; } while (--__n > 0 && val * 10 <= 99 && *rp >= '0' && *rp <= '9'); if (val < 0 || val > 99) return ((void *)0); } while (0); |
| case 'F': |
| if (!(*("%Y-%m-%d") != '\0' && (rp = __strptime_internal (rp, ("%Y-%m-%d"), tm, &s , locale)) != ((void *)0))) |
| tm->tm_hour = val % 12; |
| } |
| } |
| } |
| char * |
| __strptime_l (buf, format, tm , locale) |
| int buf; |
| int format; |
| int tm; |
| int locale; |
| { |
| } |