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