diff --git a/src/common/Variant.cpp b/src/common/Variant.cpp index 4cf72be70..3a7ba1a11 100644 --- a/src/common/Variant.cpp +++ b/src/common/Variant.cpp @@ -58,21 +58,26 @@ Variant::Variant(double number) data.number = number; } -Variant::Variant(const char *string, size_t len) +Variant::Variant(const char *str, size_t len) { if (len <= MAX_SMALL_STRING_LENGTH) { type = SMALLSTRING; - memcpy(data.smallstring.str, string, len); + memcpy(data.smallstring.str, str, len); data.smallstring.len = (uint8) len; } else { type = STRING; - data.string = new SharedString(string, len); + data.string = new SharedString(str, len); } } +Variant::Variant(const std::string &str) + : Variant(str.c_str(), str.length()) +{ +} + Variant::Variant(void *lightuserdata) : type(LUSERDATA) { diff --git a/src/common/Variant.h b/src/common/Variant.h index baa0055a2..b2ff447e2 100644 --- a/src/common/Variant.h +++ b/src/common/Variant.h @@ -26,6 +26,7 @@ #include "common/int.h" #include +#include #include #include @@ -59,6 +60,7 @@ public: : len(len) { str = new char[len+1]; + str[len] = '\0'; memcpy(str, string, len); } virtual ~SharedString() { delete[] str; } @@ -99,7 +101,8 @@ public: Variant(); Variant(bool boolean); Variant(double number); - Variant(const char *string, size_t len); + Variant(const char *str, size_t len); + Variant(const std::string &str); Variant(void *lightuserdata); Variant(love::Type *type, love::Object *object); Variant(std::vector> *table);