]> git.wh0rd.org Git - nano.git/commitdiff
fix breakage
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Mon, 27 Nov 2006 05:19:24 +0000 (05:19 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Mon, 27 Nov 2006 05:19:24 +0000 (05:19 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3977 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

src/files.c

index dd32130b4b97ba3859222c0005c0b123ad1902ed..14da751b1ceb2e2dba1fa7d6ba2d4561fa917689 100644 (file)
@@ -1275,7 +1275,7 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
     int retval = -1;
        /* Instead of returning in this function, you should always
         * merely set retval and then goto cleanup_and_exit. */
-    size_t name_len, lineswritten = 0;
+    size_t lineswritten = 0;
     const filestruct *fileptr = openfile->fileage;
     int fd;
        /* The file descriptor we use. */
@@ -1310,17 +1310,16 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
     if (!tmp)
        titlebar(NULL);
 
-    name_len = strlen(name);
+    realname = mallocstrcpy(NULL, name);
 
-    /* Convert newlines to nulls, just before we get the real
+    /* Convert newlines to nulls, just before we get the tilde-expanded
      * filename. */
-    sunder(name);
+    sunder(realname);
 
-    realname = real_dir_from_tilde(name);
+    if (realname[0] == '\0')
+       goto cleanup_and_exit;
 
-    /* Convert nulls to newlines.  name_len is the string's real
-     * length. */
-    unsunder(name, name_len);
+    realname = mallocstrassn(realname, real_dir_from_tilde(realname));
 
 #ifndef DISABLE_OPERATINGDIR
     /* If we're writing a temporary file, we're probably going outside
@@ -1703,7 +1702,8 @@ int write_file(const char *name, FILE *f_open, bool tmp, append_type
 
   cleanup_and_exit:
     free(realname);
-    free(tempname);
+    if (tempname != NULL)
+       free(tempname);
 
     return retval;
 }