diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2012-09-01 13:32:43 +0200 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2012-09-06 00:40:01 +0200 |
commit | 29e972f67c914d35417bc7368493d2617abdd26e (patch) | |
tree | 4d138efbd74711b03eaf34d51761604dcecbe2cd | |
parent | 79dcd58d839714e8e645fd4414ee4c3645bc419e (diff) | |
download | ffmpeg-29e972f67c914d35417bc7368493d2617abdd26e.tar.gz |
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.
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | doc/APIchanges | 6 | ||||
-rw-r--r-- | libavformat/utils.c | 10 | ||||
-rw-r--r-- | libavformat/version.h | 2 | ||||
-rw-r--r-- | libavutil/parseutils.c | 18 | ||||
-rw-r--r-- | libavutil/parseutils.h | 25 | ||||
-rw-r--r-- | libavutil/version.h | 4 |
7 files changed, 40 insertions, 27 deletions
@@ -1359,7 +1359,6 @@ HAVE_LIST=" socklen_t soundcard_h strerror_r - strptime struct_addrinfo struct_group_source_req struct_ip_mreq_source @@ -3423,7 +3422,6 @@ check_func_headers malloc.h _aligned_malloc && enable aligned_malloc check_func setrlimit check_func snprintf check_func strerror_r -check_func strptime check_func sched_getaffinity check_func sysconf check_func sysctl diff --git a/doc/APIchanges b/doc/APIchanges index 5af9eb2b8c..8173eb878d 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,12 @@ libavutil: 2011-04-18 API changes, most recent first: +2012-09-01 - xxxxxxx - lavu 51.72.100 - parseutils.h + Add av_small_strptime() time parsing function. + + Can be used as a stripped-down replacement for strptime(), on + systems which do not support it. + 2012-08-13 - xxxxxxx - lavfi 3.8.100 - avfilter.h Add avfilter_get_class() function, and priv_class field to AVFilter struct. diff --git a/libavformat/utils.c b/libavformat/utils.c index 9b251c7a46..01b5cc512b 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -4478,20 +4478,14 @@ void ff_make_absolute_url(char *buf, int size, const char *base, int64_t ff_iso8601_to_unix_time(const char *datestr) { -#if HAVE_STRPTIME struct tm time1 = {0}, time2 = {0}; char *ret1, *ret2; - ret1 = strptime(datestr, "%Y - %m - %d %T", &time1); - ret2 = strptime(datestr, "%Y - %m - %dT%T", &time2); + ret1 = av_small_strptime(datestr, "%Y - %m - %d %H:%M:%S", &time1); + ret2 = av_small_strptime(datestr, "%Y - %m - %dT%H:%M:%S", &time2); if (ret2 && !ret1) return av_timegm(&time2); else return av_timegm(&time1); -#else - av_log(NULL, AV_LOG_WARNING, "strptime() unavailable on this system, cannot convert " - "the date string.\n"); - return 0; -#endif } int avformat_query_codec(AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance) diff --git a/libavformat/version.h b/libavformat/version.h index 5a65c9433b..21d44990a8 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,7 +31,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 54 #define LIBAVFORMAT_VERSION_MINOR 25 -#define LIBAVFORMAT_VERSION_MICRO 104 +#define LIBAVFORMAT_VERSION_MICRO 105 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/libavutil/parseutils.c b/libavutil/parseutils.c index 5e2644cb4f..2440d27d64 100644 --- a/libavutil/parseutils.c +++ b/libavutil/parseutils.c @@ -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); diff --git a/libavutil/parseutils.h b/libavutil/parseutils.h index 7c7a91f5dd..da7d345b54 100644 --- a/libavutil/parseutils.h +++ b/libavutil/parseutils.h @@ -133,6 +133,31 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, int av_parse_time(int64_t *timeval, const char *timestr, int duration); /** + * 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(). + * + * In particular it actually supports the parameters: + * - %H: the hour as a decimal number, using a 24-hour clock, in the + * range '00' through '23' + * - %M: the minute as a decimal number, using a 24-hour clock, in the + * range '00' through '59' + * - %S: the second as a decimal number, using a 24-hour clock, in the + * range '00' through '59' + * - %Y: the year as a decimal number, using the Gregorian calendar + * - %m: the month as a decimal number, in the range '1' through '12' + * - %d: the day of the month as a decimal number, in the range '1' + * through '31' + * - %%: a literal '%' + * + * @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 + */ +char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); + +/** * Attempt to find a specific tag in a URL. * * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. diff --git a/libavutil/version.h b/libavutil/version.h index 535c1af7e3..dbfec109aa 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -39,8 +39,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 71 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 72 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ |