/* * This file is part of DisOrder * Copyright (C) 2008 Richard Kettlewell * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** @file lib/dateparse.c * @brief Date parsing */ #include "common.h" #include #include "dateparse.h" #include "log.h" /** @brief Date parsing patterns * * This set of patterns is designed to parse a specific time of a specific day, * since that's what the scheduler needs. Other requirements might need other * pattern lists. * * NB DisOrder now uses my_strptime() instead of the system strptime(). This * has some bits missing. Therefore check carefuly before adding to this * table. */ static const char *const datemsk[] = { /* ISO format */ "%Y-%m-%d %H:%M:%S", /* Generic time, same day */ "%H:%M:%S", "%H:%M", /* "%Y-%m-%d %H:%M:%S %Z" - no, not sensibly supported anywhere */ /* Locale-specific date + time */ "%c", "%Ec", /* Locale-specific time, same day */ "%X", "%EX", NULL, }; /** @brief Convert string to a @c time_t */ time_t dateparse(const char *s) { struct tm t; int rc; switch(rc = xgetdate_r(s, &t, datemsk)) { case 0: return mktime(&t); case 7: disorder_fatal(0, "date string '%s' not in a recognized format", s); case 8: disorder_fatal(0, "date string '%s' not representable", s); default: disorder_fatal(0, "date string '%s' produced unexpected error %d", s, rc); } } /* Local Variables: c-basic-offset:2 comment-column:40 fill-column:79 indent-tabs-mode:nil End: */