diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-03-30 15:24:48 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-03-30 15:25:50 -0500 |
commit | 40ca3cb3f51b0e6e02fd3b9ac9ecc0aafd5296c4 (patch) | |
tree | f4b0a2057faf0a505f0108aab3192a50e45771d1 /gatchat/gatserver.c | |
parent | a2c4c8e7b6051a787a09ee45e232ad4630286c61 (diff) | |
download | ofono-40ca3cb3f51b0e6e02fd3b9ac9ecc0aafd5296c4.tar.bz2 |
Fix: Record last received command
Diffstat (limited to 'gatchat/gatserver.c')
-rw-r--r-- | gatchat/gatserver.c | 17 |
1 files changed, 11 insertions, 6 deletions
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; } |