diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-09-04 20:09:28 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-09-20 15:02:35 +0300 |
commit | 7720c4aefa95ee9df6e5d464c187efa7141f1302 (patch) | |
tree | c36def5f7da3a29783f2285e0b12b049355fb848 /src/android/jpeg | |
parent | 7208e70211a6ea35b9d889aedf942e607d20d66a (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>
Diffstat (limited to 'src/android/jpeg')
-rw-r--r-- | src/android/jpeg/exif.cpp | 6 | ||||
-rw-r--r-- | src/android/jpeg/exif.h | 2 |
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(×tamp, &tm); + char str[20]; - std::strftime(str, sizeof(str), "%Y:%m:%d %H:%M:%S", - std::localtime(×tamp)); + 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> |