]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/pkgcachegen.cc
This is much more than standards version 2.4.1.
[apt.git] / apt-pkg / pkgcachegen.cc
index 5aaba78f3c26a15295a09d7897d0153b44758a72..c3cddd615224ee2d84a045ad612fd9048dafc5fd 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: pkgcachegen.cc,v 1.42 1999/10/29 04:49:37 jgg Exp $
+// $Id: pkgcachegen.cc,v 1.45 2000/01/14 06:26:36 jgg Exp $
 /* ######################################################################
    
    Package Cache Generator - Generator for the cache structure.
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/deblistparser.h>
 #include <apt-pkg/strutl.h>
-#include <system.h>
 
 #include <sys/stat.h>
 #include <unistd.h>
 #include <errno.h>
+#include <stdio.h>
+#include <system.h>
                                                                        /*}}}*/
 
 // CacheGenerator::pkgCacheGenerator - Constructor                     /*{{{*/
@@ -469,6 +470,15 @@ bool pkgSrcCacheCheck(pkgSourceList &List)
       struct stat Buf;
       if (stat(File.c_str(),&Buf) != 0)
       {
+        // Old format file name.. rename it
+        if (File[0] == '_' && stat(File.c_str()+1,&Buf) == 0)
+        {
+           if (rename(File.c_str()+1,File.c_str()) != 0)
+              return _error->Errno("rename","Failed to rename %s to %s",
+                                   File.c_str()+1,File.c_str());
+           continue;
+        }       
+        
         _error->WarningE("stat","Couldn't stat source package list '%s' (%s)",
                          I->PackagesInfo().c_str(),File.c_str());       
         Missing++;
@@ -737,6 +747,10 @@ bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress)
    {      
       string SCacheFile = _config->FindFile("Dir::Cache::srcpkgcache");
       FileFd SCacheF(SCacheFile,FileFd::WriteEmpty);
+      
+      /* Open the pkgcache, we want a new inode here so we do no corrupt
+                existing mmaps */
+      unlink(CacheFile.c_str());             
       FileFd CacheF(CacheFile,FileFd::WriteEmpty);
       DynamicMMap Map(CacheF,MMap::Public,MapSize);
       if (_error->PendingError() == true)
@@ -766,8 +780,11 @@ bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress)
    
    // We use the source cache to generate the package cache
    string SCacheFile = _config->FindFile("Dir::Cache::srcpkgcache");
-
    FileFd SCacheF(SCacheFile,FileFd::ReadOnly);
+   
+   /* Open the pkgcache, we want a new inode here so we do no corrupt
+      existing mmaps */
+   unlink(CacheFile.c_str());             
    FileFd CacheF(CacheFile,FileFd::WriteEmpty);
    DynamicMMap Map(CacheF,MMap::Public,MapSize);
    if (_error->PendingError() == true)