diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2020-03-20 22:53:22 +0100 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2020-03-23 21:37:30 +0100 |
commit | 3004f1ed9a3979176ec3b055c627eba88c2004f6 (patch) | |
tree | 9be374d67bb7f9bae0e32f4325c96388d101e31f /src/uuid.cpp | |
parent | 627d135bf5108f514161e1d37acf6b97c4b3c4a3 (diff) |
Implement UUID handling to avoid libuuid dependency
Diffstat (limited to 'src/uuid.cpp')
-rw-r--r-- | src/uuid.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/uuid.cpp b/src/uuid.cpp index e1f044a..9af32b7 100644 --- a/src/uuid.cpp +++ b/src/uuid.cpp @@ -7,16 +7,29 @@ using namespace erebos; using std::runtime_error; using std::string; +static const size_t UUID_STR_LEN = 36; + +static const char * FORMAT_STRING = "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" + "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"; + UUID::UUID(string str) { - if (uuid_parse(str.c_str(), uuid) != 0) + if (str.size() != UUID_STR_LEN) + throw runtime_error("invalid UUID"); + + if (sscanf(str.c_str(), FORMAT_STRING, + &uuid[0], &uuid[1], &uuid[2], &uuid[3], &uuid[4], &uuid[5], &uuid[6], &uuid[7], + &uuid[8], &uuid[9], &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14], &uuid[15]) + != 16) throw runtime_error("invalid UUID"); } UUID::operator string() const { - string str(UUID_STR_LEN - 1, '\0'); - uuid_unparse_lower(uuid, str.data()); + string str(UUID_STR_LEN, '\0'); + snprintf(str.data(), UUID_STR_LEN + 1, FORMAT_STRING, + uuid[0], uuid[1], uuid[2], uuid[3], uuid[4], uuid[5], uuid[6], uuid[7], + uuid[8], uuid[9], uuid[10], uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); return str; } |