]>
Commit | Line | Data |
---|---|---|
1e3472c5 TT |
1 | /* |
2 | * uuid.c -- utility routines for manipulating UUID's. | |
3 | */ | |
4 | ||
5 | #include <stdio.h> | |
21c84b71 | 6 | #include <string.h> |
1e3472c5 TT |
7 | #include <linux/types.h> |
8 | ||
21c84b71 TT |
9 | #include "e2p.h" |
10 | ||
1e3472c5 TT |
11 | struct uuid { |
12 | __u32 time_low; | |
13 | __u16 time_mid; | |
14 | __u16 time_hi_and_version; | |
15 | __u16 clock_seq; | |
16 | __u8 node[6]; | |
17 | }; | |
18 | ||
19 | /* Returns 1 if the uuid is the NULL uuid */ | |
20 | int e2p_is_null_uuid(void *uu) | |
21 | { | |
22 | __u8 *cp; | |
23 | int i; | |
24 | ||
25 | for (i=0, cp = uu; i < 16; i++) | |
26 | if (*cp) | |
27 | return 0; | |
28 | return 1; | |
29 | } | |
30 | ||
31 | static void e2p_unpack_uuid(void *in, struct uuid *uu) | |
32 | { | |
33 | __u8 *ptr = in; | |
34 | __u32 tmp; | |
35 | ||
36 | tmp = *ptr++; | |
37 | tmp = (tmp << 8) | *ptr++; | |
38 | tmp = (tmp << 8) | *ptr++; | |
39 | tmp = (tmp << 8) | *ptr++; | |
40 | uu->time_low = tmp; | |
41 | ||
42 | tmp = *ptr++; | |
43 | tmp = (tmp << 8) | *ptr++; | |
44 | uu->time_mid = tmp; | |
45 | ||
46 | tmp = *ptr++; | |
47 | tmp = (tmp << 8) | *ptr++; | |
48 | uu->time_hi_and_version = tmp; | |
49 | ||
50 | tmp = *ptr++; | |
51 | tmp = (tmp << 8) | *ptr++; | |
52 | uu->clock_seq = tmp; | |
53 | ||
54 | memcpy(uu->node, ptr, 6); | |
55 | } | |
56 | ||
57 | void e2p_uuid_to_str(void *uu, char *out) | |
58 | { | |
59 | struct uuid uuid; | |
60 | ||
61 | e2p_unpack_uuid(uu, &uuid); | |
62 | sprintf(out, | |
63 | "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", | |
64 | uuid.time_low, uuid.time_mid, uuid.time_hi_and_version, | |
65 | uuid.clock_seq >> 8, uuid.clock_seq & 0xFF, | |
66 | uuid.node[0], uuid.node[1], uuid.node[2], | |
67 | uuid.node[3], uuid.node[4], uuid.node[5]); | |
68 | } |