diff --git a/src/cli/config.c b/src/cli/config.c index 91dad86..037fb40 100644 --- a/src/cli/config.c +++ b/src/cli/config.c @@ -54,9 +54,10 @@ char *klist_config_name(char *name) { } void klist_config_parse(klist_config *ctx, FILE *config) { - fseek(config, 0, SEEK_END); + fseek(config, 0, SEEK_SET); int c; char *key = NULL, *val = NULL; + int key_len = 0, val_len = 0; bool found_key = false, ignore_line = false; while ((c = fgetc(config)) != EOF) { switch (c) { @@ -75,8 +76,8 @@ void klist_config_parse(klist_config *ctx, FILE *config) { } free(key); free(val); - key = NULL; - val = NULL; + key_len = 0, val_len = 0; + key = NULL, val = NULL; break; case '=': if (!found_key) @@ -86,27 +87,32 @@ void klist_config_parse(klist_config *ctx, FILE *config) { exit(1); } break; - default: - if (!key && !val && c == '#') + case '#': + if (!key && !val) ignore_line = true; + default: if (ignore_line) continue; if (found_key) { - char *_val = val ? realloc(val, (strlen(val) + 2) * sizeof(char)) - : malloc(2 * sizeof(char)); - if (_val) { - val = _val; - val[strlen(val) - 2] = (char)c; - val[strlen(val) - 1] = '\0'; + if (val) + val = realloc(val, ++val_len * sizeof(char)); + else { + val_len = 2; + val = malloc(val_len * sizeof(char)); } + val[val_len - 2] = (char)c; + val[val_len - 1] = '\0'; + } else { - char *_key = key ? realloc(key, (strlen(key) + 2) * sizeof(char)) - : malloc(2 * sizeof(char)); - if (_key) { - key = _key; - key[strlen(key) - 2] = (char)c; - key[strlen(key) - 1] = '\0'; + if (key) + key = realloc(key, ++key_len * sizeof(char)); + else { + key_len = 2; + key = malloc(key_len * sizeof(char)); } + key[key_len - 2] = (char)c; + key[key_len - 1] = '\0'; + } } } diff --git a/src/cli/main.c b/src/cli/main.c index 3a85dda..48abf77 100644 --- a/src/cli/main.c +++ b/src/cli/main.c @@ -188,12 +188,12 @@ void setup(klist *ctx, int argc, char **argv) { while ((opt = getopt(argc, argv, "aedgl:n:s:")) != -1) switch (opt) { - /*case 'a': + case 'a': task_ctx->cmd = TASK_ADD; break; case 'e': task_ctx->cmd = TASK_EDIT; - break;*/ + break; case 'd': task_ctx->cmd = TASK_DELETE; break; @@ -219,6 +219,7 @@ void setup(klist *ctx, int argc, char **argv) { "-d\tdelete a task" "Not providing a parameter prints all tasks of a list."); } + if (!task_ctx->cmd) task_ctx->cmd = TASK_ADD; ctx->cmd_ctx = task_ctx; break; default: diff --git a/src/cli/process.c b/src/cli/process.c index ae8f56f..2f92818 100644 --- a/src/cli/process.c +++ b/src/cli/process.c @@ -8,7 +8,7 @@ int klist_app_user_get(klist *ctx) { klist_user *user = klist_user_get_by_local(ctx, getuid()); if (user) { - printf("User: %p\nID: %lu\n", user->name, user->id); + printf("User: %s\nID: %lu\n", (char*)user->name, user->id); size_t lists_len = 0; klist_list **lists = klist_list_get_all_by_user(ctx, user->id, &lists_len); printf("Lists: %lu\n", lists_len); diff --git a/src/libklist/models.c b/src/libklist/models.c index 2c0e6a7..1bfc714 100644 --- a/src/libklist/models.c +++ b/src/libklist/models.c @@ -405,15 +405,13 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, klist_stage **stages = klist_stage_get_all_for_list(ctx, list->id, &stages_len); - size_t stage_col_width = (width - 2 - (stages_len - 1)) / stages_len; - int max_stages_id = 0; for (i = 0; i < stages_len; i++) if (stages[i]->id > max_stages_id) - max_stages_id = stages[i]->id + 1; + max_stages_id = stages[i]->id; - int tasks_count_per_stage[max_stages_id]; - for (i = 0; i < max_stages_id; i++) + int tasks_count_per_stage[max_stages_id + 1]; + for (i = 0; i < max_stages_id + 1; i++) tasks_count_per_stage[i] = 0; u_long task_length = 0, max_task_length = 0; @@ -423,7 +421,9 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, if (task_length > max_task_length) max_task_length = task_length; } - width = max_task_length * stages_len; + u_int content_width = (int)((double)max_task_length * 1.6 * (double)stages_len); + if (content_width) width = content_width; + size_t stage_col_width = (width - 3 - (stages_len - 1)) / stages_len; int tasks_max = 0; for (i = 0; i < max_stages_id; i++) { @@ -436,7 +436,7 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, // list name printf("│"); printf(" %s", (char *)list->name); - for (i = 0; i < (width - 3) - strlen((char *)list->name); i++) + for (i = 0; i < (stages_len * stage_col_width) - (strlen((char *)list->name + 1)); i++) printf(" "); printf("│\n"); @@ -479,7 +479,8 @@ void klist_print_list(klist *ctx, klist_list *list, klist_task **tasks, } */ // separator - print_table_line("├", stages_len, "─", stage_col_width, "┼", "┤"); + if (tasks_len) + print_table_line("├", stages_len, "─", stage_col_width, "┼", "┤"); // tasks int stages_idx[max_stages_id];