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