From 2655601a6470b5428f272d29171de855fd8495a1 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Sun, 7 Sep 2008 12:45:17 +0200 Subject: simplify image saving --- src/ImageMetaData.cxx | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) (limited to 'src/ImageMetaData.cxx') diff --git a/src/ImageMetaData.cxx b/src/ImageMetaData.cxx index 09acbf9..e69627e 100644 --- a/src/ImageMetaData.cxx +++ b/src/ImageMetaData.cxx @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -209,12 +211,12 @@ ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) { char * args[32]; FILE *p; pid_t pid; - char buf[1024], tmpname[256]; + char buf[1024], tmpname[MAXPATHLEN]; int status, err = 0; ssize_t n; int tmp_fd; - strncpy(tmpname, "/tmp/gipfelXXXXXX", sizeof(tmpname)); + snprintf(tmpname, sizeof(tmpname), "%s/.gipfelXXXXXX", dirname(out_img)); tmp_fd = mkstemp(tmpname); if (tmp_fd < 0) { perror("mkstemp"); @@ -261,34 +263,16 @@ ImageMetaData::save_image_jpgcom(char *in_img, char *out_img) { err++; } - if (!err) { - int out_fd = open(out_img, O_WRONLY|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR); + close(tmp_fd); - lseek(tmp_fd, 0, SEEK_SET); - - if (out_fd == -1) { - perror("open"); + if (!err) { + if (rename(tmpname, out_img) != 0) { + perror("rename"); err++; - } else { - while ((n = read(tmp_fd, buf, sizeof(buf)))) { - if (write(out_fd, buf, n) != n) { - perror("write"); - fprintf(stderr, "ERROR: Image %s might be corrupted. " - "A copy is still available at %s\n", out_img, tmpname); - err++; - break; - } - } - - close(out_fd); + unlink(tmpname); } } - close(tmp_fd); - - if (!err) - unlink(tmpname); - return err != 0; } -- cgit v1.2.3