Don't assume that converting a UUID to a string will always succeed.
Instead, opr_uuid_toString should return a status result to indicate
whether the operation was successful or not.
Change-Id: I49e6bf53b2a878342d3137510d2eca522e58604d
Reviewed-on: http://gerrit.openafs.org/9990
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
}
#if !defined(KERNEL)
-void
+int
opr_uuid_toString(const opr_uuid_t *uuid, char **string)
{
unsigned const char *p;
+ int r;
p = uuid->data;
- asprintf(string,
- "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
- "%02x%02x%02x%02x%02x%02x",
- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
- p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
+ r = asprintf(string,
+ "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
+ "%02x%02x%02x%02x%02x%02x",
+ p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
+ p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
+ if (r < 0) {
+ *string = NULL;
+ return ENOMEM;
+ }
+ return 0;
}
void
extern unsigned int opr_uuid_hash(const opr_uuid_t *uuid);
#if !defined(KERNEL)
-extern void opr_uuid_toString(const opr_uuid_t *uuid, char **string);
+extern int opr_uuid_toString(const opr_uuid_t *uuid, char **string);
extern void opr_uuid_freeString(char *string);
extern int opr_uuid_fromString(opr_uuid_t *uuid, const char *string);
#endif
int version;
struct opr_uuid_unpacked raw;
- plan(16);
+ plan(18);
memset(&uuidC, 0, sizeof(opr_uuid_t));
is_int(1187447773, opr_uuid_hash(&uuidA), "opr_uuid_hash(A) works");
is_int(1251907497, opr_uuid_hash(&uuidB), "opr_uuid_hash(B) works");
- opr_uuid_toString(&uuidA, &str);
+ ok(!opr_uuid_toString(&uuidA, &str), "opr_uuid_toString(uuidA) works");
+ ok(str != NULL, "... and result is not NULL");
is_string("4f449447-76ba-472c-971a-866bc0101a4b", str,
- "opr_uuid_toString(uuidA) works");
+ "... and string is correct");
opr_uuid_freeString(str);
is_int(0, opr_uuid_fromString(&uuidC, "4F449447-76BA-472C-971A-866BC0101A4B"),