Просмотр исходного кода

use mkdtemp() instead of tempnam, free mkdtemp() data afterwards, return true in DoChangelog handler

Michael Vogt лет назад: 15
Родитель
Сommit
4a6fe09cf2
1 измененных файлов с 12 добавлено и 2 удалено
  1. 12 2
      cmdline/apt-get.cc

+ 12 - 2
cmdline/apt-get.cc

@@ -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					/*{{{*/