Line data Source code
1 : #include "replace.h"
2 : #include "util_str_hex.h"
3 : #include "lib/util/data_blob.h"
4 : #include "librpc/gen_ndr/misc.h"
5 :
6 286565530 : static bool hex_uint16(const char *in, uint16_t *out)
7 : {
8 286565530 : uint8_t hi=0, lo=0;
9 286565530 : bool ok = hex_byte(in, &hi) && hex_byte(in+2, &lo);
10 286565530 : *out = (((uint16_t)hi)<<8) + lo;
11 286565530 : return ok;
12 : }
13 :
14 71834010 : bool hex_uint32(const char *in, uint32_t *out)
15 : {
16 71834010 : uint16_t hi=0, lo=0;
17 71834010 : bool ok = hex_uint16(in, &hi) && hex_uint16(in+4, &lo);
18 71834010 : *out = (((uint32_t)hi)<<16) + lo;
19 71834010 : return ok;
20 : }
21 :
22 71448755 : bool parse_guid_string(const char *s, struct GUID *guid)
23 : {
24 : bool ok;
25 : int i;
26 : /* "e12b56b6-0a95-11d1-adbb-00c04fd8d5cd"
27 : | | | | |
28 : | | | | \ node[6]
29 : | | | \_____ clock_seq[2]
30 : | | \__________ time_hi_and_version
31 : | \_______________ time_mid
32 : \_____________________ time_low
33 : */
34 :
35 71448755 : ok = hex_uint32(s, &guid->time_low);
36 71448755 : if (!ok || (s[8] != '-')) {
37 0 : return false;
38 : }
39 71448755 : s += 9;
40 :
41 71448755 : ok = hex_uint16(s, &guid->time_mid);
42 71448755 : if (!ok || (s[4] != '-')) {
43 0 : return false;
44 : }
45 71448755 : s += 5;
46 :
47 71448755 : ok = hex_uint16(s, &guid->time_hi_and_version);
48 71448755 : if (!ok || (s[4] != '-')) {
49 0 : return false;
50 : }
51 71448755 : s += 5;
52 :
53 142897510 : ok = hex_byte(s, &guid->clock_seq[0]) &&
54 71448755 : hex_byte(s+2, &guid->clock_seq[1]);
55 71448755 : if (!ok || (s[4] != '-')) {
56 0 : return false;
57 : }
58 71448755 : s += 5;
59 :
60 500141285 : for (i = 0; i < 6; i++) {
61 428692530 : ok = hex_byte(s, &guid->node[i]);
62 428692530 : if (!ok) {
63 0 : return false;
64 : }
65 428692530 : s += 2;
66 : }
67 :
68 71448755 : return true;
69 : }
|