1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2008 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.opensource.org/licenses/cpl1.0.txt * 11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 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