diff options
Diffstat (limited to 'src/config.c')
-rw-r--r-- | src/config.c | 99 |
1 files changed, 87 insertions, 12 deletions
diff --git a/src/config.c b/src/config.c index df78c10..4ab9f97 100644 --- a/src/config.c +++ b/src/config.c @@ -283,6 +283,42 @@ static int process_option_val(struct lt_config_app *cfg, int idx, cfg->output_tty_file); break; + case LT_OPT_LIBS: + strcpy(lt_sh(cfg, libs_both), sval); + PRINT_VERBOSE(cfg, 1, "LIBS '%s'\n", + lt_sh(cfg, libs_both)); + break; + + case LT_OPT_LIBS_TO: + strcpy(lt_sh(cfg, libs_to), sval); + PRINT_VERBOSE(cfg, 1, "LIBS_TO '%s'\n", + lt_sh(cfg, libs_to)); + break; + + case LT_OPT_LIBS_FROM: + strcpy(lt_sh(cfg, libs_from), sval); + PRINT_VERBOSE(cfg, 1, "LIBS_FROM '%s'\n", + lt_sh(cfg, libs_from)); + break; + + case LT_OPT_SYM: + strcpy(lt_sh(cfg, symbols), sval); + PRINT_VERBOSE(cfg, 1, "SYM '%s'\n", + lt_sh(cfg, symbols)); + break; + + case LT_OPT_SYM_OMIT: + strcpy(lt_sh(cfg, symbols_omit), sval); + PRINT_VERBOSE(cfg, 1, "SYM_OMIT '%s'\n", + lt_sh(cfg, symbols_omit)); + break; + + case LT_OPT_SYM_BELOW: + strcpy(lt_sh(cfg, flow_below), sval); + PRINT_VERBOSE(cfg, 1, "SYM_BELOW '%s'\n", + lt_sh(cfg, flow_below)); + break; + default: return -1; } @@ -325,6 +361,45 @@ struct lt_config_opt *lt_config_opt_new(int idx, char *sval, long nval) return opt; } +int lt_config_ln_add(struct lt_list_head *head, char *name) +{ + struct lt_config_ln *ln = malloc(sizeof(*ln)); + + if (!ln) + return -1; + + ln->name = strdup(name); + lt_init_list_head(&ln->list); + lt_list_add_tail(&ln->list, head); + return 0; +} + +int lt_config_ln_fill(struct lt_list_head *head, char *buf, int size) +{ + struct lt_config_ln *ln, *n; + int first = 1; + char *b = buf; + + buf[0] = 0x00; + + lt_list_for_each_entry_safe(ln, n, head, list) { + int ret; + + ret = snprintf(b, size, "%s%s", + first ? "" : ",", + ln->name); + + if (ret >= size) + return -1; + + size -= ret; + b += ret; + first = 0; + } + + return 0; +} + int lt_config(struct lt_config_app *cfg, int argc, char **argv) { memset(cfg, 0, sizeof(*cfg)); @@ -393,45 +468,45 @@ int lt_config(struct lt_config_app *cfg, int argc, char **argv) switch (c) { case 'l': - if (strlen(optarg) > LT_LIBS_MAXSIZE) + if (strlen(optarg) >= LT_LIBS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, libs_both), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_LIBS, optarg, -1); break; case 't': - if (strlen(optarg) > LT_LIBS_MAXSIZE) + if (strlen(optarg) >= LT_LIBS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, libs_to), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_LIBS_TO, optarg, -1); break; case 'f': - if (strlen(optarg) > LT_LIBS_MAXSIZE) + if (strlen(optarg) >= LT_LIBS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, libs_from), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_LIBS_FROM, optarg, -1); break; case 's': - if (strlen(optarg) > LT_SYMBOLS_MAXSIZE) + if (strlen(optarg) >= LT_SYMBOLS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, symbols), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_SYM, optarg, -1); break; case 'n': - if (strlen(optarg) > LT_SYMBOLS_MAXSIZE) + if (strlen(optarg) >= LT_SYMBOLS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, symbols_omit), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_SYM_OMIT, optarg, -1); break; case 'b': - if (strlen(optarg) > LT_SYMBOLS_MAXSIZE) + if (strlen(optarg) >= LT_SYMBOLS_MAXSIZE) return -1; - strncpy(lt_sh(cfg, flow_below), optarg, strlen(optarg)); + process_option_val(cfg, LT_OPT_SYM_BELOW, optarg, -1); break; case 'v': |