summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/ImageMetaData.cxx29
2 files changed, 18 insertions, 13 deletions
diff --git a/configure.ac b/configure.ac
index e9cf00e..09b9b44 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,7 +34,7 @@ AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([strchr strdup strrchr strstr])
+AC_CHECK_FUNCS([strchr strdup strrchr strstr mkstemp])
# Check for fltk
AC_PATH_PROG(FLTKCONFIG,fltk-config)
diff --git a/src/ImageMetaData.cxx b/src/ImageMetaData.cxx
index 1c6c3c6..cda2de6 100644
--- a/src/ImageMetaData.cxx
+++ b/src/ImageMetaData.cxx
@@ -20,6 +20,7 @@
#include <exiv2/image.hpp>
#include <exiv2/exif.hpp>
+#include "../config.h"
#include "ImageMetaData.H"
ImageMetaData::ImageMetaData() {
@@ -200,27 +201,31 @@ ImageMetaData::load_image_jpgcom(char *name) {
int
ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) {
- char buf[1024], tmpname[MAXPATHLEN];
+ char buf[1024], *tmpname;
int n, in_fd, tmp_fd, err = 0;
char* dirbuf = strdup(out_img);
- snprintf(tmpname, sizeof(tmpname), "%s/.gipfelXXXXXX", dirname(dirbuf));
- free(dirbuf);
+#if ! HAVE_MKSTEMP
+ tmpname = tempnam(dirname(dirbuf), ".gipfel");
+ tmp_fd = open(tmpname, O_WRONLY|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP);
+#else
+ char tmpbuf[MAXPATHLEN];
+ snprintf(tmpbuf, sizeof(tmpbuf), "%s/.gipfelXXXXXX", dirname(dirbuf));
+ tmp_fd = mkstemp(tmpbuf);
+ tmpname = tmpbuf;
+#endif
+ free(dirbuf);
- in_fd = open(in_img, O_RDONLY);
- if (in_fd == -1) {
+ if (tmp_fd == -1) {
perror("open");
return 1;
}
-#ifdef WIN32
- tmp_fd = open(tmpname, O_WRONLY|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP);
-#else
- tmp_fd = mkstemp(tmpname);
-#endif
- if (tmp_fd == -1) {
+ in_fd = open(in_img, O_RDONLY);
+ if (in_fd == -1) {
perror("open");
- close(in_fd);
+ unlink(tmpname);
+ close(tmp_fd);
return 1;
}