From 40ca3cb3f51b0e6e02fd3b9ac9ecc0aafd5296c4 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 30 Mar 2010 15:24:48 -0500 Subject: Fix: Record last received command --- gatchat/gatserver.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'gatchat/gatserver.c') diff --git a/gatchat/gatserver.c b/gatchat/gatserver.c index 99931e2b..b82036de 100644 --- a/gatchat/gatserver.c +++ b/gatchat/gatserver.c @@ -114,6 +114,7 @@ struct _GAtServer { guint max_read_attempts; /* Max reads per select */ enum ParserState parser_state; gboolean destroyed; /* Re-entrancy guard */ + char *last_line; /* Last read line */ }; static void g_at_server_wakeup_writer(GAtServer *server); @@ -469,9 +470,10 @@ done: return i; } -static void server_parse_line(GAtServer *server, char *line) +static void server_parse_line(GAtServer *server) { unsigned int pos = 0; + char *line = server->last_line; unsigned int len = strlen(line); if (len == 0) { @@ -676,12 +678,13 @@ static void new_bytes(GAtServer *p) case PARSER_RESULT_COMMAND: { - char *line = extract_line(p); + g_free(p->last_line); - if (line) { - server_parse_line(p, line); - g_free(line); - } else + p->last_line = extract_line(p); + + if (p->last_line) + server_parse_line(p); + else g_at_server_send_final(p, G_AT_SERVER_RESULT_ERROR); break; @@ -850,6 +853,8 @@ static void g_at_server_cleanup(GAtServer *server) g_hash_table_destroy(server->command_list); server->command_list = NULL; + g_free(server->last_line); + server->channel = NULL; } -- cgit v1.2.3