diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/actionhelper.c | 21 | ||||
-rw-r--r-- | src/actionparser.c | 8 | ||||
-rw-r--r-- | src/actions.c | 37 | ||||
-rw-r--r-- | src/actions.h | 5 | ||||
-rw-r--r-- | src/dblayer.c | 36 | ||||
-rw-r--r-- | src/dblayer.h | 2 |
6 files changed, 80 insertions, 29 deletions
diff --git a/src/actionhelper.c b/src/actionhelper.c index 3e898af..582333e 100644 --- a/src/actionhelper.c +++ b/src/actionhelper.c @@ -149,15 +149,12 @@ void add_make_link(const AddOpt *opt, const Conf *conf) { } } -int edit_make_options(cklist *args) { - UNUSED(args); -} - ListOpt list_make_options(cklist *args) { list_rewind(args); ListOpt listOpt = { ._lt = LT_NONE, ._lst = LST_PLAIN, + .pName = NULL, .attr = 0, .err = 0 }; @@ -195,8 +192,21 @@ ListOpt list_make_options(cklist *args) { else if (strcmp(list_get(args), "tree") == 0) { listOpt._lt = LT_TREE; } + else if (strcmp(list_get(args), "ckconf") == 0) { + listOpt._lt = LT_CKCONF; + } + else if (strcmp(list_get(args), "-p") == 0) { + if (list_next(args)) { + listOpt._lt = LT_PROG_CONFS; + listOpt.pName = list_get(args); + } + else { + listOpt.err = 1; + break; + } + } else { - listOpt.err = 1; + listOpt.err = 1; } } while(list_next(args)); } @@ -240,7 +250,6 @@ void print_LIST_result(int err) { if (!err) { return; } - ERR("Wrong list arguments"); } void print_SEARCH_result(int err) { diff --git a/src/actionparser.c b/src/actionparser.c index 7c1186a..1da1d2f 100644 --- a/src/actionparser.c +++ b/src/actionparser.c @@ -130,7 +130,7 @@ int parse_EDIT(UserOpt *opt) { int parse_LIST(UserOpt *opt) { /* List expects a maximum of than 3 arguments */ - if (optNum <= pos || optNum > pos + 4) { + if (optNum <= pos || optNum > pos + 5) { opt->err = PERR_LIST_WRONG; return -1; } @@ -329,13 +329,13 @@ void print_parser_error(UserOpt *opt) { sprintf(errStr, "Add config \nUsage: %s ProgramName ConfigPath [-s](secret) [-p](primary)", names); break; case PERR_DEL_WRONG: - sprintf(errStr, "Delete config or program\nUsage: %s ....", names); + sprintf(errStr, "Delete config or program\nUsage: %s {ProgramName} | {-c ConfigPath (as shown by ck list)}", names); break; case PERR_EDIT_WRONG: sprintf(errStr, "Edit config with $EDITOR (%s)\nUsage: %s ProgramName [configBasename]", getenv("EDITOR"), names); break; case PERR_LIST_WRONG: - sprintf(errStr, "List programs, configs and more\nUsage: %s value-to-list (or tree) [-t list-type] [-a]", names); + sprintf(errStr, "List programs, configs and more\nUsage: %s {programs|paths|-p ProgramName} [-t list-type] | {tree | ckconf} [-a]", names); break; case PERR_SEARCH_WRONG: sprintf(errStr, "Search through the configs with grep\nUsage: %s search-term", names); @@ -344,7 +344,7 @@ void print_parser_error(UserOpt *opt) { sprintf(errStr, "Usage: ........"); break; } - ERR("%s", errStr); + HELP("%s", errStr); } void print_parser_help() { diff --git a/src/actions.c b/src/actions.c index 4ff6816..1b4c9b5 100644 --- a/src/actions.c +++ b/src/actions.c @@ -134,8 +134,11 @@ int run_EDIT(UserOpt *opt, Conf *conf) { /* If the program has many configs */ else { HELP("Ambiguous config. Please type the config name after the program."); - cklist *paths = list_make_new(); - edit_get_avaliable_paths(&db, paths, pName); + char name[STR_M] = ""; + strcat(name, pName); + strcat(name, ":"); + cklist *paths = list_make_and_add(name); + get_program_paths(&db, paths, pName, 1, 0); list_print(paths); list_free(paths); goto error; @@ -147,8 +150,11 @@ int run_EDIT(UserOpt *opt, Conf *conf) { char *cName = list_get(opt->args); if (edit_get_config(&db, pName, confName, cName, &secret)) { ERR("Program %s doesn't have a config named %s", pName, cName); - cklist *paths = list_make_new(); - edit_get_avaliable_paths(&db, paths, pName); + char name[STR_M] = ""; + strcat(name, pName); + strcat(name, ":"); + cklist *paths = list_make_and_add(name); + get_program_paths(&db, paths, pName, 1, 0); list_print(paths); list_free(paths); goto error; @@ -171,7 +177,6 @@ int run_EDIT(UserOpt *opt, Conf *conf) { } int run_LIST(UserOpt *opt, Conf *conf) { - UNUSED(conf); DB db = open_DB(opt); if (db.ptr == NULL) { if (db.error == SQL_ERR_NO_TABLES) { @@ -186,6 +191,7 @@ int run_LIST(UserOpt *opt, Conf *conf) { if (listOpt.err) { goto error; } + char tmp[STR_L] = ""; switch(listOpt._lt) { case LT_PATH: list_get_paths(&db, the_list, listOpt.attr); @@ -197,6 +203,27 @@ int run_LIST(UserOpt *opt, Conf *conf) { list_get_path_program_tree(&db, the_list, listOpt.attr); list_print(the_list); goto close; + case LT_CKCONF: + strcat(tmp, "ck configuration directory path: "); + strcat(tmp, opt->confDir); + list_add(the_list, tmp); +#define X(var, str, name) \ + strcpy(tmp, ""); \ + strcat(tmp, name); \ + strcat(tmp, ": "); \ + strcat(tmp, conf->var); \ + list_add(the_list, tmp); + CONFIG_VARIABLES_TABLE; +#undef X + list_print(the_list); + goto close; + case LT_PROG_CONFS: + if (!program_exists(&db, listOpt.pName)) { + ERR("Program %s doesn't exist in the database.", listOpt.pName); + goto error; + } + get_program_paths(&db, the_list, listOpt.pName, 0, listOpt.attr); + break; case LT_NONE: goto error; } diff --git a/src/actions.h b/src/actions.h index c9da4fb..624ae30 100644 --- a/src/actions.h +++ b/src/actions.h @@ -56,10 +56,12 @@ struct DelOptions { typedef enum ListTypes ListType; enum ListTypes { + LT_NONE, LT_PATH, LT_PROGRAM, LT_TREE, - LT_NONE, + LT_CKCONF, + LT_PROG_CONFS }; typedef enum ListShowTypes ListShowType; @@ -73,6 +75,7 @@ typedef struct ListOptions ListOpt; struct ListOptions { ListType _lt; ListShowType _lst; + char *pName; int attr; int err; }; diff --git a/src/dblayer.c b/src/dblayer.c index 4290a7a..973d561 100644 --- a/src/dblayer.c +++ b/src/dblayer.c @@ -478,9 +478,10 @@ int edit_get_config(DB *db, const char *pName, char *ret, const char *cName, int sqlite3_finalize(stmt); return flag; } + return -1; } -int edit_get_avaliable_paths(DB *db, cklist *ckl, const char* pName) { +int get_program_paths(DB *db, cklist *ckl, const char* pName, int bname, int attr) { int pid = get_program_id(db, pName); /* error */ if (pid == -2) { @@ -493,6 +494,10 @@ int edit_get_avaliable_paths(DB *db, cklist *ckl, const char* pName) { int rc; char selection[STR_M] = COL_CONFIG_PATH; + strcat(selection, ","); + strcat(selection, COL_CONFIG_SECRET); + strcat(selection, ","); + strcat(selection, COL_CONFIG_PRIMARY); char condition[STR_M] = TBL_PROGRAM; strcat(condition, "."); strcat(condition, COL_PROGRAM_ID); @@ -506,21 +511,32 @@ int edit_get_avaliable_paths(DB *db, cklist *ckl, const char* pName) { return -2; } - char name[STR_M] = ""; - strcat(name, pName); - strcat(name, ":"); - list_add(ckl, name); while (sqlite3_step(stmt) == SQLITE_ROW) { char *tmp = strdup((char *)sqlite3_column_text(stmt, 0)); char entry[STR_M] = ""; - strcat(entry, "|- "); - strcat(entry, basename(tmp)); + if (bname) { + strcat(entry, basename(tmp)); + } + else { + strcat(entry, tmp); + } + if (attr) { + /* secret */ + if (sqlite3_column_int(stmt, 1)) { + strcat(entry, " [s]"); + } + /* primary */ + if (sqlite3_column_int(stmt, 2)) { + strcat(entry, " [p]"); + } + } list_add(ckl, entry); free(tmp); } sqlite3_finalize(stmt); return 0; } + return -1; } int list_get_paths(DB *db, cklist *ckl, int attr) { @@ -732,15 +748,11 @@ int get_program_relations(DB *db, int pid) { int get_config_number(DB *db, char* pName) { int pid = get_program_id(db, pName); - /* error */ - if (pid == -2) { - return -1; - } - /* program exists */ if (pid > -1) { return get_program_relations(db, pid); } + return -1; } /* Removes the relationship of `cid` with the corresponding program. diff --git a/src/dblayer.h b/src/dblayer.h index 05ba5bd..c99f143 100644 --- a/src/dblayer.h +++ b/src/dblayer.h @@ -43,6 +43,7 @@ extern DB open_DB(const UserOpt *opt); extern void close_DB(DB *db); extern int program_exists(DB *db, const char *pName); +extern int get_program_paths(DB *db, cklist *ckl, const char* pName, int basename, int attr); /********/ /* init */ @@ -66,7 +67,6 @@ extern int add_transaction_try(DB *db, const AddOpt * const opt); extern int edit_get_prime_config_from_program(DB *db, char *pName, char *ret, int *secret); extern int get_config_number(DB *db, char *pName); extern int edit_get_config(DB *db, const char *pName, char *ret, const char *cName, int *sec); -extern int edit_get_avaliable_paths(DB *db, cklist *ckl, const char* pName); /********/ /* list */ |