summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-09-04 20:09:28 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-09-20 15:02:35 +0300
commit7720c4aefa95ee9df6e5d464c187efa7141f1302 (patch)
treec36def5f7da3a29783f2285e0b12b049355fb848
parent7208e70211a6ea35b9d889aedf942e607d20d66a (diff)
android: jpeg: exif: Use reentrant localtime_r()
The std::localtime() function isn't thread-safe, and we have no guarantee whether other threads in the camera service may or may not call it. Replace it with localtime_r(). This requires switching from ctime to time.h, as there is no std::localtime_r() function. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <email@uajain.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
-rw-r--r--src/android/jpeg/exif.cpp6
-rw-r--r--src/android/jpeg/exif.h2
2 files changed, 5 insertions, 3 deletions
diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp
index 1ced5534..c0dbfcc2 100644
--- a/src/android/jpeg/exif.cpp
+++ b/src/android/jpeg/exif.cpp
@@ -186,9 +186,11 @@ void Exif::setSize(const Size &size)
void Exif::setTimestamp(time_t timestamp)
{
+ struct tm tm;
+ localtime_r(&timestamp, &tm);
+
char str[20];
- std::strftime(str, sizeof(str), "%Y:%m:%d %H:%M:%S",
- std::localtime(&timestamp));
+ strftime(str, sizeof(str), "%Y:%m:%d %H:%M:%S", &tm);
std::string ts(str);
setString(EXIF_IFD_0, EXIF_TAG_DATE_TIME, EXIF_FORMAT_ASCII, ts);
diff --git a/src/android/jpeg/exif.h b/src/android/jpeg/exif.h
index 622de4cf..f04cefce 100644
--- a/src/android/jpeg/exif.h
+++ b/src/android/jpeg/exif.h
@@ -7,8 +7,8 @@
#ifndef __ANDROID_JPEG_EXIF_H__
#define __ANDROID_JPEG_EXIF_H__
-#include <ctime>
#include <string>
+#include <time.h>
#include <libexif/exif-data.h>