misc/libphysfs/lzma/CPP/Common/C_FileIO.cpp
changeset 13904 99b265e0d1d0
parent 13903 5f819b90d479
child 13905 b172a5d40eee
equal deleted inserted replaced
13903:5f819b90d479 13904:99b265e0d1d0
     1 // Common/C_FileIO.h
       
     2 
       
     3 #include "C_FileIO.h"
       
     4 
       
     5 #include <fcntl.h>
       
     6 #include <unistd.h>
       
     7 
       
     8 namespace NC {
       
     9 namespace NFile {
       
    10 namespace NIO {
       
    11 
       
    12 bool CFileBase::OpenBinary(const char *name, int flags)
       
    13 {
       
    14   #ifdef O_BINARY
       
    15   flags |= O_BINARY;
       
    16   #endif
       
    17   Close();
       
    18   _handle = ::open(name, flags, 0666);
       
    19   return _handle != -1;
       
    20 }
       
    21 
       
    22 bool CFileBase::Close()
       
    23 {
       
    24   if(_handle == -1)
       
    25     return true;
       
    26   if (close(_handle) != 0)
       
    27     return false;
       
    28   _handle = -1;
       
    29   return true;
       
    30 }
       
    31 
       
    32 bool CFileBase::GetLength(UInt64 &length) const
       
    33 {
       
    34   off_t curPos = Seek(0, SEEK_CUR);
       
    35   off_t lengthTemp = Seek(0, SEEK_END);
       
    36   Seek(curPos, SEEK_SET);
       
    37   length = (UInt64)lengthTemp;
       
    38   return true;
       
    39 }
       
    40 
       
    41 off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const
       
    42 {
       
    43   return ::lseek(_handle, distanceToMove, moveMethod);
       
    44 }
       
    45 
       
    46 /////////////////////////
       
    47 // CInFile
       
    48 
       
    49 bool CInFile::Open(const char *name)
       
    50 {
       
    51   return CFileBase::OpenBinary(name, O_RDONLY);
       
    52 }
       
    53 
       
    54 bool CInFile::OpenShared(const char *name, bool)
       
    55 {
       
    56   return Open(name);
       
    57 }
       
    58 
       
    59 ssize_t CInFile::Read(void *data, size_t size)
       
    60 {
       
    61   return read(_handle, data, size);
       
    62 }
       
    63 
       
    64 /////////////////////////
       
    65 // COutFile
       
    66 
       
    67 bool COutFile::Create(const char *name, bool createAlways)
       
    68 {
       
    69   if (createAlways)
       
    70   {
       
    71     Close();
       
    72     _handle = ::creat(name, 0666);
       
    73     return _handle != -1;
       
    74   }
       
    75   return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY);
       
    76 }
       
    77 
       
    78 bool COutFile::Open(const char *name, DWORD creationDisposition)
       
    79 {
       
    80   return Create(name, false);
       
    81 }
       
    82 
       
    83 ssize_t COutFile::Write(const void *data, size_t size)
       
    84 {
       
    85   return write(_handle, data, size);
       
    86 }
       
    87 
       
    88 }}}