summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris+github@qwirx.com>2014-04-29 19:22:54 +0000
committerChris Wilson <chris+github@qwirx.com>2014-04-29 19:22:54 +0000
commit1edb424b734ea3e4f2128e1cbc77a22bd001f8d5 (patch)
treeda3e95edf1ab1a1808ac6673811f76610f9dfce2
parent1ce71f487e6cd6514198c3769cd0a337395c1f8e (diff)
Add a ToString method to IOStream and some subclasses.
Useful to help debug problems such as invalid file headers when the source of the stream might not be too obvious.
-rw-r--r--lib/backupstore/BackupStoreDirectory.cpp6
-rw-r--r--lib/common/BufferedStream.h4
-rw-r--r--lib/common/FileStream.h4
-rw-r--r--lib/common/IOStream.cpp23
-rw-r--r--lib/common/IOStream.h1
-rw-r--r--lib/raidfile/RaidFileRead.cpp7
-rw-r--r--lib/raidfile/RaidFileRead.h1
7 files changed, 40 insertions, 6 deletions
diff --git a/lib/backupstore/BackupStoreDirectory.cpp b/lib/backupstore/BackupStoreDirectory.cpp
index 81126ede..0c575c51 100644
--- a/lib/backupstore/BackupStoreDirectory.cpp
+++ b/lib/backupstore/BackupStoreDirectory.cpp
@@ -133,11 +133,11 @@ void BackupStoreDirectory::ReadFromStream(IOStream &rStream, int Timeout)
if(OBJECTMAGIC_DIR_MAGIC_VALUE != ntohl(hdr.mMagicValue))
{
THROW_EXCEPTION_MESSAGE(BackupStoreException, BadDirectoryFormat,
- "Wrong magic number in directory object " <<
- BOX_FORMAT_OBJECTID(mObjectID) << ": expected " <<
+ "Wrong magic number for directory: expected " <<
BOX_FORMAT_HEX32(OBJECTMAGIC_DIR_MAGIC_VALUE) <<
" but found " <<
- BOX_FORMAT_HEX32(ntohl(hdr.mMagicValue)));
+ BOX_FORMAT_HEX32(ntohl(hdr.mMagicValue)) << " in " <<
+ rStream.ToString());
}
// Get data
diff --git a/lib/common/BufferedStream.h b/lib/common/BufferedStream.h
index 079c482a..4987e37b 100644
--- a/lib/common/BufferedStream.h
+++ b/lib/common/BufferedStream.h
@@ -33,6 +33,10 @@ public:
virtual bool StreamDataLeft();
virtual bool StreamClosed();
+ virtual std::string ToString() const
+ {
+ return std::string("Buffered ") + mrSource.ToString();
+ }
private:
BufferedStream(const BufferedStream &rToCopy)
: mrSource(rToCopy.mrSource) { /* do not call */ }
diff --git a/lib/common/FileStream.h b/lib/common/FileStream.h
index 9101a968..8489188c 100644
--- a/lib/common/FileStream.h
+++ b/lib/common/FileStream.h
@@ -49,6 +49,10 @@ public:
virtual bool StreamClosed();
bool CompareWith(IOStream& rOther, int Timeout = IOStream::TimeOutInfinite);
+ std::string ToString() const
+ {
+ return std::string("local file ") + mFileName;
+ }
private:
tOSFileHandle mOSFileHandle;
diff --git a/lib/common/IOStream.cpp b/lib/common/IOStream.cpp
index fc9d0bc3..71e8f8c0 100644
--- a/lib/common/IOStream.cpp
+++ b/lib/common/IOStream.cpp
@@ -245,7 +245,30 @@ void IOStream::Flush(int Timeout)
}
}
+// --------------------------------------------------------------------------
+//
+// Function
+// Name: IOStream::Write
+// Purpose: Convenience method for writing a null-terminated
+// C string to a protocol buffer.
+//
+// --------------------------------------------------------------------------
void IOStream::Write(const char *pBuffer)
{
Write(pBuffer, strlen(pBuffer));
}
+
+// --------------------------------------------------------------------------
+//
+// Function
+// Name: IOStream::ToString()
+// Purpose: Returns a string which describes this stream. Useful
+// when reporting exceptions about a stream of unknown
+// origin, for example in BackupStoreDirectory().
+// Created: 2014/04/28
+//
+// --------------------------------------------------------------------------
+std::string IOStream::ToString() const
+{
+ return "unknown IOStream";
+}
diff --git a/lib/common/IOStream.h b/lib/common/IOStream.h
index 0b1cedd3..51aef19f 100644
--- a/lib/common/IOStream.h
+++ b/lib/common/IOStream.h
@@ -65,6 +65,7 @@ public:
void Flush(int Timeout = IOStream::TimeOutInfinite);
static int ConvertSeekTypeToOSWhence(int SeekType);
+ virtual std::string ToString() const;
};
diff --git a/lib/raidfile/RaidFileRead.cpp b/lib/raidfile/RaidFileRead.cpp
index 9812411b..7591961f 100644
--- a/lib/raidfile/RaidFileRead.cpp
+++ b/lib/raidfile/RaidFileRead.cpp
@@ -1767,6 +1767,7 @@ IOStream::pos_type RaidFileRead::GetDiscUsageInBlocks()
return RaidFileUtil::DiscUsageInBlocks(GetFileSize(), rdiscSet);
}
-
-
-
+std::string RaidFileRead::ToString() const
+{
+ return std::string("RaidFile ") + mFilename;
+}
diff --git a/lib/raidfile/RaidFileRead.h b/lib/raidfile/RaidFileRead.h
index 8a04409d..e746ed46 100644
--- a/lib/raidfile/RaidFileRead.h
+++ b/lib/raidfile/RaidFileRead.h
@@ -61,6 +61,7 @@ public:
virtual pos_type BytesLeftToRead();
pos_type GetDiscUsageInBlocks();
+ std::string ToString() const;
typedef int64_t FileSizeType;