From 3004f1ed9a3979176ec3b055c627eba88c2004f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Fri, 20 Mar 2020 22:53:22 +0100 Subject: Implement UUID handling to avoid libuuid dependency --- src/uuid.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3