parse.c revision b1416db3227b4b7192ee0d2d3ff6e00e92e9d3e2
1/* 2 * parse.c --- UUID parsing 3 * 4 * Copyright (C) 1996, 1997 Theodore Ts'o. 5 * 6 * %Begin-Header% 7 * This file may be redistributed under the terms of the GNU 8 * Library General Public License. 9 * %End-Header% 10 */ 11 12#include <stdlib.h> 13#include <stdio.h> 14#include <ctype.h> 15#include <string.h> 16 17#include "uuidP.h" 18 19int uuid_parse(char *in, uuid_t uu) 20{ 21 struct uuid uuid; 22 int i; 23 char *cp, buf[3]; 24 25 if (strlen(in) != 36) 26 return -1; 27 for (i=0, cp = in; i <= 36; i++,cp++) { 28 if ((i == 8) || (i == 13) || (i == 18) || 29 (i == 23)) 30 if (*cp == '-') 31 continue; 32 if (i== 36) 33 if (*cp == 0) 34 continue; 35 if (!isxdigit(*cp)) 36 return -1; 37 } 38 uuid.time_low = strtoul(in, NULL, 16); 39 uuid.time_mid = strtoul(in+9, NULL, 16); 40 uuid.time_hi_and_version = strtoul(in+14, NULL, 16); 41 uuid.clock_seq = strtoul(in+19, NULL, 16); 42 cp = in+24; 43 buf[2] = 0; 44 for (i=0; i < 6; i++) { 45 buf[0] = *cp++; 46 buf[1] = *cp++; 47 uuid.node[i] = strtoul(buf, NULL, 16); 48 } 49 50 uuid_pack(&uuid, uu); 51 return 0; 52} 53