Patch by J Sisson: sprintf -> snprintf
[umurmur.git] / src / conf.c
index 3068cd7f1785e2e46759130fe524a35bcbab8b03..d85ff7c0eb20aef5613d3fc1661e8ed016fd264a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2010, Martin Johansson <martin@fatbob.nu>
+/* Copyright (C) 2009-2010, Martin Johansson <martin@fatbob.nu>
    Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef WRT_TARGET
-#include <libconfig/libconfig.h>
-#else
 #include <libconfig.h>
-#endif
 
 #include "types.h"
 #include "conf.h"
@@ -135,7 +131,7 @@ const char *getStrConf(param_t param)
                        return DEFAULT_WELCOME;
                }
                break;
-       case DEAFULT_CHANNEL:
+       case DEFAULT_CHANNEL:
                setting = config_lookup(&configuration, "default_channel");
                if (!setting)
                        return "";
@@ -190,25 +186,34 @@ int getIntConf(param_t param)
 int Conf_getNextChannel(conf_channel_t *chdesc, int index)
 {
        config_setting_t *setting = NULL;
-       char configstr[64];
+       int maxconfig = 64, ret = 0;
+       char configstr[maxconfig];
        
-       sprintf(configstr, "channels.[%d].name", index);
+       ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
        setting = config_lookup(&configuration, configstr);
-       if (setting == NULL)
-               return -1;
-       strncpy(chdesc->name, config_setting_get_string(setting), MAX_TEXT);
+       if (ret >= maxconfig || ret < 0 || setting == NULL)
+               return -1; /* Required */
+       chdesc->name =  config_setting_get_string(setting);
        
-       sprintf(configstr, "channels.[%d].parent", index);
+       ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
        setting = config_lookup(&configuration, configstr);
-       if (setting == NULL)
-               return -1;
-       strncpy(chdesc->parent, config_setting_get_string(setting), MAX_TEXT);
+       if (ret >= maxconfig || ret < 0 || setting == NULL)
+               return -1; /* Required */
+       chdesc->parent = config_setting_get_string(setting);
        
-       sprintf(configstr, "channels.[%d].description", index);
+       ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
        setting = config_lookup(&configuration, configstr);
-       if (setting == NULL)
-               return -1;
-       strncpy(chdesc->description, config_setting_get_string(setting), MAX_TEXT);
+       if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
+               chdesc->description = NULL;
+       else
+               chdesc->description = config_setting_get_string(setting);
+       
+       ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
+       setting = config_lookup(&configuration, configstr);
+       if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
+               chdesc->noenter = false;
+       else
+               chdesc->noenter = config_setting_get_bool(setting);
 
        return 0;
 }
@@ -216,19 +221,20 @@ int Conf_getNextChannel(conf_channel_t *chdesc, int index)
 int Conf_getNextChannelLink(conf_channel_link_t *chlink, int index)
 {
        config_setting_t *setting = NULL;
-       char configstr[64];
+       int maxconfig = 64, ret = 0;
+       char configstr[maxconfig];
        
-       sprintf(configstr, "channel_links.[%d].source", index);
+       ret = snprintf(configstr, maxconfig, "channel_links.[%d].source", index);
        setting = config_lookup(&configuration, configstr);
-       if (setting == NULL)
+       if (ret >= maxconfig || ret < 0 || setting == NULL)
                return -1;
-       strncpy(chlink->source, config_setting_get_string(setting), MAX_TEXT);
+       chlink->source = config_setting_get_string(setting);
 
-       sprintf(configstr, "channel_links.[%d].destination", index);
+       ret = snprintf(configstr, maxconfig, "channel_links.[%d].destination", index);
        setting = config_lookup(&configuration, configstr);
-       if (setting == NULL)
+       if (ret >= maxconfig || ret < 0 || setting == NULL)
                return -1;
-       strncpy(chlink->destination, config_setting_get_string(setting), MAX_TEXT);
+       chlink->destination = config_setting_get_string(setting);
 
        return 0;
 }