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 290450998 : static bool hex_uint16(const char *in, uint16_t *out)
7 : {
8 290450998 : uint8_t hi=0, lo=0;
9 290450998 : bool ok = hex_byte(in, &hi) && hex_byte(in+2, &lo);
10 290450998 : *out = (((uint16_t)hi)<<8) + lo;
11 290450998 : return ok;
12 : }
13 :
14 72805375 : bool hex_uint32(const char *in, uint32_t *out)
15 : {
16 72805375 : uint16_t hi=0, lo=0;
17 72805375 : bool ok = hex_uint16(in, &hi) && hex_uint16(in+4, &lo);
18 72805375 : *out = (((uint32_t)hi)<<16) + lo;
19 72805375 : return ok;
20 : }
21 :
22 72420124 : 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 72420124 : ok = hex_uint32(s, &guid->time_low);
36 72420124 : if (!ok || (s[8] != '-')) {
37 0 : return false;
38 : }
39 72420124 : s += 9;
40 :
41 72420124 : ok = hex_uint16(s, &guid->time_mid);
42 72420124 : if (!ok || (s[4] != '-')) {
43 0 : return false;
44 : }
45 72420124 : s += 5;
46 :
47 72420124 : ok = hex_uint16(s, &guid->time_hi_and_version);
48 72420124 : if (!ok || (s[4] != '-')) {
49 0 : return false;
50 : }
51 72420124 : s += 5;
52 :
53 144840248 : ok = hex_byte(s, &guid->clock_seq[0]) &&
54 72420124 : hex_byte(s+2, &guid->clock_seq[1]);
55 72420124 : if (!ok || (s[4] != '-')) {
56 0 : return false;
57 : }
58 72420124 : s += 5;
59 :
60 506940868 : for (i = 0; i < 6; i++) {
61 434520744 : ok = hex_byte(s, &guid->node[i]);
62 434520744 : if (!ok) {
63 0 : return false;
64 : }
65 434520744 : s += 2;
66 : }
67 :
68 72420124 : return true;
69 : }
|