// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: dirstream.cc,v 1.3 2003/02/10 00:36:12 doogie Exp $
+// $Id: dirstream.cc,v 1.3.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Directory Stream
#pragma implementation "apt-pkg/dirstream.h"
#endif
-#include <apti18n.h>
#include <apt-pkg/dirstream.h>
#include <apt-pkg/error.h>
#include <errno.h>
#include <utime.h>
#include <unistd.h>
+#include <apti18n.h>
/*}}}*/
// DirStream::DoItem - Process an item /*{{{*/
int iFd = open(Itm.Name,O_NDELAY|O_WRONLY|O_CREAT|O_TRUNC|O_APPEND,
Itm.Mode);
if (iFd < 0)
- return _error->Errno("open",_("Failed write file %s"),
+ return _error->Errno("open",_("Failed to write file %s"),
Itm.Name);
// fchmod deals with umask and fchown sets the ownership
if (fchmod(iFd,Itm.Mode) != 0)
- return _error->Errno("fchmod",_("Failed write file %s"),
+ return _error->Errno("fchmod",_("Failed to write file %s"),
Itm.Name);
if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM)
- return _error->Errno("fchown",_("Failed write file %s"),
+ return _error->Errno("fchown",_("Failed to write file %s"),
Itm.Name);
Fd = iFd;
return true;
case Item::CharDevice:
case Item::BlockDevice:
case Item::Directory:
+ {
+ struct stat Buf;
+ // check if the dir is already there, if so return true
+ if (stat(Itm.Name,&Buf) == 0)
+ {
+ if(S_ISDIR(Buf.st_mode))
+ return true;
+ // something else is there already, return false
+ return false;
+ }
+ // nothing here, create the dir
+ if(mkdir(Itm.Name,Itm.Mode) < 0)
+ return false;
+ return true;
+ break;
+ }
case Item::FIFO:
break;
}