src/data_provider.[ch]: Implement "data_provider_get_ident_data".
[collection4.git] / src / common.c
index 0df85eb..2a5bf45 100644 (file)
@@ -1,3 +1,26 @@
+/**
+ * collection4 - common.c
+ * Copyright (C) 2010  Florian octo Forster
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301  USA
+ *
+ * Authors:
+ *   Florian octo Forster <ff at octo.it>
+ **/
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdint.h>
@@ -16,6 +39,7 @@
 
 #include "common.h"
 #include "graph_list.h"
+#include "utils_cgi.h"
 
 #include <fcgiapp.h>
 #include <fcgi_stdio.h>
@@ -159,7 +183,7 @@ static uint32_t rgb_to_uint32 (double *rgb) /* {{{ */
       | ((uint32_t) b));
 } /* }}} uint32_t rgb_to_uint32 */
 
-static int uint32_to_rgb (uint32_t color, double *rgb)
+static int uint32_to_rgb (uint32_t color, double *rgb) /* {{{ */
 {
   uint8_t r;
   uint8_t g;
@@ -233,12 +257,86 @@ char *strtolower (char *str) /* {{{ */
   return (str);
 } /* }}} char *strtolower */
 
-char *strtolower_copy (const char *str)
+char *strtolower_copy (const char *str) /* {{{ */
 {
   if (str == NULL)
     return (NULL);
 
   return (strtolower (strdup (str)));
-}
+} /* }}} char *strtolower_copy */
+
+int get_time_args (long *ret_begin, long *ret_end, /* {{{ */
+    long *ret_now)
+{
+  const char *begin_str;
+  const char *end_str;
+  long now;
+  long begin;
+  long end;
+  char *endptr;
+  long tmp;
+
+  if ((ret_begin == NULL) || (ret_end == NULL))
+    return (EINVAL);
+
+  begin_str = param ("begin");
+  end_str = param ("end");
+
+  now = (long) time (NULL);
+  if (ret_now != NULL)
+    *ret_now = now;
+  *ret_begin = now - 86400;
+  *ret_end = now;
+
+  if (begin_str != NULL)
+  {
+    endptr = NULL;
+    errno = 0;
+    tmp = strtol (begin_str, &endptr, /* base = */ 0);
+    if ((endptr == begin_str) || (errno != 0))
+      return (-1);
+    if (tmp <= 0)
+      begin = now + tmp;
+    else
+      begin = tmp;
+  }
+  else /* if (begin_str == NULL) */
+  {
+    begin = now - 86400;
+  }
+
+  if (end_str != NULL)
+  {
+    endptr = NULL;
+    errno = 0;
+    tmp = strtol (end_str, &endptr, /* base = */ 0);
+    if ((endptr == end_str) || (errno != 0))
+      return (-1);
+    end = tmp;
+    if (tmp <= 0)
+      end = now + tmp;
+    else
+      end = tmp;
+  }
+  else /* if (end_str == NULL) */
+  {
+    end = now;
+  }
+
+  if (begin == end)
+    return (-1);
+
+  if (begin > end)
+  {
+    tmp = begin;
+    begin = end;
+    end = tmp;
+  }
+
+  *ret_begin = begin;
+  *ret_end = end;
+
+  return (0);
+} /* }}} int get_time_args */
 
 /* vim: set sw=2 sts=2 et fdm=marker : */