From e81e5f4db0d3757ce311d1b81a7b0c6afc9162c9 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Tue, 7 Apr 2009 15:56:53 +0200 Subject: add mkstemp() alternative --- configure.ac | 2 +- src/ImageMetaData.cxx | 29 +++++++++++++++++------------ 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 #include +#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; } -- cgit v1.2.3