/* Convert a string representation of time to a time value.
- Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
#ifdef _LIBC
internal_function
#endif
-strptime_internal (buf, format, tm, decided)
- const char *buf;
- const char *format;
+strptime_internal (rp, fmt, tm, decided)
+ const char *rp;
+ const char *fmt;
struct tm *tm;
enum locale_status *decided;
{
- const char *rp;
- const char *fmt;
+ const char *rp_backup;
int cnt;
size_t val;
int have_I, is_pm;
int have_yday;
int have_mon, have_mday;
- rp = buf;
- fmt = format;
have_I = is_pm = 0;
century = -1;
want_century = 0;
/* We need this for handling the `E' modifier. */
start_over:
#endif
+
+ /* Make back up of current processing pointer. */
+ rp_backup = rp;
+
switch (*fmt++)
{
case '%':
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{
{
if (*decided == loc)
return NULL;
+ else
+ rp = rp_backup;
}
else
{