aboutsummaryrefslogtreecommitdiffstats
path: root/src/actions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions.c')
-rw-r--r--src/actions.c95
1 files changed, 82 insertions, 13 deletions
diff --git a/src/actions.c b/src/actions.c
index 3cce2f6..7d5276a 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -8,6 +8,9 @@
* GPLv3 (see LICENCE for the full notice)
*
* -------------------------------------------------------------------------- */
+#include <limits.h>
+#include <stdlib.h>
+
#include "actions.h"
#include "actionhelper.h"
#include "dblayer.h"
@@ -37,7 +40,6 @@ AddOpt make_add_options(cklist* args) {
/* since we are here, the first two argumens must exist */
AddOpt addOpt = {
.progName = list_get(args),
- .confPath = NULL,
.secret = 0,
.prime = 0,
.err = ADD_NO_ERR
@@ -48,7 +50,7 @@ AddOpt make_add_options(cklist* args) {
addOpt.err = ADD_ERR_WRONG_CONFIG;
return addOpt;
}
- addOpt.confPath = list_get(args);
+ realpath(list_get(args), addOpt.confPath);
while (list_next(args)) {
if (strcmp(list_get(args), "-s") == 0 && addOpt.secret == 0) {
@@ -163,8 +165,50 @@ int run_EDIT(UserOpt *opt, Conf *conf) {
return 1;
}
+ListOpt make_list_options(cklist *args) {
+ list_rewind(args);
+ ListOpt listOpt = {
+ ._lt = LT_NONE,
+ ._lst = LST_PLAIN,
+ .err = 0
+ };
+
+ if (list_size(args)) {
+ do {
+ if (strcmp(list_get(args), "-t") == 0) {
+ if (!list_next(args)) {
+ listOpt.err = 1;
+ break;
+ }
+ if (strcmp(list_get(args), "plain") == 0) {
+ listOpt._lst = LST_PLAIN;
+ }
+ else if (strcmp(list_get(args), "lisp") == 0) {
+ listOpt._lst = LST_LISP;
+ }
+ else if (strcmp(list_get(args), "python") == 0) {
+ listOpt._lst = LST_PYTHON;
+ }
+ else {
+ listOpt.err = 1;
+ }
+ }
+ else if (strcmp(list_get(args), "paths") == 0) {
+ listOpt._lt = LT_PATH;
+ }
+ else if (strcmp(list_get(args), "programs") == 0) {
+ listOpt._lt = LT_PROGRAM;
+ }
+ else {
+ listOpt.err = 1;
+ }
+ } while(list_next(args));
+ }
+ list_rewind(args);
+ return listOpt;
+}
+
int run_LIST(UserOpt *opt, Conf *conf) {
- printf("Running %s\n", "list");
DB db = open_DB(opt);
if (db.ptr == NULL) {
if (db.error == SQL_ERR_NO_TABLES) {
@@ -173,20 +217,46 @@ int run_LIST(UserOpt *opt, Conf *conf) {
return 0;
}
- cklist *paths = list_make_new();
+ cklist *list_type = list_make_new();
- list_get_paths(&db, paths);
-
- //list_print_lisp(paths);
- // list_print_python(opt->args);
- list_print(paths);
- list_free(paths);
+ ListOpt listOpt = make_list_options(opt->args);
+ if (listOpt.err) {
+ close_DB(&db);
+ list_free(list_type);
+ return 0;
+ }
+ switch(listOpt._lt) {
+ case LT_PATH:
+ list_get_paths(&db, list_type);
+ break;
+ case LT_PROGRAM:
+ list_get_programs(&db, list_type);
+ break;
+ case LT_NONE:
+ printf("What should I list? (paths, configs)\n");
+ close_DB(&db);
+ list_free(list_type);
+ return 0;
+ }
+ switch(listOpt._lst) {
+ case LST_PLAIN:
+ list_print(list_type);
+ break;
+ case LST_LISP:
+ list_print_lisp(list_type);
+ break;
+ case LST_PYTHON:
+ list_print_python(list_type);
+ }
close_DB(&db);
- return 0;
+ list_free(list_type);
+ return 1;
}
int run_SEARCH(UserOpt *opt, Conf *conf) {
printf("Running %s\n", "search");
+ DB db = open_DB(opt);
+ close_DB(&db);
return 0;
}
@@ -227,10 +297,9 @@ void print_EDIT_result(int ok) {
void print_LIST_result(int ok) {
if (ok) {
- printf("succes\n");
return;
}
- printf("Not Supported\n");
+ printf("Wrong list arguments\n");
}
void print_SEARCH_result(int ok) {