parse.c revision ce2722f86de298ad1a8965f55a453b5723d2b2b9
11e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o/* 21e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o * parse.c --- UUID parsing 319c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * 419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * Copyright (C) 1996, 1997 Theodore Ts'o. 519c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * 619c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * %Begin-Header% 73030daa8aba89830fb0623be01e507bffd636399Theodore Ts'o * This file may be redistributed under the terms of the GNU 83030daa8aba89830fb0623be01e507bffd636399Theodore Ts'o * Library General Public License. 919c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o * %End-Header% 101e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o */ 111e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 1219c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#include <stdlib.h> 131e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#include <stdio.h> 1419c78dc07fce2d6f39b5e541562afc3ca1ea38ffTheodore Ts'o#include <ctype.h> 15b1416db3227b4b7192ee0d2d3ff6e00e92e9d3e2Theodore Ts'o#include <string.h> 161e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 171e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o#include "uuidP.h" 181e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 19ce2722f86de298ad1a8965f55a453b5723d2b2b9Theodore Ts'oint uuid_parse(const char *in, uuid_t uu) 201e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o{ 21ce2722f86de298ad1a8965f55a453b5723d2b2b9Theodore Ts'o struct uuid uuid; 22ce2722f86de298ad1a8965f55a453b5723d2b2b9Theodore Ts'o int i; 23ce2722f86de298ad1a8965f55a453b5723d2b2b9Theodore Ts'o const char *cp; 24ce2722f86de298ad1a8965f55a453b5723d2b2b9Theodore Ts'o char buf[3]; 251e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 261e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (strlen(in) != 36) 271e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return -1; 281e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o for (i=0, cp = in; i <= 36; i++,cp++) { 291e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if ((i == 8) || (i == 13) || (i == 18) || 301e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o (i == 23)) 311e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (*cp == '-') 321e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o continue; 331e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (i== 36) 341e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (*cp == 0) 351e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o continue; 361e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o if (!isxdigit(*cp)) 371e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return -1; 381e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o } 391e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_low = strtoul(in, NULL, 16); 401e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_mid = strtoul(in+9, NULL, 16); 411e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.time_hi_and_version = strtoul(in+14, NULL, 16); 421e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.clock_seq = strtoul(in+19, NULL, 16); 431e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o cp = in+24; 441e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[2] = 0; 451e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o for (i=0; i < 6; i++) { 461e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[0] = *cp++; 471e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o buf[1] = *cp++; 481e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid.node[i] = strtoul(buf, NULL, 16); 491e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o } 501e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o 511e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o uuid_pack(&uuid, uu); 521e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o return 0; 531e3472c5f37ca3686dd69b079d4d02a302f5798dTheodore Ts'o} 54