File: parse.c

package info (click to toggle)
libuuid-perl 0.37-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,092 kB
  • sloc: ansic: 2,374; perl: 580; makefile: 5
file content (44 lines) | stat: -rw-r--r-- 945 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifdef __cplusplus
extern "C" {
#endif

#include "ulib/parse.h"

#ifdef __cplusplus
}
#endif

IV uu_parse(const char *in, struct_uu_t *out) {
  int         i;
  const char  *cp;
  char        buf[3];

  if (strlen(in) != 36)
    return -1;
  for (i=0, cp = in; i <= 36; i++,cp++) {
    if ((i == 8) || (i == 13) || (i == 18) || (i == 23)) {
      if (*cp == '-')
        continue;
      return -1;
    }
    if (i == 36 && *cp == 0)
      continue;
    if (!isxdigit(*cp))
      return -1;
  }
  out->v1.time_low              = strtoul(in, NULL, 16);
  out->v1.time_mid              = (U16)strtoul(in+9, NULL, 16);
  out->v1.time_high_and_version = (U16)strtoul(in+14, NULL, 16);
  out->v1.clock_seq_and_variant = (U16)strtoul(in+19, NULL, 16);
  cp = in+24;
  buf[2] = 0;
  for (i=0; i < 6; i++) {
    buf[0] = *cp++;
    buf[1] = *cp++;
    out->v1.node[i] = (U8)strtoul(buf, NULL, 16);
  }

  return 0;
}

/* ex:set ts=2 sw=2 itab=spaces: */