chiark / gitweb /
Quieten over-pick compiler.
[disorder] / lib / dateparse.c
1 /*
2  * This file is part of DisOrder
3  * Copyright (C) 2008 Richard Kettlewell
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18  * USA
19  */
20
21 /** @file lib/dateparse.c
22  * @brief Date parsing
23  */
24
25 #include <config.h>
26 #include "types.h"
27
28 #include <time.h>
29
30 #include "dateparse.h"
31 #include "log.h"
32
33 /** @brief Date parsing patterns
34  *
35  * This set of patterns is designed to parse a specific time of a specific day,
36  * since that's what the scheduler needs.  Other requirements might need other
37  * pattern lists.
38  */
39 static const char *const datemsk[] = {
40   /* ISO format */
41   "%Y-%m-%d %H:%M:%S",
42   /* "%Y-%m-%d %H:%M:%S %Z" - no, not sensibly supported anywhere */
43   /* Locale-specific date + time */
44   "%c",
45   "%Ec",
46   /* Locale-specific time, same day */
47   "%X",
48   "%EX",
49   /* Generic time, same day */
50   "%H:%M",
51   "%H:%M:%S",
52   NULL,
53 };
54
55 /** @brief Convert string to a @c time_t */
56 time_t dateparse(const char *s) {
57   struct tm t;
58   int rc;
59
60   switch(rc = xgetdate_r(s, &t, datemsk)) {
61   case 0:
62     return mktime(&t);
63   case 7:
64     fatal(0, "date string '%s' not in a recognized format", s);
65   case 8:
66     fatal(0, "date string '%s' not representable", s);
67   default:
68     fatal(0, "date string '%s' produced unexpected error %d", s, rc);
69   }
70 }
71
72 /*
73 Local Variables:
74 c-basic-offset:2
75 comment-column:40
76 fill-column:79
77 indent-tabs-mode:nil
78 End:
79 */