Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/tm/tmgoff.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* Glenn Fowler
25
* AT&T Bell Laboratories
26
*
27
* time conversion support
28
*/
29
30
#include <ast.h>
31
#include <tm.h>
32
#include <ctype.h>
33
34
/*
35
* return minutes offset from absolute timezone expression
36
*
37
* [[-+]hh[:mm[:ss]]]
38
* [-+]hhmm
39
*
40
* if e is non-null then it points to the first unrecognized char in s
41
* d returned if no offset in s
42
*/
43
44
int
45
tmgoff(register const char* s, char** e, int d)
46
{
47
register int n = d;
48
int east;
49
const char* t = s;
50
51
if ((east = *s == '+') || *s == '-')
52
{
53
s++;
54
if (isdigit(*s) && isdigit(*(s + 1)))
55
{
56
n = ((*s - '0') * 10 + (*(s + 1) - '0')) * 60;
57
s += 2;
58
if (*s == ':')
59
s++;
60
if (isdigit(*s) && isdigit(*(s + 1)))
61
{
62
n += ((*s - '0') * 10 + (*(s + 1) - '0'));
63
s += 2;
64
if (*s == ':')
65
s++;
66
if (isdigit(*s) && isdigit(*(s + 1)))
67
s += 2;
68
}
69
if (east)
70
n = -n;
71
t = s;
72
}
73
}
74
if (e)
75
*e = (char*)t;
76
return n;
77
}
78
79