]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/fileutl.cc
* starmeged with matt, added some comments to the unsetting of no_proxy in ftp.cc
[apt.git] / apt-pkg / contrib / fileutl.cc
index 97dcb82b8fb6e114be13a20414509b4af9cdf7b1..92181472cea55b904f0c9dc4dd6da940479e3383 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: fileutl.cc,v 1.38 2001/04/22 05:42:52 jgg Exp $
+// $Id: fileutl.cc,v 1.42 2002/09/14 05:29:22 jgg Exp $
 /* ######################################################################
    
    File Utilities
@@ -9,7 +9,7 @@
    GetLock - dpkg compatible lock file manipulation (fcntl)
    
    This source is placed in the Public Domain, do with it what you will
-   It was originally written by Jason Gunthorpe.
+   It was originally written by Jason Gunthorpe <jgg@debian.org>.
    
    ##################################################################### */
                                                                        /*}}}*/
@@ -23,6 +23,7 @@
 
 #include <apti18n.h>
 
+#include <iostream>
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/stat.h>
@@ -33,6 +34,8 @@
 #include <errno.h>
                                                                        /*}}}*/
 
+using namespace std;
+
 // CopyFile - Buffered copy of a file                                  /*{{{*/
 // ---------------------------------------------------------------------
 /* The caller is expected to set things so that failure causes erasure */
@@ -153,12 +156,12 @@ string flNotDir(string File)
                                                                        /*}}}*/
 // flNotFile - Strip the file from the directory name                  /*{{{*/
 // ---------------------------------------------------------------------
-/* */
+/* Result ends in a / */
 string flNotFile(string File)
 {
    string::size_type Res = File.rfind('/');
    if (Res == string::npos)
-      return File;
+      return "./";
    Res++;
    return string(File,0,Res);
 }
@@ -303,7 +306,7 @@ bool WaitFd(int Fd,bool write,unsigned long timeout)
 /* This is used if you want to cleanse the environment for the forked 
    child, it fixes up the important signals and nukes all of the fds,
    otherwise acts like normal fork. */
-int ExecFork()
+pid_t ExecFork(int dontCloseThisFd)
 {
    // Fork off the process
    pid_t Process = fork();
@@ -326,7 +329,8 @@ int ExecFork()
       
       // Close all of our FDs - just in case
       for (int K = 3; K != 40; K++)
-        fcntl(K,F_SETFD,FD_CLOEXEC);
+        if(K != dontCloseThisFd)
+           fcntl(K,F_SETFD,FD_CLOEXEC);
    }
    
    return Process;
@@ -334,10 +338,10 @@ int ExecFork()
                                                                        /*}}}*/
 // ExecWait - Fancy waitpid                                            /*{{{*/
 // ---------------------------------------------------------------------
-/* Waits for the given sub process. If Reap is set the no errors are 
+/* Waits for the given sub process. If Reap is set then no errors are 
    generated. Otherwise a failed subprocess will generate a proper descriptive
    message */
-bool ExecWait(int Pid,const char *Name,bool Reap)
+bool ExecWait(pid_t Pid,const char *Name,bool Reap)
 {
    if (Pid <= 1)
       return true;