]> git.wh0rd.org Git - nano.git/commitdiff
Plugging a memory leak.
authorBenno Schulenberg <bensberg@justemail.net>
Mon, 3 Aug 2015 08:32:52 +0000 (08:32 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Mon, 3 Aug 2015 08:32:52 +0000 (08:32 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5340 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/files.c

index 590f3636be60dcc9f4ed918de25fd28533537283..dbebbb738690f656c0b8333bc35bce9cb68d3b22 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2015-08-03  Benno Schulenberg  <bensberg@justemail.net>
-       * src/rcfile.c (parse_binding): Check value of shortcut->toggle
+       * src/rcfile.c (parse_binding): Check the value of shortcut->toggle
        only if it actually is a toggle.  Found with valgrind.
+       * src/files.c (write_lockfile): Plug a leak.  Found with valgrind.
 
 2015-08-02  Benno Schulenberg  <bensberg@justemail.net>
        * src/files.c (initialize_buffer): Initialize also openfile->syntax.
index 04816d742038d145acbeb5334143dc29319a838a..0a1f445d11ecc9874bee3e27355a61bb1322ac5d 100644 (file)
@@ -138,19 +138,19 @@ int write_lockfile(const char *lockfilename, const char *origfilename, bool modi
     myuid = geteuid();
     if ((mypwuid = getpwuid(myuid)) == NULL) {
        statusbar(_("Couldn't determine my identity for lock file (getpwuid() failed)"));
-       return -1;
+       goto free_and_fail;
     }
     mypid = getpid();
 
     if (gethostname(myhostname, 31) < 0) {
        statusbar(_("Couldn't determine hostname for lock file: %s"), strerror(errno));
-       return -1;
+       goto free_and_fail;
     }
 
     /* Check if the lock exists before we try to delete it...*/
     if (stat(lockfilename, &fileinfo) != -1)
        if (delete_lockfile(lockfilename) < 0)
-           return -1;
+           goto free_and_fail;
 
     if (ISSET(INSECURE_BACKUP))
        cflags = O_WRONLY | O_CREAT | O_APPEND;
@@ -165,6 +165,7 @@ int write_lockfile(const char *lockfilename, const char *origfilename, bool modi
     if (fd < 0) {
        statusbar(_("Error writing lock file %s: %s"), lockfilename,
                    strerror(errno));
+       free(lockdata);
        return 0;
     }
 
@@ -175,7 +176,7 @@ int write_lockfile(const char *lockfilename, const char *origfilename, bool modi
     if (fd < 0 || filestream == NULL) {
        statusbar(_("Error writing lock file %s: %s"), lockfilename,
                    strerror(errno));
-       return -1;
+       goto free_and_fail;
     }
 
     /* Okay, so at the moment we're following this state for how to
@@ -212,7 +213,7 @@ int write_lockfile(const char *lockfilename, const char *origfilename, bool modi
     if (wroteamt < lockdatalen) {
        statusbar(_("Error writing lock file %s: %s"),
                lockfilename, ferror(filestream));
-       return -1;
+       goto free_and_fail;
     }
 
 #ifdef DEBUG
@@ -222,12 +223,17 @@ int write_lockfile(const char *lockfilename, const char *origfilename, bool modi
     if (fclose(filestream) == EOF) {
        statusbar(_("Error writing lock file %s: %s"),
                lockfilename, strerror(errno));
-       return -1;
+       goto free_and_fail;
     }
 
     openfile->lock_filename = (char *) lockfilename;
 
+    free(lockdata);
     return 1;
+
+  free_and_fail:
+    free(lockdata);
+    return -1;
 }
 
 /* Less exciting, delete the lockfile.  Return -1 if unsuccessful and