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