Code

rrd restore should not burn down existing files -- Paul Vixie <paul@vix.com>
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 2 Apr 2002 19:37:54 +0000 (19:37 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 2 Apr 2002 19:37:54 +0000 (19:37 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@110 a5681a0c-68f1-0310-ab6d-d61299d08faa

src/rrd_restore.c

index 207986d89d617f5dd4a052665c0920e77789c735..fa5e412f856fb939f5f4a35cfabe36ac8ad96f74 100644 (file)
@@ -406,9 +406,12 @@ rrd_write(char *file_name, rrd_t *rrd)
     if (strcmp("-",file_name)==0){
       *rrd_file= *stdout;
     } else {
-      if ((rrd_file = fopen(file_name,"wb")) == NULL ) {
+      int fd = open(file_name,O_RDWR|O_CREAT|O_EXCL);
+      if (fd == -1 || (rrd_file = fdopen(fd,"wb")) == NULL) {
        rrd_set_error("creating '%s': %s",file_name,strerror(errno));
        rrd_free(rrd);
+        if (fd != -1)
+          close(fd);
        return(-1);
       }
     }