aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/serialise.cc21
-rw-r--r--src/libutil/serialise.hh2
2 files changed, 20 insertions, 3 deletions
diff --git a/src/libutil/serialise.cc b/src/libutil/serialise.cc
index 640267a13..ba549c214 100644
--- a/src/libutil/serialise.cc
+++ b/src/libutil/serialise.cc
@@ -149,15 +149,20 @@ void writeLongLong(unsigned long long n, Sink & sink)
}
-void writeString(const string & s, Sink & sink)
+void writeString(const unsigned char * buf, size_t len, Sink & sink)
{
- size_t len = s.length();
writeInt(len, sink);
- sink((const unsigned char *) s.c_str(), len);
+ sink(buf, len);
writePadding(len, sink);
}
+void writeString(const string & s, Sink & sink)
+{
+ writeString((const unsigned char *) s.c_str(), s.size(), sink);
+}
+
+
void writeStringSet(const StringSet & ss, Sink & sink)
{
writeInt(ss.size(), sink);
@@ -208,6 +213,16 @@ unsigned long long readLongLong(Source & source)
}
+size_t readString(unsigned char * buf, size_t max, Source & source)
+{
+ size_t len = readInt(source);
+ if (len > max) throw Error("string is too long");
+ source(buf, len);
+ readPadding(len, source);
+ return len;
+}
+
+
string readString(Source & source)
{
size_t len = readInt(source);
diff --git a/src/libutil/serialise.hh b/src/libutil/serialise.hh
index 25398b09d..efd8e2a06 100644
--- a/src/libutil/serialise.hh
+++ b/src/libutil/serialise.hh
@@ -114,12 +114,14 @@ struct StringSource : Source
void writePadding(size_t len, Sink & sink);
void writeInt(unsigned int n, Sink & sink);
void writeLongLong(unsigned long long n, Sink & sink);
+void writeString(const unsigned char * buf, size_t len, Sink & sink);
void writeString(const string & s, Sink & sink);
void writeStringSet(const StringSet & ss, Sink & sink);
void readPadding(size_t len, Source & source);
unsigned int readInt(Source & source);
unsigned long long readLongLong(Source & source);
+size_t readString(unsigned char * buf, size_t max, Source & source);
string readString(Source & source);
StringSet readStringSet(Source & source);