parse.c revision 1e3472c5f37ca3686dd69b079d4d02a302f5798d
11e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* 21e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * parse.c --- UUID parsing 31e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */ 41e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 51e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#include <stdio.h> 61e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 71e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#include "uuidP.h" 81e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 91e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'oint uuid_parse(char *in, uuid_t uu) 101e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{ 111e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o struct uuid uuid; 121e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o int i; 131e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o char *cp, buf[3]; 141e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 151e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (strlen(in) != 36) 161e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return -1; 171e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o for (i=0, cp = in; i <= 36; i++,cp++) { 181e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if ((i == 8) || (i == 13) || (i == 18) || 191e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o (i == 23)) 201e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (*cp == '-') 211e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o continue; 221e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (i== 36) 231e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (*cp == 0) 241e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o continue; 251e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (!isxdigit(*cp)) 261e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return -1; 271e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o } 281e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_low = strtoul(in, NULL, 16); 291e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_mid = strtoul(in+9, NULL, 16); 301e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_hi_and_version = strtoul(in+14, NULL, 16); 311e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.clock_seq = strtoul(in+19, NULL, 16); 321e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o cp = in+24; 331e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[2] = 0; 341e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o for (i=0; i < 6; i++) { 351e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[0] = *cp++; 361e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[1] = *cp++; 371e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.node[i] = strtoul(buf, NULL, 16); 381e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o } 391e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 401e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid_pack(&uuid, uu); 411e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return 0; 421e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o} 43