summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2012-09-01 13:32:43 +0200
committerStefano Sabatini <stefasab@gmail.com>2012-09-06 00:40:01 +0200
commit29e972f67c914d35417bc7368493d2617abdd26e (patch)
tree4d138efbd74711b03eaf34d51761604dcecbe2cd
parent79dcd58d839714e8e645fd4414ee4c3645bc419e (diff)
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-xconfigure2
-rw-r--r--doc/APIchanges6
-rw-r--r--libavformat/utils.c10
-rw-r--r--libavformat/version.h2
-rw-r--r--libavutil/parseutils.c18
-rw-r--r--libavutil/parseutils.h25
-rw-r--r--libavutil/version.h4
7 files changed, 40 insertions, 27 deletions
diff --git a/configure b/configure
index b0349eff1b..c74e40fc3b 100755
--- a/configure
+++ b/configure
@@ -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, \