From 7cea75bc99b4bf0156bf26dbaba64b9a023308e7 Mon Sep 17 00:00:00 2001 From: cdfrey Date: Fri, 27 Jul 2007 03:51:33 +0000 Subject: [PATCH] - added raw data version of BuildField() to record-internal.h This is so that btool doesn't add extra null terminators to unknown data, when restoring with option -s --- src/record-internal.h | 1 + src/record.cc | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/record-internal.h b/src/record-internal.h index 2c07d8dd..9d32c600 100644 --- a/src/record-internal.h +++ b/src/record-internal.h @@ -78,6 +78,7 @@ struct FieldLink void BuildField1900(Data &data, size_t &size, uint8_t type, time_t t); void BuildField(Data &data, size_t &size, uint8_t type, char c); void BuildField(Data &data, size_t &size, uint8_t type, const std::string &str); +void BuildField(Data &data, size_t &size, uint8_t type, const void *buf, size_t bufsize); void BuildField(Data &data, size_t &size, uint8_t type, const Barry::Protocol::GroupLink &link); std::string ParseFieldString(const Barry::Protocol::CommonField *field); std::string ParseFieldString(const void *data, uint16_t maxlen); diff --git a/src/record.cc b/src/record.cc index 3a46eb4c..525df8cf 100644 --- a/src/record.cc +++ b/src/record.cc @@ -79,14 +79,20 @@ void BuildField(Data &data, size_t &size, uint8_t type, char c) void BuildField(Data &data, size_t &size, uint8_t type, const std::string &str) { // include null terminator - size_t strsize = str.size() + 1; - size_t fieldsize = COMMON_FIELD_HEADER_SIZE + strsize; + BuildField(data, size, type, str.c_str(), str.size() + 1); +} + +void BuildField(Data &data, size_t &size, uint8_t type, + const void *buf, size_t bufsize) +{ + // include null terminator + size_t fieldsize = COMMON_FIELD_HEADER_SIZE + bufsize; unsigned char *pd = data.GetBuffer(size + fieldsize) + size; CommonField *field = (CommonField *) pd; - field->size = htobs(strsize); + field->size = htobs(bufsize); field->type = type; - memcpy(field->u.raw, str.c_str(), strsize); + memcpy(field->u.raw, buf, bufsize); size += fieldsize; } -- 2.11.4.GIT