diff --git a/src/input/readers/Ascii.cc b/src/input/readers/Ascii.cc index 9bef57c264..a79121e80a 100644 --- a/src/input/readers/Ascii.cc +++ b/src/input/readers/Ascii.cc @@ -51,6 +51,7 @@ Ascii::Ascii(ReaderFrontend *frontend) : ReaderBackend(frontend) { file = 0; mtime = 0; + formatter = 0; } Ascii::~Ascii() diff --git a/src/logging/writers/Ascii.cc b/src/logging/writers/Ascii.cc index 9b95639843..a04b30cbae 100644 --- a/src/logging/writers/Ascii.cc +++ b/src/logging/writers/Ascii.cc @@ -20,6 +20,7 @@ Ascii::Ascii(WriterFrontend* frontend) : WriterBackend(frontend) fd = 0; ascii_done = false; tsv = false; + formatter = 0; } Ascii::~Ascii() diff --git a/src/threading/Formatter.h b/src/threading/Formatter.h index 9f69a3879a..ebdf0c1a87 100644 --- a/src/threading/Formatter.h +++ b/src/threading/Formatter.h @@ -76,7 +76,7 @@ public: * @return The new value, or null on error. Errors must also be * flagged via the thread. */ - virtual threading::Value* ParseValue(string s, string name, TypeTag type, TypeTag subtype = TYPE_ERROR) const = 0; + virtual threading::Value* ParseValue(const string& s, const string& name, TypeTag type, TypeTag subtype = TYPE_ERROR) const = 0; /** * Convert an IP address into a string. diff --git a/src/threading/formatters/Ascii.cc b/src/threading/formatters/Ascii.cc index c400f8a7ad..3120549f13 100644 --- a/src/threading/formatters/Ascii.cc +++ b/src/threading/formatters/Ascii.cc @@ -201,7 +201,7 @@ bool Ascii::Describe(ODesc* desc, threading::Value* val, const string& name) con } -threading::Value* Ascii::ParseValue(string s, string name, TypeTag type, TypeTag subtype) const +threading::Value* Ascii::ParseValue(const string& s, const string& name, TypeTag type, TypeTag subtype) const { if ( s.compare(separators.unset_field) == 0 ) // field is not set... return new threading::Value(type, false); @@ -214,10 +214,12 @@ threading::Value* Ascii::ParseValue(string s, string name, TypeTag type, TypeTag switch ( type ) { case TYPE_ENUM: case TYPE_STRING: - s = get_unescaped_string(s); - val->val.string_val.length = s.size(); - val->val.string_val.data = copy_string(s.c_str()); + { + string unescaped = get_unescaped_string(s); + val->val.string_val.length = unescaped.size(); + val->val.string_val.data = copy_string(unescaped.c_str()); break; + } case TYPE_BOOL: if ( s == "T" ) @@ -263,21 +265,21 @@ threading::Value* Ascii::ParseValue(string s, string name, TypeTag type, TypeTag case TYPE_SUBNET: { - s = get_unescaped_string(s); - size_t pos = s.find("/"); - if ( pos == s.npos ) + string unescaped = get_unescaped_string(s); + size_t pos = unescaped.find("/"); + if ( pos == unescaped.npos ) { GetThread()->Error(GetThread()->Fmt("Invalid value for subnet: %s", start)); goto parse_error; } - string width_str = s.substr(pos + 1); + string width_str = unescaped.substr(pos + 1); uint8_t width = (uint8_t) strtol(width_str.c_str(), &end, 10); if ( CheckNumberError(start, end) ) goto parse_error; - string addr = s.substr(0, pos); + string addr = unescaped.substr(0, pos); val->val.subnet_val.prefix = ParseAddr(addr); val->val.subnet_val.length = width; @@ -285,9 +287,11 @@ threading::Value* Ascii::ParseValue(string s, string name, TypeTag type, TypeTag } case TYPE_ADDR: - s = get_unescaped_string(s); - val->val.addr_val = ParseAddr(s); + { + string unescaped = get_unescaped_string(s); + val->val.addr_val = ParseAddr(unescaped); break; + } case TYPE_TABLE: case TYPE_VECTOR: diff --git a/src/threading/formatters/Ascii.h b/src/threading/formatters/Ascii.h index ab5e29c1f0..d02b6a89c7 100644 --- a/src/threading/formatters/Ascii.h +++ b/src/threading/formatters/Ascii.h @@ -50,7 +50,7 @@ public: virtual bool Describe(ODesc* desc, threading::Value* val, const string& name = "") const; virtual bool Describe(ODesc* desc, int num_fields, const threading::Field* const * fields, threading::Value** vals) const; - virtual threading::Value* ParseValue(string s, string name, TypeTag type, TypeTag subtype = TYPE_ERROR) const; + virtual threading::Value* ParseValue(const string& s, const string& name, TypeTag type, TypeTag subtype = TYPE_ERROR) const; private: bool CheckNumberError(const char* start, const char* end) const; diff --git a/src/threading/formatters/JSON.cc b/src/threading/formatters/JSON.cc index a47de94c0f..17e8808e98 100644 --- a/src/threading/formatters/JSON.cc +++ b/src/threading/formatters/JSON.cc @@ -212,7 +212,7 @@ bool JSON::Describe(ODesc* desc, Value* val, const string& name) const return true; } -threading::Value* JSON::ParseValue(string s, string name, TypeTag type, TypeTag subtype) const +threading::Value* JSON::ParseValue(const string& s, const string& name, TypeTag type, TypeTag subtype) const { GetThread()->Error("JSON formatter does not support parsing yet."); return NULL; diff --git a/src/threading/formatters/JSON.h b/src/threading/formatters/JSON.h index 86f3472125..d7859f83fb 100644 --- a/src/threading/formatters/JSON.h +++ b/src/threading/formatters/JSON.h @@ -25,7 +25,7 @@ public: virtual bool Describe(ODesc* desc, threading::Value* val, const string& name = "") const; virtual bool Describe(ODesc* desc, int num_fields, const threading::Field* const * fields, threading::Value** vals) const; - virtual threading::Value* ParseValue(string s, string name, TypeTag type, TypeTag subtype = TYPE_ERROR) const; + virtual threading::Value* ParseValue(const string& s, const string& name, TypeTag type, TypeTag subtype = TYPE_ERROR) const; private: TimeFormat timestamps;