From 5af178dee33b22cf189c085e41ca96423f809034 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Fri, 2 Sep 2016 01:31:17 -0400 Subject: Code to convert between text and internal forms of UUIDs. Includes a few cosmetic fixes to address gcc format string warnings and git trailing whitespace warnings. --- uuid.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'uuid.c') diff --git a/uuid.c b/uuid.c index 04410c0..be13356 100644 --- a/uuid.c +++ b/uuid.c @@ -32,6 +32,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include "hal.h" @@ -68,6 +69,41 @@ hal_error_t hal_uuid_gen(hal_uuid_t *uuid) return HAL_OK; } +hal_error_t hal_uuid_parse(hal_uuid_t *uuid, const char * const string) +{ + static const char fmt[] + = "%2hhx%2hhx%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx"; + + if (uuid == NULL || string == NULL || + sscanf(string, fmt, + uuid->uuid + 0, uuid->uuid + 1, uuid->uuid + 2, uuid->uuid + 3, + uuid->uuid + 4, uuid->uuid + 5, uuid->uuid + 6, uuid->uuid + 7, + uuid->uuid + 8, uuid->uuid + 9, uuid->uuid + 10, uuid->uuid + 11, + uuid->uuid + 12, uuid->uuid + 13, uuid->uuid + 14, uuid->uuid + 15) != 16) + return HAL_ERROR_BAD_ARGUMENTS; + + return HAL_OK; +} + +hal_error_t hal_uuid_format(const hal_uuid_t * const uuid, char *buffer, const size_t buffer_len) +{ + static const char fmt[] + = "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"; + + if (uuid == NULL || buffer == NULL || buffer_len < HAL_UUID_TEXT_SIZE) + return HAL_ERROR_BAD_ARGUMENTS; + + if (buffer_len != snprintf(buffer, buffer_len, fmt, + uuid->uuid[ 0], uuid->uuid[ 1], uuid->uuid[ 2], uuid->uuid[ 3], + uuid->uuid[ 4], uuid->uuid[ 5], uuid->uuid[ 6], uuid->uuid[ 7], + uuid->uuid[ 8], uuid->uuid[ 9], uuid->uuid[10], uuid->uuid[11], + uuid->uuid[12], uuid->uuid[13], uuid->uuid[14], uuid->uuid[15])) + return HAL_ERROR_RESULT_TOO_LONG; + + return HAL_OK; +} + + /* * Local variables: * indent-tabs-mode: nil -- cgit v1.2.3