summaryrefslogtreecommitdiff
path: root/lib/common/FileStream.cpp
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2006-10-16 23:24:18 +0000
committerChris Wilson <chris+github@qwirx.com>2006-10-16 23:24:18 +0000
commit20c177ab912261d24d24e8bef3726a13100c956d (patch)
tree2644b434296a491fe8852e820e39dac34754724a /lib/common/FileStream.cpp
parentaa04aefdbd2fcd1fd288b78719f474e6b6fa77fb (diff)
Set the filename to "HANDLE" under Win32 when initialising from an
existing handle. Handle ERROR_BROKEN_PIPE as EOF when using FileStream to read from a pipe in LocalProcessStream. (refs #3)
Diffstat (limited to 'lib/common/FileStream.cpp')
-rw-r--r--lib/common/FileStream.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/common/FileStream.cpp b/lib/common/FileStream.cpp
index 02b558bd..89ae7a1f 100644
--- a/lib/common/FileStream.cpp
+++ b/lib/common/FileStream.cpp
@@ -47,7 +47,7 @@ FileStream::FileStream(const char *Filename, int flags, int mode)
// --------------------------------------------------------------------------
//
// Function
-// Name: FileStream::FileStream(int)
+// Name: FileStream::FileStream(tOSFileHandle)
// Purpose: Constructor, using existing file descriptor
// Created: 2003/08/28
//
@@ -65,6 +65,9 @@ FileStream::FileStream(tOSFileHandle FileDescriptor)
MEMLEAKFINDER_NOT_A_LEAK(this);
THROW_EXCEPTION(CommonException, OSFileOpenError)
}
+#ifdef WIN32
+ this->fileName = "HANDLE";
+#endif
}
#if 0
@@ -138,8 +141,14 @@ int FileStream::Read(void *pBuffer, int NBytes, int Timeout)
{
r = numBytesRead;
}
+ else if (GetLastError() == ERROR_BROKEN_PIPE)
+ {
+ r = 0;
+ }
else
{
+ ::syslog(LOG_ERR, "Failed to read from file: error %d",
+ GetLastError());
r = -1;
}
#else
@@ -307,15 +316,12 @@ void FileStream::Close()
#ifdef WIN32
if(::CloseHandle(mOSFileHandle) == 0)
- {
- THROW_EXCEPTION(CommonException, OSFileCloseError)
- }
#else
if(::close(mOSFileHandle) != 0)
+#endif
{
THROW_EXCEPTION(CommonException, OSFileCloseError)
}
-#endif
mOSFileHandle = INVALID_FILE;
mIsEOF = true;