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 | |
| parent | 627d135bf5108f514161e1d37acf6b97c4b3c4a3 (diff) | |
Implement UUID handling to avoid libuuid dependency
Diffstat (limited to 'src')
| -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;  } |