summaryrefslogtreecommitdiffstats
path: root/gatchat/gatserver.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-03-30 15:24:48 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-03-30 15:25:50 -0500
commit40ca3cb3f51b0e6e02fd3b9ac9ecc0aafd5296c4 (patch)
treef4b0a2057faf0a505f0108aab3192a50e45771d1 /gatchat/gatserver.c
parenta2c4c8e7b6051a787a09ee45e232ad4630286c61 (diff)
downloadofono-40ca3cb3f51b0e6e02fd3b9ac9ecc0aafd5296c4.tar.bz2
Fix: Record last received command
Diffstat (limited to 'gatchat/gatserver.c')
-rw-r--r--gatchat/gatserver.c17
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;
}