// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: dirstream.cc,v 1.4 2004/01/07 20:39:37 mdz Exp $
+// $Id: dirstream.cc,v 1.3.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Directory Stream
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/dirstream.h"
-#endif
-
#include <apt-pkg/dirstream.h>
#include <apt-pkg/error.h>
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"),
- Itm.Name);
+ {
+ _error->Errno("fchmod",_("Failed to write file %s"), Itm.Name);
+ close(iFd);
+ return false;
+ }
if (fchown(iFd,Itm.UID,Itm.GID) != 0 && errno != EPERM)
- return _error->Errno("fchown",_("Failed write file %s"),
- Itm.Name);
+ {
+ return _error->Errno("fchown",_("Failed to write file %s"), Itm.Name);
+ close(iFd);
+ return false;
+ }
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;
}