From: Christian P. <cp...@us...> - 2004-12-23 05:56:27
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31672/src/System Modified Files: File.posix.cpp Pipe.posix.cpp Log Message: Converted File::_handle, Pipe::_handle to unsigned long type. Added std::string support to File. Index: File.posix.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/File.posix.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- File.posix.cpp 23 Dec 2004 05:24:47 -0000 1.3 +++ File.posix.cpp 23 Dec 2004 05:56:10 -0000 1.4 @@ -30,28 +30,82 @@ namespace System { +int OpenMode2Flags(File::OpenMode omode) +{ + int flags = 0; + switch(omode) + { + case File::OpenCreate: + flags |= O_CREAT; + break; + + case File::CreateFail: + flags |= O_CREAT|O_EXCL; + break; + + case File::OpenFail: + break; + } + + return flags; +} + +int AccessMode2Flags(File::AccessMode amode) +{ + int flags = 0; + + switch(amode) + { + case File::None: + break; + + case File::Read: + flags |= O_RDONLY; + break; + + case File::Write: + flags |= O_WRONLY; + break; + + case File::ReadWrite: + flags |= O_RDWR; + break; + } + + return flags; +} + File::File() throw() -: _handle(0) +: _handle((unsigned long)-1) { } File::File(const File& f) throw(IO::IOError) -: IODevice(f), _handle(0) +: IODevice(f), _handle((unsigned long)-1) { int handle = ::dup((int)f._handle); if(handle == -1) throw IO::IOError(errno, "Could not duplicate file handle", P_SOURCEINFO); - _handle = (Handle*)handle; + _handle = (unsigned long)handle; } -File::File(const char* name, OpenMode omode, AccessMode amode, +File::File(const Unicode::String& name, OpenMode omode, AccessMode amode, ShareMode smode) throw(IO::IOError) -: _handle(0) +: _handle((unsigned long)-1) { open(name,omode,amode,smode); } +#ifdef PCLASSES_WITH_STL +File::File(const std::string& name, OpenMode omode, AccessMode amode, + ShareMode smode) throw(IO::IOError) +: _handle((unsigned long)-1) +{ + open(name,omode,amode,smode); +} +#endif + File::~File() throw() { if(valid()) @@ -60,56 +114,51 @@ } } -void File::open(const char* name, OpenMode omode, AccessMode amode, +void File::open(const Unicode::String& name, OpenMode omode, AccessMode amode, ShareMode smode) throw(LogicError, IO::IOError) { if(!valid()) { - int flags = 0; - switch(omode) - { - case OpenCreate: - flags |= O_CREAT; - break; - - case CreateFail: - flags |= O_CREAT|O_EXCL; - break; + int flags = OpenMode2Flags(omode) | AccessMode2Flags(amode); - case OpenFail: - break; - } + /*@fixme int handle = ::open(name.utf8(), flags); + if(handle == -1) + throw IO::IOError(errno, "Could not open file", P_SOURCEINFO); - switch(amode) - { - case None: - break; + _handle = (unsigned long)handle; + IODevice::setAccess(amode); + IODevice::setValid(true); + IODevice::setEof(false);*/ - case Read: - flags |= O_RDONLY; - break; + return; + } - case Write: - flags |= O_WRONLY; - break; + throw LogicError("File is already open", P_SOURCEINFO); +} - case ReadWrite: - flags |= O_RDWR; - break; - } +#ifdef PCLASSES_WITH_STL +void File::open(const std::string& name, OpenMode omode, AccessMode amode, + ShareMode smode) throw(LogicError, IO::IOError) +{ + if(!valid()) + { + int flags = OpenMode2Flags(omode) | AccessMode2Flags(amode); - int handle = ::open(name, flags); + int handle = ::open(name.c_str(), flags); if(handle == -1) throw IO::IOError(errno, "Could not open file", P_SOURCEINFO); - _handle = (Handle*)handle; + _handle = (unsigned long)handle; IODevice::setAccess(amode); IODevice::setValid(true); IODevice::setEof(false); + + return; } throw LogicError("File is already open", P_SOURCEINFO); } +#endif void File::close() throw(LogicError, IO::IOError) { @@ -118,8 +167,10 @@ if(::close((int)_handle) == -1) throw IO::IOError(errno, "Could not close file", P_SOURCEINFO); + _handle = (unsigned long)-1; IODevice::setAccess(None); IODevice::setValid(false); + return; } throw LogicError("File is not open", P_SOURCEINFO); @@ -257,7 +308,7 @@ } IODevice::operator=(f); - _handle = (Handle*)handle; + _handle = (unsigned long)handle; return *this; } Index: Pipe.posix.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/Pipe.posix.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Pipe.posix.cpp 23 Dec 2004 04:32:18 -0000 1.2 +++ Pipe.posix.cpp 23 Dec 2004 05:56:11 -0000 1.3 @@ -29,7 +29,7 @@ namespace System { -Pipe::Pipe(Handle* h, bool readEnd) throw() +Pipe::Pipe(unsigned long h, bool readEnd) throw() : _handle(h) { IODevice::setAccess(readEnd ? Read : Write); @@ -38,13 +38,13 @@ } Pipe::Pipe(const Pipe& p) throw(IO::IOError) -: IODevice(p), _handle(0) +: IODevice(p), _handle((unsigned long)-1) { int handle = ::dup((int)p._handle); if(handle == -1) throw IO::IOError(errno, "Could not duplicate pipe handle", P_SOURCEINFO); - _handle = (Handle*)handle; + _handle = (unsigned long)handle; } Pipe::~Pipe() throw() @@ -62,8 +62,8 @@ if(pipe(fds) == -1) throw IO::IOError(errno, "Could not create pipe", P_SOURCEINFO); - Pipe readPipe((Handle*)fds[0], true); - Pipe writePipe((Handle*)fds[1], false); + Pipe readPipe((unsigned long)fds[0], true); + Pipe writePipe((unsigned long)fds[1], false); return Pair(readPipe, writePipe); } @@ -75,6 +75,7 @@ if(::close((int)_handle) == -1) throw IO::IOError(errno, "Could not close pipe", P_SOURCEINFO); + _handle = (unsigned long)-1; IODevice::setAccess(None); IODevice::setValid(false); } @@ -149,7 +150,7 @@ } IODevice::operator=(p); - _handle = (Handle*)handle; + _handle = (unsigned long)handle; return *this; } |