{PB_BOARD_UNKNOWN, "unknown board", BOARD_INI_UNKNOWN_PATH},
};
-static int peripheral_bus_board_get_device_type(char *string)
+static int peripheral_bus_board_get_device_type(const char *string)
{
if (0 == strncmp(string, "gpio", strlen("gpio")))
return PB_BOARD_DEV_GPIO;
return -1;
}
-static void peripheral_bus_board_ini_parse_key(pb_board_dev_e type, char *string, unsigned int *args)
+static void peripheral_bus_board_ini_parse_key(pb_board_dev_e type, const char *string, unsigned int *args)
{
switch (type) {
case PB_BOARD_DEV_GPIO:
}
}
-static int peripheral_bus_board_ini_parse_pins(char *string, unsigned int *pins)
+static int peripheral_bus_board_ini_parse_pins(const char *string, unsigned int *pins)
{
const char delimiter[] = ", ";
int cnt_pins = 0;
char *token, *ptr = NULL;
- if (string == NULL) return 0;
+ if (string == NULL)
+ return 0;
- token = strtok_r(string, delimiter, &ptr);
+ int len = strlen(string) + 1;
+ char str[len];
+ memcpy(str, string, len);
+
+ token = strtok_r(str, delimiter, &ptr);
while (token) {
if (cnt_pins >= BOARD_PINS_MAX) break;
static int peripheral_bus_board_ini_get_nkeys(dictionary *dict)
{
int i, sec_num, key_num, ret = 0;
- char *section;
+ const char *section;
sec_num = iniparser_getnsec(dict);
for (i = 0; i < sec_num; i++) {
sec_num = iniparser_getnsec(dict);
for (i = 0; i < sec_num; i++) {
- char *section, *key_str;
- char **key_list = NULL;
+ const char *section, *key_str;
section = iniparser_getsecname(dict, i);
ret = peripheral_bus_board_get_device_type(section);
continue;
enum_dev = (pb_board_dev_e)ret;
- key_list = iniparser_getseckeys(dict, section);
key_num = iniparser_getsecnkeys(dict, section);
if (key_num <= 0)
continue;
+ const char **key_list_mem = malloc(key_num * sizeof(char *));
+ if (!key_list_mem)
+ goto err_get_nkeys;
+
+ const char **key_list = iniparser_getseckeys(dict, section, key_list_mem);
+ if (!key_list) {
+ free(key_list_mem);
+ goto err_get_nkeys;
+ }
+
for (j = 0; j < key_num; j++) {
dev = &board->dev[cnt_key];
dev->dev_type = enum_dev;
dev->num_pins = peripheral_bus_board_ini_parse_pins(key_str, dev->pins);
cnt_key++;
}
+
+ free(key_list);
}
iniparser_freedict(dict);