X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Ffile.cpp;h=cc3f0a9e4da52d40fc9893efb984801b1a09d672;hp=c9e5d4978c5255e418c12d7794146e2d062f0667;hb=df5ab3d867c51d72344e443e3adb05bfa29a2b53;hpb=c21ab7e49852585df01b4cc19599e25a918b581b diff --git a/source/io/file.cpp b/source/io/file.cpp index c9e5d49..cc3f0a9 100644 --- a/source/io/file.cpp +++ b/source/io/file.cpp @@ -86,30 +86,13 @@ File::File(const string &fn, Mode m, CreateMode cm) File::~File() { - close(); -} - -void File::close() -{ - if(!handle) - return; - signal_flush_required.emit(); - -#ifdef WIN32 - CloseHandle(*handle); -#else - ::close(*handle); -#endif - - handle = Handle(); + sys_close(handle); signal_closed.emit(); } void File::set_block(bool b) { - check_access(M_NONE); - mode = (mode&~M_NONBLOCK); if(b) mode = (mode|M_NONBLOCK); @@ -129,21 +112,9 @@ unsigned File::do_write(const char *buf, unsigned size) #ifdef WIN32 if(mode&M_APPEND) seek(0, S_END); - DWORD ret; - if(WriteFile(*handle, buf, size, &ret, 0)==0) - throw system_error("WriteFile"); -#else - int ret = ::write(*handle, buf, size); - if(ret==-1) - { - if(errno==EAGAIN) - return 0; - else - throw system_error("write"); - } #endif - return ret; + return sys_write(handle, buf, size); } unsigned File::do_read(char *buf, unsigned size) @@ -153,21 +124,7 @@ unsigned File::do_read(char *buf, unsigned size) if(size==0) return 0; -#ifdef WIN32 - DWORD ret; - if(ReadFile(*handle, buf, size, &ret, 0)==0) - throw system_error("ReadFile"); -#else - int ret = ::read(*handle, buf, size); - if(ret==-1) - { - if(errno==EAGAIN) - return 0; - else - throw system_error("read"); - } -#endif - + unsigned ret = sys_read(handle, buf, size); if(ret==0) { eof_flag = true; @@ -186,49 +143,18 @@ void File::sync() #endif } -unsigned File::seek(int off, SeekType st) +SeekOffset File::seek(SeekOffset off, SeekType type) { - check_access(M_NONE); - signal_flush_required.emit(); - - int type = sys_seek_type(st); -#ifdef WIN32 - DWORD ret = SetFilePointer(*handle, off, 0, type); - if(ret==INVALID_SET_FILE_POINTER) - throw system_error("SetFilePointer"); -#else - off_t ret = lseek(*handle, off, type); - if(ret==(off_t)-1) - throw system_error("lseek"); -#endif - + off = sys_seek(handle, off, type); eof_flag = false; - return ret; -} - -unsigned File::tell() const -{ - check_access(M_NONE); - -#ifdef WIN32 - DWORD ret = SetFilePointer(*handle, 0, 0, FILE_CURRENT); - if(ret==INVALID_SET_FILE_POINTER) - throw system_error("SetFilePointer"); -#else - off_t ret = lseek(*handle, 0, SEEK_CUR); - if(ret==(off_t)-1) - throw system_error("lseek"); -#endif - - return ret; + return off; } -void File::check_access(Mode m) const +SeekOffset File::tell() const { - if(!handle || (m && !(mode&m))) - throw invalid_access(m); + return sys_seek(const_cast(handle), 0, S_CUR); } } // namespace IO