parse.c revision ce2722f86de298ad1a8965f55a453b5723d2b2b9
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(const char *in, uuid_t uu)
20{
21	struct uuid	uuid;
22	int 		i;
23	const char	*cp;
24	char		buf[3];
25
26	if (strlen(in) != 36)
27		return -1;
28	for (i=0, cp = in; i <= 36; i++,cp++) {
29		if ((i == 8) || (i == 13) || (i == 18) ||
30		    (i == 23))
31			if (*cp == '-')
32				continue;
33		if (i== 36)
34			if (*cp == 0)
35				continue;
36		if (!isxdigit(*cp))
37			return -1;
38	}
39	uuid.time_low = strtoul(in, NULL, 16);
40	uuid.time_mid = strtoul(in+9, NULL, 16);
41	uuid.time_hi_and_version = strtoul(in+14, NULL, 16);
42	uuid.clock_seq = strtoul(in+19, NULL, 16);
43	cp = in+24;
44	buf[2] = 0;
45	for (i=0; i < 6; i++) {
46		buf[0] = *cp++;
47		buf[1] = *cp++;
48		uuid.node[i] = strtoul(buf, NULL, 16);
49	}
50
51	uuid_pack(&uuid, uu);
52	return 0;
53}
54