From 1d836e3fd9d3c4f9ce08b6a062dd597e5fe4e1dc Mon Sep 17 00:00:00 2001 From: Pixel Date: Tue, 13 Aug 2002 18:20:13 +0000 Subject: Worked a little more --- generic/Handle.cpp | 1 + generic/Input.cpp | 24 ++++++++++++++++++------ generic/Output.cpp | 29 +++++++++++++++++++++++------ 3 files changed, 42 insertions(+), 12 deletions(-) (limited to 'generic') diff --git a/generic/Handle.cpp b/generic/Handle.cpp index d46fc22..6390a6d 100644 --- a/generic/Handle.cpp +++ b/generic/Handle.cpp @@ -247,6 +247,7 @@ ssize_t Handle::uwrite(const void * buf, size_t count) throw (GeneralException) return err; } else { itell += count = ::write(h, buf, count); + return count; } } diff --git a/generic/Input.cpp b/generic/Input.cpp index 7106c8d..ffef9f0 100644 --- a/generic/Input.cpp +++ b/generic/Input.cpp @@ -41,6 +41,14 @@ bool Input::CanRead() { return 1; } +bool Input::CanSeek() { + struct stat s; + + fstat(GetHandle(), &s); + + return S_ISREG(s.st_mode); +} + String Input::GetName() { return n; } @@ -53,14 +61,18 @@ time_t Input::GetModif() { return date_modif; } -Stdin_t::Stdin_t() : Handle(dup(0)) { } - -bool Stdin_t::CanWrite() { - return 0; +off_t Input::seek(off_t offset, int whence) { + itell = lseek(GetHandle(), offset, whence); +#ifdef PARANOID_SEEK + if (itell != lseek(GetHandle(), 0, SEEK_CUR)) { + } +#endif } -bool Stdin_t::CanRead() { - return 1; +Stdin_t::Stdin_t() { } + +bool Stdin_t::CanSeek() { + return 0; } String Stdin_t::GetName() { diff --git a/generic/Output.cpp b/generic/Output.cpp index dbc1892..aace79c 100644 --- a/generic/Output.cpp +++ b/generic/Output.cpp @@ -19,6 +19,15 @@ Output::Output(String no, int trunc) throw (GeneralException) : if (GetHandle() < 0) { throw IOGeneral(String(_("Error opening file ")) + no + _(" for writing: ") + strerror(errno)); } + + size = lseek(GetHandle(), 0, SEEK_END); + lseek(GetHandle(), 0, SEEK_SET); + + struct stat s; + + fstat(GetHandle(), &s); + + date_modif = s.st_mtime; } Output::Output(const Output & o) : Handle(o), n(o.n) { @@ -32,17 +41,21 @@ bool Output::CanRead() { return 0; } +bool Output::CanSeek() { + struct stat s; + + fstat(GetHandle(), &s); + + return S_ISREG(s.st_mode); +} + String Output::GetName() { return n; } -Stdout_t::Stdout_t() : Handle(dup(1)) {} - -bool Stdout_t::CanWrite() { - return 1; -} +Stdout_t::Stdout_t() {} -bool Stdout_t::CanRead() { +bool Stdout_t::CanSeek() { return 0; } @@ -60,6 +73,10 @@ bool Stderr_t::CanRead() { return 0; } +bool Stderr_t::CanSeek() { + return 0; +} + String Stderr_t::GetName() { return "Stderr"; } -- cgit v1.2.3