]> err.no Git - dpkg/commitdiff
Fix several minor memleaks.
authorAdam Heath <doogie@debian.org>
Thu, 29 Aug 2002 19:58:11 +0000 (19:58 +0000)
committerAdam Heath <doogie@debian.org>
Thu, 29 Aug 2002 19:58:11 +0000 (19:58 +0000)
ChangeLog
debian/changelog
lib/dbmodify.c
lib/dump.c
lib/lock.c
lib/startup.c
lib/tarfn.c
main/configure.c
main/filesdb.c
main/query.c

index 3249eeee7d2313151e9634ba368fe1cffdadc5c9..914d0fad77f08c649cdf109e865f9f4b4b7eb57b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Aug 29 14:51:35 CDT 2002 Adam Heath <doogie@debian.org>
+
+  * lib/dbmodify.c, lib/dump.c, lib/lock.c, lib/startup.c, lib/tarfn.c
+    main/configure.c, main/filesdb.c, main/query.c: Fix several minor
+    memleaks.
+
 Thu Aug 29 14:42:05 CDT 2002 Adam Heath <doogie@debian.org>
 
   * lib/parsehelp.c: Fix corruption of available file, caused by use of
index d7f44cfb0bdd17e9039525a582a2be9741c9ac41..4393c97236a6fb8acf7d1369aed400c1834becaf 100644 (file)
@@ -19,6 +19,7 @@ dpkg (1.10.5) unstable; urgency=low
     stanza, and process them all.  Closes: #147492.
   * Fix corruption of available file, caused by use of memory that was
     previously freed.  Closes: #154257.
+  * Fix several minor memleaks.
 
  -- Adam Heath <doogie@debian.org>  UNRELEASED
 
index 1e73583faf0b42afb30ef1efc322141098c3602f..2b69d3fdeaa77888b6c781cf8eb9419b456e9ec4 100644 (file)
@@ -218,6 +218,9 @@ void modstatdb_shutdown(void) {
     break;
   }
 
+  free(statusfile);
+  free(availablefile);
+  free(importanttmpfile);
   free(updatefnbuf);
 }
 
index 9446ce5bf485990314bc20bd9aedf1c8e9f7b79a..13483c192eb22875fb149152abb278d3949bb058 100644 (file)
@@ -304,6 +304,7 @@ void writedb(const char *filename, int available, int mustsync) {
               which, pigp->name, filename);
     varbufreset(&vb);      
   }
+  iterpkgend(it);
   varbuffree(&vb);
   if (mustsync) {
     if (fflush(file))
index 6294216d8711e05762ba940f6a9addb6ccf35645..1787b1dd026fea5acdfeff0b6fbb8ff8058c5bb5 100644 (file)
 #include <dpkg.h>
 #include <dpkg-db.h>
 
-static char *dblockfile= NULL;
 static int dblockfd= -1;
 
 static void cu_unlockdb(int argc, void **argv) {
   struct flock fl;
-  assert(dblockfile);
   assert(dblockfd >= 0);
   fl.l_type= F_UNLCK;
   fl.l_whence= SEEK_SET;
@@ -54,13 +52,12 @@ void unlockdatabase(const char *admindir) {
 void lockdatabase(const char *admindir) {
   int n;
   struct flock fl;
+  char *dblockfile= NULL;
   
-  if (!dblockfile) {
     n= strlen(admindir);
     dblockfile= m_malloc(n+sizeof(LOCKFILE)+2);
     strcpy(dblockfile,admindir);
     strcpy(dblockfile+n, "/" LOCKFILE);
-  }
   if (dblockfd == -1) {
     dblockfd= open(dblockfile, O_RDWR|O_CREAT|O_TRUNC, 0660);
     if (dblockfd == -1) {
@@ -79,5 +76,6 @@ void lockdatabase(const char *admindir) {
     ohshite(_("unable to lock dpkg status database"));
   }
   setcloexec(dblockfd, dblockfile);
+  free(dblockfile);
   push_cleanup(cu_unlockdb,~0, NULL,0, 0);
 }
index 32c835debd56154cf8344ce0718983476545fc55..a669af545d786da4ff2ed9f5163578e007927ecc 100644 (file)
@@ -60,4 +60,5 @@ void standard_startup(jmp_buf *ejbuf, int argc, const char *const **argv, const
 void standard_shutdown(void) {
   set_error_display(0,0);
   error_unwind(ehflag_normaltidy);
+  nffreeall();
 }
index 6752f2b52b4a968363663527a439ad17b59a5d42..803b1f0f12d0790370ed742f55b2e4e375452a03 100644 (file)
@@ -266,6 +266,7 @@ TarExtractor(
                free(symListPointer);
                symListPointer = symListBottom;
        }
+       free(symListPointer);
        if ( status > 0 ) {     /* Read partial header record */
                errno = 0;      /* Indicates broken tarfile */
                return -1;
index 970a893078ea85d99cf10639d95a2b8ebeec4e8d..b82a69314db9ce90d818f26f79be9498632ddef4 100644 (file)
@@ -81,6 +81,7 @@ void deferred_configure(struct pkginfo *pkg) {
        char *currenthash= 0, *newdisthash= 0;
        struct stat stab;
        enum conffopt what;
+       static const char *EMPTY_HASH = "-";
 
        if (pkg->status == stat_notinstalled)
                ohshit(_("no package named `%s' is installed, cannot configure"),pkg->name);
@@ -157,7 +158,7 @@ void deferred_configure(struct pkginfo *pkg) {
                for (conff= pkg->installed.conffiles; conff; conff= conff->next) {
                        r= conffderef(pkg, &cdr, conff->name);
                        if (r == -1) {
-                               conff->hash= nfstrsave("-");
+                               conff->hash= EMPTY_HASH;
                                continue;
                        }
                        md5hash(pkg,&currenthash,cdr.buf);
index bac9cbc3b73c9058291c78665d0cf88bade6b2c7..e642c01e8e0826adf1946f80f4fda41fbb1d3bb9 100644 (file)
@@ -511,6 +511,7 @@ void ensure_diversions(void) {
     diversions= oicontest;
   }
   if (ferror(file)) ohshite(_("read error in diversions [i]"));
+  fclose(file);
 
   onerr_abort--;
 }
index 9b8c69cb47b3d3f4bd76559ed4f3aef255c8eefc..2ff4a57d395d94d3a4f5807231bafe79f94f8dcf 100644 (file)
@@ -204,6 +204,7 @@ void listpackages(const char *const *argv) {
   }
   if (ferror(stdout)) werr("stdout");
   if (ferror(stderr)) werr("stderr");  
+  modstatdb_shutdown();
 }
 
 static int searchoutput(struct filenamenode *namenode) {
@@ -282,6 +283,7 @@ void searchfiles(const char *const *argv) {
       if (ferror(stdout)) werr("stdout");
     }
   }
+  modstatdb_shutdown();
 }
 
 void enqperpackage(const char *const *argv) {
@@ -372,6 +374,7 @@ void enqperpackage(const char *const *argv) {
          "and dpkg --contents (= dpkg-deb --contents) to list their contents.\n"),stderr);
     if (ferror(stdout)) werr("stdout");
   }
+  modstatdb_shutdown();
 }
 
 void showpackages(const char *const *argv) {
@@ -424,6 +427,7 @@ void showpackages(const char *const *argv) {
   if (ferror(stdout)) werr("stdout");
   if (ferror(stderr)) werr("stderr");  
   freeformat(fmt);
+  modstatdb_shutdown();
 }
 
 static void printversion(void) {