mirror of
https://github.com/NixOS/nix
synced 2025-06-27 08:31:16 +02:00
* Avoid expensive conversions from char arrays to STL strings.
This commit is contained in:
parent
e0bd307802
commit
8d3dfa2c17
3 changed files with 26 additions and 14 deletions
|
@ -149,12 +149,17 @@ void writeLongLong(unsigned long long n, Sink & sink)
|
|||
}
|
||||
|
||||
|
||||
void writeString(const unsigned char * buf, size_t len, Sink & sink)
|
||||
{
|
||||
writeInt(len, sink);
|
||||
sink(buf, len);
|
||||
writePadding(len, sink);
|
||||
}
|
||||
|
||||
|
||||
void writeString(const string & s, Sink & sink)
|
||||
{
|
||||
size_t len = s.length();
|
||||
writeInt(len, sink);
|
||||
sink((const unsigned char *) s.c_str(), len);
|
||||
writePadding(len, sink);
|
||||
writeString((const unsigned char *) s.c_str(), s.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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue