summaryrefslogtreecommitdiff
path: root/lib
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 /lib
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.
Diffstat (limited to 'lib')
-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;