lavu/parseutils: add av_small_strptime()

Make internal small_strptime() function public, and use it in place of
strptime().
This allows to avoid a dependency on strptime() on systems which do not
support it.

In particular, fix trac ticket #992.
This commit is contained in:
Stefano Sabatini 2012-09-01 13:32:43 +02:00
parent 79dcd58d83
commit 29e972f67c
7 changed files with 40 additions and 27 deletions

View file

@ -438,17 +438,7 @@ static int date_get_num(const char **pp,
return val;
}
/**
* Parse the input string p according to the format string fmt and
* store its results in the structure dt.
* This implementation supports only a subset of the formats supported
* by the standard strptime().
*
* @return a pointer to the first character not processed in this
* function call, or NULL in case the function fails to match all of
* the fmt string and therefore an error occurred
*/
static char *small_strptime(const char *p, const char *fmt, struct tm *dt)
char *av_small_strptime(const char *p, const char *fmt, struct tm *dt)
{
int c, val;
@ -558,7 +548,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
/* parse the year-month-day part */
for (i = 0; i < FF_ARRAY_ELEMS(date_fmt); i++) {
q = small_strptime(p, date_fmt[i], &dt);
q = av_small_strptime(p, date_fmt[i], &dt);
if (q)
break;
}
@ -576,7 +566,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
/* parse the hour-minute-second part */
for (i = 0; i < FF_ARRAY_ELEMS(time_fmt); i++) {
q = small_strptime(p, time_fmt[i], &dt);
q = av_small_strptime(p, time_fmt[i], &dt);
if (q)
break;
}
@ -587,7 +577,7 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
++p;
}
/* parse timestr as HH:MM:SS */
q = small_strptime(p, time_fmt[0], &dt);
q = av_small_strptime(p, time_fmt[0], &dt);
if (!q) {
/* parse timestr as S+ */
dt.tm_sec = strtol(p, (void *)&q, 10);