aboutsummaryrefslogtreecommitdiff
path: root/uuid.c
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2016-09-02 01:31:17 -0400
committerRob Austein <sra@hactrn.net>2016-09-02 01:31:17 -0400
commit5af178dee33b22cf189c085e41ca96423f809034 (patch)
tree6748c02763287ad1711f0e369256c063b649549f /uuid.c
parent65e8ef470b34a9c7af92f377da297095a0251890 (diff)
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.
Diffstat (limited to 'uuid.c')
-rw-r--r--uuid.c36
1 files changed, 36 insertions, 0 deletions
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 <stdio.h>
#include <assert.h>
#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