From a7b632bd9e26fb0f580b7683700343e300da1680 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 3 Sep 2009 23:03:42 -0500 Subject: Add unquoted string capability This is completely broken according to the standard, but some vendors use this in their "special" commands. --- gatchat/gatresult.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ gatchat/gatresult.h | 2 ++ 2 files changed, 47 insertions(+) diff --git a/gatchat/gatresult.c b/gatchat/gatresult.c index 389f7e82..ee02c0ca 100644 --- a/gatchat/gatresult.c +++ b/gatchat/gatresult.c @@ -105,6 +105,51 @@ static inline int skip_to_next_field(const char *line, int pos, int len) return pos; } +gboolean g_at_result_iter_next_unquoted_string(GAtResultIter *iter, + const char **str) +{ + unsigned int pos; + unsigned int end; + unsigned int len; + char *line; + + if (!iter) + return FALSE; + + if (!iter->l) + return FALSE; + + line = iter->l->data; + len = strlen(line); + + pos = iter->line_pos; + + /* Omitted string */ + if (line[pos] == ',') { + end = pos; + iter->buf[pos] = '\0'; + goto out; + } + + if (line[pos] == '"') + return FALSE; + + end = pos; + + while (end < len && line[end] != ',') + end += 1; + + iter->buf[end] = '\0'; + +out: + iter->line_pos = skip_to_next_field(line, end, len); + + if (str) + *str = iter->buf + pos; + + return TRUE; +} + gboolean g_at_result_iter_next_string(GAtResultIter *iter, const char **str) { unsigned int pos; diff --git a/gatchat/gatresult.h b/gatchat/gatresult.h index fc4c123c..392e56cf 100644 --- a/gatchat/gatresult.h +++ b/gatchat/gatresult.h @@ -55,6 +55,8 @@ gboolean g_at_result_iter_skip_next(GAtResultIter *iter); gboolean g_at_result_iter_next_range(GAtResultIter *iter, gint *min, gint *max); gboolean g_at_result_iter_next_string(GAtResultIter *iter, const char **str); +gboolean g_at_result_iter_next_unquoted_string(GAtResultIter *iter, + const char **str); gboolean g_at_result_iter_next_number(GAtResultIter *iter, gint *number); gboolean g_at_result_iter_next_hexstring(GAtResultIter *iter, const guint8 **str, gint *length); -- cgit v1.2.3