mirror of git://git.sysmocom.de/ofono
Add hex-encoded character string getter to AtChat
This commit is contained in:
parent
70fce6b551
commit
41afb58bd7
|
@ -24,6 +24,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
@ -148,6 +149,58 @@ out:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean g_at_result_iter_next_hexstring(GAtResultIter *iter,
|
||||||
|
const guint8 **str, gint *length)
|
||||||
|
{
|
||||||
|
unsigned int pos;
|
||||||
|
unsigned int end;
|
||||||
|
unsigned int len;
|
||||||
|
char *line;
|
||||||
|
char *bufpos;
|
||||||
|
|
||||||
|
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;
|
||||||
|
memset(iter->buf, 0, sizeof(iter->buf));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
end = pos;
|
||||||
|
|
||||||
|
while (end < len && g_ascii_isxdigit(line[end]))
|
||||||
|
end += 1;
|
||||||
|
|
||||||
|
if ((end - pos) & 1)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ((end - pos) / 2 >= sizeof(iter->buf))
|
||||||
|
return FALSE;
|
||||||
|
*length = (end - pos) / 2;
|
||||||
|
|
||||||
|
for (bufpos = iter->buf; pos < end; pos += 2)
|
||||||
|
sscanf(line + pos, "%02hhx", bufpos++);
|
||||||
|
memset(bufpos, 0, sizeof(iter->buf) - (bufpos - iter->buf));
|
||||||
|
|
||||||
|
out:
|
||||||
|
iter->line_pos = skip_to_next_field(line, end, len);
|
||||||
|
|
||||||
|
if (str)
|
||||||
|
*str = (guint8 *) iter->buf;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean g_at_result_iter_next_number(GAtResultIter *iter, gint *number)
|
gboolean g_at_result_iter_next_number(GAtResultIter *iter, gint *number)
|
||||||
{
|
{
|
||||||
int pos;
|
int pos;
|
||||||
|
|
|
@ -54,6 +54,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_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_string(GAtResultIter *iter, const char **str);
|
||||||
gboolean g_at_result_iter_next_number(GAtResultIter *iter, gint *number);
|
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);
|
||||||
|
|
||||||
const char *g_at_result_iter_raw_line(GAtResultIter *iter);
|
const char *g_at_result_iter_raw_line(GAtResultIter *iter);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue