summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2014-10-24 10:46:36 +0300
committerMartin Storsjö <martin@martin.st>2014-10-26 00:14:54 +0300
commit82ee7d0dda0fec8cdb670f4e844bf5c2927ad9de (patch)
tree5176e09d9c0cd74ddb5296be54fdb4fabca77c91 /libavformat
parent3f8f1c6ff24ee858eb5b0bf47ef6d4605299a87e (diff)
Use gmtime_r instead of gmtime and localtime_r instead of localtime
gmtime isn't thread safe in general. In msvcrt (which lacks gmtime_r), the buffer used by gmtime is thread specific though. One call to localtime is left in avconv_opt.c, where thread safety shouldn't matter (instead of making avconv depend on the libavutil internal header). Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c5
-rw-r--r--libavformat/mxfenc.c4
-rw-r--r--libavformat/wtv.c10
3 files changed, 13 insertions, 6 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index a5b39f29dd..c22df1e03a 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -34,6 +34,7 @@
#include "libavutil/intreadwrite.h"
#include "libavutil/intfloat.h"
#include "libavutil/mathematics.h"
+#include "libavutil/time_internal.h"
#include "libavutil/avstring.h"
#include "libavutil/dict.h"
#include "libavcodec/ac3tab.h"
@@ -739,9 +740,9 @@ static void mov_metadata_creation_time(AVDictionary **metadata, time_t time)
{
char buffer[32];
if (time) {
- struct tm *ptm;
+ struct tm *ptm, tmbuf;
time -= 2082844800; /* seconds between 1904-01-01 and Epoch */
- ptm = gmtime(&time);
+ ptm = gmtime_r(&time, &tmbuf);
if (!ptm) return;
if (strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", ptm))
av_dict_set(metadata, "creation_time", buffer, 0);
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index ea7a4bbf93..2cf77df69a 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -35,6 +35,7 @@
#include <time.h>
#include "libavutil/random_seed.h"
+#include "libavutil/time_internal.h"
#include "libavcodec/bytestream.h"
#include "audiointerleave.h"
#include "avformat.h"
@@ -1386,7 +1387,8 @@ static int mxf_parse_mpeg2_frame(AVFormatContext *s, AVStream *st,
static uint64_t mxf_parse_timestamp(time_t timestamp)
{
- struct tm *time = gmtime(&timestamp);
+ struct tm tmbuf;
+ struct tm *time = gmtime_r(&timestamp, &tmbuf);
if (!time)
return 0;
return (uint64_t)(time->tm_year+1900) << 48 |
diff --git a/libavformat/wtv.c b/libavformat/wtv.c
index 90984cfda0..5080d299ed 100644
--- a/libavformat/wtv.c
+++ b/libavformat/wtv.c
@@ -31,6 +31,7 @@
#include "libavutil/intreadwrite.h"
#include "libavutil/intfloat.h"
#include "libavutil/dict.h"
+#include "libavutil/time_internal.h"
#include "avformat.h"
#include "internal.h"
#include "riff.h"
@@ -428,7 +429,8 @@ static int read_probe(AVProbeData *p)
static void filetime_to_iso8601(char *buf, int buf_size, int64_t value)
{
time_t t = (value / 10000000LL) - 11644473600LL;
- struct tm *tm = gmtime(&t);
+ struct tm tmbuf;
+ struct tm *tm = gmtime_r(&t, &tmbuf);
if (tm) {
if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
buf[0] = '\0';
@@ -442,7 +444,8 @@ static void filetime_to_iso8601(char *buf, int buf_size, int64_t value)
static void crazytime_to_iso8601(char *buf, int buf_size, int64_t value)
{
time_t t = (value / 10000000LL) - 719162LL*86400LL;
- struct tm *tm = gmtime(&t);
+ struct tm tmbuf;
+ struct tm *tm = gmtime_r(&t, &tmbuf);
if (tm) {
if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
buf[0] = '\0';
@@ -456,7 +459,8 @@ static void crazytime_to_iso8601(char *buf, int buf_size, int64_t value)
static void oledate_to_iso8601(char *buf, int buf_size, int64_t value)
{
time_t t = 631112400LL + 86400*av_int2double(value);
- struct tm *tm = gmtime(&t);
+ struct tm tmbuf;
+ struct tm *tm = gmtime_r(&t, &tmbuf);
if (tm) {
if (!strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", tm))
buf[0] = '\0';