aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Selkirk <paul@psgd.org>2018-11-14 11:23:27 -0500
committerPaul Selkirk <paul@psgd.org>2018-11-14 11:23:27 -0500
commit6de40f118b11fb0229d3899967cc075b5580cf83 (patch)
tree349e0848981054cf5f66f598de00daeb91085706
parente017cb67f92d68200c8a838ee6f9ec0bc68f646e (diff)
Change scanf/printf %hhx format strings to %x, because not every libc supports it.
In particular, the version of newlib distributed by Ubuntu is not configured with --enable-newlib-io-c99-formats, and now includes guard code that treats %hhx as an error, rather than silently interpreting it as %hx. The net effect was to break hal_uuid_parse. (Ironically, vfprintf.c does not (yet) include this guard code, but it's probably only a matter of time, and it seemed expedient to change hal_uuid_format at the same time.)
-rw-r--r--uuid.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/uuid.c b/uuid.c
index 0a4d2d1..dacd031 100644
--- a/uuid.c
+++ b/uuid.c
@@ -71,14 +71,18 @@ hal_error_t hal_uuid_gen(hal_uuid_t *uuid)
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";
+ = "%2x%2x%2x%2x-%2x%2x-%2x%2x-%2x%2x-%2x%2x%2x%2x%2x%2x";
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)
+ (unsigned *)(uuid->uuid + 0), (unsigned *)(uuid->uuid + 1),
+ (unsigned *)(uuid->uuid + 2), (unsigned *)(uuid->uuid + 3),
+ (unsigned *)(uuid->uuid + 4), (unsigned *)(uuid->uuid + 5),
+ (unsigned *)(uuid->uuid + 6), (unsigned *)(uuid->uuid + 7),
+ (unsigned *)(uuid->uuid + 8), (unsigned *)(uuid->uuid + 9),
+ (unsigned *)(uuid->uuid + 10), (unsigned *)(uuid->uuid + 11),
+ (unsigned *)(uuid->uuid + 12), (unsigned *)(uuid->uuid + 13),
+ (unsigned *)(uuid->uuid + 14), (unsigned *)(uuid->uuid + 15)) != 16)
return HAL_ERROR_BAD_ARGUMENTS;
return HAL_OK;
@@ -87,16 +91,20 @@ hal_error_t hal_uuid_parse(hal_uuid_t *uuid, const char * const string)
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";
+ = "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x";
if (uuid == NULL || buffer == NULL || buffer_len < HAL_UUID_TEXT_SIZE)
return HAL_ERROR_BAD_ARGUMENTS;
if (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]) != HAL_UUID_TEXT_SIZE - 1)
+ (unsigned)uuid->uuid[ 0], (unsigned)uuid->uuid[ 1],
+ (unsigned)uuid->uuid[ 2], (unsigned)uuid->uuid[ 3],
+ (unsigned)uuid->uuid[ 4], (unsigned)uuid->uuid[ 5],
+ (unsigned)uuid->uuid[ 6], (unsigned)uuid->uuid[ 7],
+ (unsigned)uuid->uuid[ 8], (unsigned)uuid->uuid[ 9],
+ (unsigned)uuid->uuid[10], (unsigned)uuid->uuid[11],
+ (unsigned)uuid->uuid[12], (unsigned)uuid->uuid[13],
+ (unsigned)uuid->uuid[14], (unsigned)uuid->uuid[15]) != HAL_UUID_TEXT_SIZE - 1)
return HAL_ERROR_RESULT_TOO_LONG;
return HAL_OK;