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