From 9b96a07785febfc854de9c8c582abd4c5ef767a2 Mon Sep 17 00:00:00 2001 From: Tristan Riehs Date: Sun, 12 Jul 2026 12:41:10 +0200 Subject: Add tag existence check to ftag tag add --- src/main.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main.c b/src/main.c index 4606d9a..2228f2a 100644 --- a/src/main.c +++ b/src/main.c @@ -998,9 +998,8 @@ static void ftag_tag_add(int argc, char **argv) strbuild(sql, "SELECT name FROM tags WHERE name = '%s';", new_tag_name); rc = sqlite3_exec(db, sql, - ftag_tag_shall_exist_callback, (intptr_t)0, NULL); + ftag_tag_shall_exist_callback, (void *)0, NULL); sqlite3_check(rc, db); - int next_id = table_next_id(db, "tags"); char *new_tag_desc = strdup(argv[2]); assert(strlen(new_tag_desc) <= 600); @@ -1023,12 +1022,13 @@ static int tag_edit_desc_callback(void *_old, int, char **cols, char **) return 0; } +static void ftag_tag_edit_usage(void) +{ + puts("Usage: ftag tag edit [-h] [-n] NAME..."); +} + static void ftag_tag_edit(int argc, char **argv) { - if (argc == 1) { - fprintf(stderr, "Usage: ftag tag edit [-h] [-n] NAME...\n"); - exit(EXIT_FAILURE); - } int opt; int edit_name = 0; char *column_name; @@ -1050,13 +1050,20 @@ static void ftag_tag_edit(int argc, char **argv) break; case '?': default: - fprintf(stderr, "Usage: ftag tag edit [-h] [-n] NAME...\n"); + ftag_tag_edit_usage(); exit(EXIT_FAILURE); } } - tag_name = argv[optind]; + if (argc - optind != 1) { + ftag_tag_edit_usage(); + exit(EXIT_FAILURE); + } + tag_name = strdup(argv[optind]); + sanitize_sql_str(&tag_name); db = ftag_db_open(); - /* TODO: check that tag exists */ + strbuild(sql, "SELECT name FROM tags WHERE name = '%s';", tag_name); + rc = sqlite3_exec(db, sql, ftag_tag_shall_exist_callback, (void *)1, NULL); + sqlite3_check(rc, db); if (edit_name) { column_name = "name"; old = strdup(tag_name); @@ -1077,6 +1084,7 @@ static void ftag_tag_edit(int argc, char **argv) printf("debug: SQL query: \"%s\"\n", sql); rc = sqlite3_exec(db, sql, NULL, NULL, NULL); sqlite3_check(rc, db); + free(tag_name); free(old); free(new); sqlite3_close(db); -- cgit v1.2.3