]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-cdrom.cc
Fixed download only
[apt.git] / cmdline / apt-cdrom.cc
index fc9eb50005ad442ea43d8e5b614a88562c8304eb..1985c22a6b2fd3ecf046327e707f4e148904c406 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: apt-cdrom.cc,v 1.5 1998/11/28 08:39:46 jgg Exp $
+// $Id: apt-cdrom.cc,v 1.7 1998/12/04 23:33:18 jgg Exp $
 /* ######################################################################
    
    APT CDROM - Tool for handling APT's CDROM database.
 #include <apt-pkg/cmndline.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/init.h>
-#include <apt-pkg/md5.h>
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/progress.h>
 #include <apt-pkg/tagfile.h>
+#include <apt-pkg/cdromutl.h>
 #include <strutl.h>
 #include <config.h>
 
@@ -25,9 +25,6 @@
 #include <fstream>
 #include <vector>
 #include <algorithm>
-#include <sys/wait.h>
-#include <sys/errno.h>
-#include <sys/vfs.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <dirent.h>
 #include <stdio.h>
                                                                        /*}}}*/
 
-// UnmountCdrom - Unmount a cdrom                                      /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool UnmountCdrom(string Path)
-{
-   int Child = fork();
-   if (Child < -1)
-      return _error->Errno("fork","Failed to fork");
-
-   // The child
-   if (Child == 0)
-   {
-      // Make all the fds /dev/null
-      for (int I = 0; I != 10; I++)
-        close(I);
-      for (int I = 0; I != 3; I++)
-        dup2(open("/dev/null",O_RDWR),I);
-
-      const char *Args[10];
-      Args[0] = "umount";
-      Args[1] = Path.c_str();
-      Args[2] = 0;
-      execvp(Args[0],(char **)Args);      
-      exit(100);
-   }
-
-   // Wait for mount
-   int Status = 0;
-   while (waitpid(Child,&Status,0) != Child)
-   {
-      if (errno == EINTR)
-        continue;
-      return _error->Errno("waitpid","Couldn't wait for subprocess");
-   }
-   
-   // Check for an error code.
-   if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
-      return false;
-   return true;
-}
-                                                                       /*}}}*/
-// MountCdrom - Mount a cdrom                                          /*{{{*/
-// ---------------------------------------------------------------------
-/* We fork mount.. */
-bool MountCdrom(string Path)
-{
-   int Child = fork();
-   if (Child < -1)
-      return _error->Errno("fork","Failed to fork");
-
-   // The child
-   if (Child == 0)
-   {
-      // Make all the fds /dev/null
-      for (int I = 0; I != 10; I++)
-        close(I);      
-      for (int I = 0; I != 3; I++)
-        dup2(open("/dev/null",O_RDWR),I);
-      
-      const char *Args[10];
-      Args[0] = "mount";
-      Args[1] = Path.c_str();
-      Args[2] = 0;
-      execvp(Args[0],(char **)Args);      
-      exit(100);
-   }
-
-   // Wait for mount
-   int Status = 0;
-   while (waitpid(Child,&Status,0) != Child)
-   {
-      if (errno == EINTR)
-        continue;
-      return _error->Errno("waitpid","Couldn't wait for subprocess");
-   }
-   
-   // Check for an error code.
-   if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
-      return false;
-   return true;
-}
-                                                                       /*}}}*/
-// IdentCdrom - Generate a unique string for this CD                   /*{{{*/
-// ---------------------------------------------------------------------
-/* We convert everything we hash into a string, this prevents byte size/order
-   from effecting the outcome. */
-bool IdentCdrom(string CD,string &Res)
-{
-   MD5Summation Hash;
-
-   string StartDir = SafeGetCWD();
-   if (chdir(CD.c_str()) != 0)
-      return _error->Errno("chdir","Unable to change to %s",CD.c_str());
-   
-   DIR *D = opendir(".");
-   if (D == 0)
-      return _error->Errno("opendir","Unable to read %s",CD.c_str());
-      
-   // Run over the directory
-   char S[300];
-   for (struct dirent *Dir = readdir(D); Dir != 0; Dir = readdir(D))
-   {
-      // Skip some files..
-      if (strcmp(Dir->d_name,".") == 0 ||
-         strcmp(Dir->d_name,"..") == 0)
-        continue;
-   
-      sprintf(S,"%lu",Dir->d_ino);
-      Hash.Add(S);
-      Hash.Add(Dir->d_name);
-   };
-   
-   chdir(StartDir.c_str());
-   closedir(D);
-   
-   // Some stats from the fsys
-   struct statfs Buf;
-   if (statfs(CD.c_str(),&Buf) != 0)
-      return _error->Errno("statfs","Failed to stat the cdrom");
-   
-   sprintf(S,"%u %u",Buf.f_blocks,Buf.f_bfree);
-   Hash.Add(S);
-   
-   Res = Hash.Result().Value();
-   return true;   
-}
-                                                                       /*}}}*/
-
 // FindPackages - Find the package files on the CDROM                  /*{{{*/
 // ---------------------------------------------------------------------
 /* We look over the cdrom for package files. This is a recursive
@@ -689,6 +558,8 @@ bool CopyPackages(string CDROM,string Name,vector<string> &List)
    
    if (NotFound + WrongSize > 10)
       cout << "Alot of package entires were discarded, perhaps this CD is funny?" << endl;
+
+   return true;
 }
                                                                        /*}}}*/
 
@@ -920,8 +791,11 @@ bool DoAdd(CommandLine &)
 {
    // Startup
    string CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
-   cout << "Using CD-ROM mount point " << CDROM << endl;
+   if (CDROM[0] == '.')
+      CDROM= SafeGetCWD() + '/' + CDROM;
    
+   cout << "Using CD-ROM mount point " << CDROM << endl;
+      
    // Read the database
    Configuration Database;
    string DFile = _config->FindFile("Dir::State::cdroms");
@@ -952,7 +826,11 @@ bool DoAdd(CommandLine &)
    cout << "Identifying.. " << flush;
    string ID;
    if (IdentCdrom(CDROM,ID) == false)
+   {
+      cout << endl;
       return false;
+   }
+   
    cout << '[' << ID << ']' << endl;
 
    cout << "Scanning Disc for index files..  " << flush;
@@ -960,7 +838,11 @@ bool DoAdd(CommandLine &)
    vector<string> List;
    string StartDir = SafeGetCWD();
    if (FindPackages(CDROM,List) == false)
+   {
+      cout << endl;
       return false;
+   }
+   
    chdir(StartDir.c_str());
 
    if (_config->FindB("Debug::aptcdrom",false) == true)