use mkdtemp() instead of tempnam, free mkdtemp() data afterwards, return true in...
authorMichael Vogt <michael.vogt@ubuntu.com>
Mon, 15 Nov 2010 11:26:39 +0000 (12:26 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Mon, 15 Nov 2010 11:26:39 +0000 (12:26 +0100)
cmdline/apt-get.cc

index 72c1ef0..0d67585 100644 (file)
@@ -2773,11 +2773,18 @@ string DownloadChangelog(CacheFile &CacheFile, pkgAcquire &Fetcher, pkgCache::Ve
    Fetcher.Setup(&Stat);
 
    // temp file
-   string targetfile = tmpnam(strdup("apt-changelog-XXXXXX"));
-   new pkgAcqFile(&Fetcher, uri, "", 0, descr, srcpkg, "ignore", targetfile);
+   char *tmpdir = mkdtemp(strdup("apt-changelog-XXXXXX"));
+   if (tmpdir == NULL) {
+      _error->Errno("mkdtemp", "mkdtemp failed");
+      return "";
+   }
+   string targetfile = string(tmpdir) + "changelog";
 
    // get it
+   new pkgAcqFile(&Fetcher, uri, "", 0, descr, srcpkg, tmpdir);
    int res = Fetcher.Run();
+   free(tmpdir);
+
    if (FileExists(targetfile))
       return targetfile;
 
@@ -2826,9 +2833,12 @@ bool DoChangelog(CommandLine &CmdL)
       if (changelogfile.size() > 0)
       {
          DisplayFileInPager(changelogfile);
+         // cleanup
          unlink(changelogfile.c_str());
+         rmdir(flNotFile(changelogfile).c_str());
       }
    }
+   return true;
 }
                                                                        /*}}}*/
 // DoMoo - Never Ask, Never Tell                                       /*{{{*/