diff --git a/src/expenses/grammar.y b/src/expenses/grammar.y index 7784022..8cbb460 100644 --- a/src/expenses/grammar.y +++ b/src/expenses/grammar.y @@ -1,6 +1,7 @@ %{ #include #include /* For GString */ +#include /* suppress warning about missing declarations */ int yylex(); @@ -67,7 +68,7 @@ | TOK_CMD_REMINDER TOK_INT { bot_set_last_command($1); - bot_set_last_reminder($2); + bot_set_last_reminder(abs($2)); } | TOK_CMD_DEL TOK_INT { printf("delete: %d\n", $2); $$ = 0; } | TOK_CMD_REPORT ts { printf("report: %d\n", $2); $$ = 0; } diff --git a/src/expenses/task.c b/src/expenses/task.c index dbcafbc..9f35cd3 100644 --- a/src/expenses/task.c +++ b/src/expenses/task.c @@ -38,7 +38,8 @@ /* deep copy, but we don't care about from */ reminder->minutes = g_tmp_lastReminder->minutes; reminder->from = g_string_new(""); - /* free_bot_reminder(g_tmp_lastReminder); /\* can only be used once *\/ */ + free_bot_reminder(g_tmp_lastReminder); /* can only be used once */ + g_tmp_lastReminder = NULL; } return reminder; @@ -50,6 +51,7 @@ if(g_tmp_lastReminder) { fprintf(stderr, "WARNING: overwriting reminder. This should not happen.\n"); free_bot_reminder(g_tmp_lastReminder); /* can only be used once */ + g_tmp_lastReminder = NULL; } reminder = malloc(sizeof *reminder); reminder->minutes = minutes; @@ -137,8 +139,13 @@ void bot_cancel_task(const gchar * const user) { BotTask *task; - if ((task = g_hash_table_lookup(g_taskTable, user))) { /* value already present, stop reminder */ - free_bot_task(task); + if(g_taskTable) { + if ((task = g_hash_table_lookup(g_taskTable, user))) { /* value already present, stop reminder */ + free_bot_task(task); + } + if(g_tmp_lastReminder) { + free_bot_reminder(g_tmp_lastReminder); + } + g_hash_table_remove(g_taskTable, user); } - g_hash_table_remove(g_taskTable, user); } diff --git a/src/expenses/types.c b/src/expenses/types.c index 2fd7386..afce3c2 100644 --- a/src/expenses/types.c +++ b/src/expenses/types.c @@ -139,6 +139,8 @@ BotReminder *reminder ) { - g_string_free(reminder->from, true); + if(reminder->from) { + g_string_free(reminder->from, true); + } free(reminder); }