unparse.c.patch   [plain text]


--- unparse.c.orig	2010-06-27 12:49:24.000000000 -0700
+++ unparse.c	2010-06-27 13:06:53.000000000 -0700
@@ -37,10 +37,10 @@
 #include "uuidP.h"
 
 static const char *fmt_lower = 
-	"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x";
+	"0123456789abcdef";
 
 static const char *fmt_upper = 
-	"%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X";
+	"0123456789ABCDEF";
 
 #ifdef UUID_UNPARSE_DEFAULT_UPPER
 #define FMT_DEFAULT fmt_upper
@@ -50,14 +50,24 @@ static const char *fmt_upper = 
 
 static void uuid_unparse_x(const uuid_t uu, char *out, const char *fmt)
 {
-	struct uuid uuid;
-
-	uuid_unpack(uu, &uuid);
-	sprintf(out, fmt,
-		uuid.time_low, uuid.time_mid, uuid.time_hi_and_version,
-		uuid.clock_seq >> 8, uuid.clock_seq & 0xFF,
-		uuid.node[0], uuid.node[1], uuid.node[2],
-		uuid.node[3], uuid.node[4], uuid.node[5]);
+	const uint8_t *uuid_array = (const uint8_t *)uu;
+	int uuid_index;
+	
+	for ( uuid_index = 0; uuid_index < sizeof(uuid_t); ++uuid_index ) {
+		// insert '-' after the 4th, 6th, 8th, and 10th uuid byte
+		switch (uuid_index) {
+		case 4:
+		case 6:
+		case 8:
+		case 10:
+			*out++ = '-';
+			break;
+		}
+		// insert uuid byte as two hex characters
+		*out++ = fmt[*uuid_array >> 4];
+		*out++ = fmt[*uuid_array++ & 0xF];
+	}
+	*out = 0;
 }
 
 void uuid_unparse_lower(const uuid_t uu, char *out)