diff --git a/src/bot/context.c b/src/bot/context.c index 718e5ec..43c751e 100644 --- a/src/bot/context.c +++ b/src/bot/context.c @@ -3,8 +3,9 @@ #include "context.h" -void bot_free_user_data(struct BotUserInfo user, bool freeSegment) +void bot_free_user_data(struct BotUserInfo user, GString *filename, bool freeSegment) { + g_string_free(filename, freeSegment); g_string_free(user.jid, freeSegment); g_string_free(user.pass, freeSegment); } diff --git a/src/bot/context.h b/src/bot/context.h index 5def451..906892c 100644 --- a/src/bot/context.h +++ b/src/bot/context.h @@ -25,7 +25,7 @@ xmpp_conn_t* conn; }; -void bot_free_user_data(struct BotUserInfo user, bool freeSegment); +void bot_free_user_data(struct BotUserInfo user, GString *filename, bool freeSegment); /* perform xmpp startup, store in bctx if completed successfully */ int bot_xmpp_startup(struct BotUserInfo user, struct BotXmppCtx * const bctx); diff --git a/src/grammar/expenses.y b/src/grammar/expenses.y index 4e1f1b1..a4f8386 100644 --- a/src/grammar/expenses.y +++ b/src/grammar/expenses.y @@ -57,7 +57,7 @@ msg: update value TOK_USER TOK_STR { - int res = write_update_to_csv(g_string_new("test.csv"), $1, $2, $3, $4); + int res = write_update_to_csv(bot_get_filename(), $1, $2, $3, $4); printf("update [%d]: %d %f %s %s\n", res, $1, $2, $3->str, $4->str); $$ = 0; } | TOK_CMD_DEL TOK_INT { printf("delete: %d\n", $2); $$ = 0; } diff --git a/src/grammar/types.c b/src/grammar/types.c index a7942a6..f595012 100644 --- a/src/grammar/types.c +++ b/src/grammar/types.c @@ -3,6 +3,8 @@ #include "types.h" extern BotExpenseEntry *g_LastExpenseEntry = NULL; +extern GString *g_filename = NULL; + BotExpenseEntry *bot_get_last_expense() { return g_LastExpenseEntry; @@ -15,6 +17,19 @@ g_LastExpenseEntry = entry; } +GString *bot_get_filename() +{ + return g_filename; +} + +void bot_set_filename(GString *fn) +{ + if(g_filename) { + g_string_free(g_filename, true); + } + g_filename = fn; +} + /* Parse a string with Flex+Bison instead of a file / stdout */ int grammar_parse_string(const GString *buf) { int res; diff --git a/src/grammar/types.h b/src/grammar/types.h index 2ec3c24..58cddb1 100644 --- a/src/grammar/types.h +++ b/src/grammar/types.h @@ -90,3 +90,8 @@ extern BotExpenseEntry *g_LastExpenseEntry; BotExpenseEntry *bot_get_last_expense(); void bot_set_last_expense(BotExpenseEntry *entry); + +/* store the filename in memory */ +extern GString *g_filename; +GString *bot_get_filename(); +void bot_set_filename(GString *fn); diff --git a/src/main.c b/src/main.c index 0a35a2b..abaadb7 100644 --- a/src/main.c +++ b/src/main.c @@ -4,26 +4,33 @@ #include #include #include "bot/context.h" +#include "grammar/types.h" int main(int argc, char **argv) { + GString *filename; struct BotUserInfo user; struct BotXmppCtx bctx; int startup_code; /* take a jid and password on the command line */ - if (argc != 3) { - fprintf(stderr, "Usage: bot \n\n"); + if (argc != 4) { + fprintf(stderr, "Usage: bot \n\n"); return 1; } - if (!g_utf8_validate(argv[1], -1, NULL) || !g_utf8_validate(argv[2], -1, NULL)) { - fprintf(stderr, " and should be valid UTF-8 strings.\n\n"); + if (!g_utf8_validate(argv[1], -1, NULL) + || !g_utf8_validate(argv[2], -1, NULL) + || !g_utf8_validate(argv[3], -1, NULL)) { + fprintf(stderr, ", and should be valid UTF-8 strings.\n\n"); return 1; } user.jid = g_string_new(argv[1]); user.pass = g_string_new(argv[2]); + filename = g_string_new(argv[3]); + + bot_set_filename(filename); /* perform the startup and connect routine */ startup_code = bot_xmpp_startup(user, &bctx); @@ -41,7 +48,7 @@ bot_xmpp_shutdown(&bctx); /* Free user data, leave underlying strings as they are part of argv*/ - bot_free_user_data(user, false); + bot_free_user_data(user, filename, false); return 0; }