iso3307.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #include "squid.h"
10 #include "util.h"
11 
12 #if HAVE_STRING_H
13 #include <string.h>
14 #endif
15 #if HAVE_CTYPE_H
16 #include <ctype.h>
17 #endif
18 #if HAVE_TIME_H
19 #include <time.h>
20 #endif
21 
22 #define ASCII_DIGIT(c) ((c)-48)
23 
24 time_t
25 parse_iso3307_time(const char *buf)
26 {
27  /* buf is an ISO 3307 style time: YYYYMMDDHHMMSS or YYYYMMDDHHMMSS.xxx */
28  struct tm tms;
29  time_t t;
30  while (*buf == ' ' || *buf == '\t')
31  buf++;
32  if ((int) strlen(buf) < 14)
33  return 0;
34  memset(&tms, '\0', sizeof(struct tm));
35  tms.tm_year = (ASCII_DIGIT(buf[0]) * 1000) + (ASCII_DIGIT(buf[1]) * 100) +
36  (ASCII_DIGIT(buf[2]) * 10) + ASCII_DIGIT(buf[3]) - 1900;
37  tms.tm_mon = (ASCII_DIGIT(buf[4]) * 10) + ASCII_DIGIT(buf[5]) - 1;
38  tms.tm_mday = (ASCII_DIGIT(buf[6]) * 10) + ASCII_DIGIT(buf[7]);
39  tms.tm_hour = (ASCII_DIGIT(buf[8]) * 10) + ASCII_DIGIT(buf[9]);
40  tms.tm_min = (ASCII_DIGIT(buf[10]) * 10) + ASCII_DIGIT(buf[11]);
41  tms.tm_sec = (ASCII_DIGIT(buf[12]) * 10) + ASCII_DIGIT(buf[13]);
42 #if HAVE_TIMEGM
43  t = timegm(&tms);
44 #elif HAVE_MKTIME
45  t = mktime(&tms);
46 #else
47  t = (time_t) 0;
48 #endif
49  return t;
50 }
51 
#define ASCII_DIGIT(c)
Definition: iso3307.c:22
void const char * buf
Definition: stub_helper.cc:16
time_t parse_iso3307_time(const char *buf)
Definition: iso3307.c:25

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors