keep database config in a separate file
[pulsecounter.git] / linux / dbstore.c
index 395654da09f681d35921206e0103d2decbf91093..b39235b1b2eb66c241840e2e9b4d223862555447 100644 (file)
@@ -1,11 +1,62 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <time.h>
+#include <ctype.h>
+#include <string.h>
 
 #include <mysql/mysql.h>
 
 #include "dbstore.h"
 
+static char *host = NULL;
+static char *user = NULL;
+static char *pass = NULL;
+static char *dbnm = "watermeter";
+
+int dbconfig(char *conffile)
+{
+       FILE *fp = fopen(conffile, "r");
+       int rc = 0;
+       char buf[128];
+
+       if (!fp)
+               return 1;
+       while (fgets(buf, sizeof(buf), fp)) {
+               char *k, *v, *e;
+
+               e = buf + strlen(buf) - 1;
+               if (*e == '\n')
+                       *e = '\0';
+               else {
+                       /* line too long */
+                       rc = 1;
+                       break;
+               }
+               for (k = buf; k < e && isspace(k); k++) /*nothing*/ ;
+               if (*k == '#') break;
+               for (v = k; v < e && !isspace(v)
+                           && *v != ':' && *v != '='; v++) /*nothing*/ ;
+               if (v < e && (*v == ':' || *v == '=')) v++;
+               for (; v < e && (isspace(v) || *v == ':' || *v == '=')
+                                                       ; v++) /*nothing*/ ;
+               if (v >= e) {
+                       /* no value */
+                       rc = 1;
+                       break;
+               }
+               if      (!strcmp(k, "host"))     host = strdup(v);
+               else if (!strcmp(k, "user"))     user = strdup(v);
+               else if (!strcmp(k, "password")) pass = strdup(v);
+               else if (!strcmp(k, "database")) dbnm = strdup(v);
+               else {
+                       /* unknown key */
+                       rc = 1;
+                       break;
+               }
+       }
+       return rc;
+}
+
 int dbstore(uint8_t which, uint32_t val)
 {
        time_t t;
@@ -22,8 +73,7 @@ int dbstore(uint8_t which, uint32_t val)
        (void)gmtime_r(&t, &tm);
        (void)strftime(tstr, sizeof(tstr), "%Y-%m-%d %H:%M:%S", &tm);
        mysql_init(&mysql);
-       if(!mysql_real_connect(&mysql, NULL, "pulsecounter",
-                               "xxxxxxxxxxxxx", "watermeter", 0, NULL, 0)) {
+       if(!mysql_real_connect(&mysql, host, user, pass, dbnm, 0, NULL, 0)) {
                fprintf(stderr, "mysql connect error: %s\n",
                        mysql_error(&mysql));
                return 1;