diff options
author | Martin Schwenke <martin@meltin.net> | 2018-06-26 19:51:00 +1000 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2018-07-02 11:30:29 +0200 |
commit | 0b4a071ed1817bbc5523b259ca41c62a9e9b1f0b (patch) | |
tree | 8588127c4ba41e55e351b4dcca81013073a3ba5f /ctdb | |
parent | 63255ef92552da92956c05160f33622d0bbc3a28 (diff) | |
download | samba-0b4a071ed1817bbc5523b259ca41c62a9e9b1f0b.tar.gz |
ctdb-tests: Teach strace packet parser about non-octal escapes
strace output also encodes characters 7 to 13 as \a, \b, \t, \n, \v,
\f, \r.
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Mon Jul 2 11:30:29 CEST 2018 on sn-devel-144
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/tests/src/ctdb_packet_parse.c | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/ctdb/tests/src/ctdb_packet_parse.c b/ctdb/tests/src/ctdb_packet_parse.c index c337a2ef12d..707d697d931 100644 --- a/ctdb/tests/src/ctdb_packet_parse.c +++ b/ctdb/tests/src/ctdb_packet_parse.c @@ -39,23 +39,51 @@ static TDB_DATA strace_parser(char *buf, TALLOC_CTX *mem_ctx) while (i < strlen(buf)) { if (buf[i] == '\\') { - char tmp[4] = { '\0', '\0', '\0', '\0' }; - - /* first char after '\' has to be digit */ - tmp[0] = buf[i+1]; - if (isdigit(buf[i+2])) { - tmp[1] = buf[i+2]; - if (isdigit(buf[i+3])) { - tmp[2] = buf[i+3]; - i += 4; + /* first char after '\' is a digit or other escape */ + if (isdigit(buf[i+1])) { + char tmp[4] = { '\0', '\0', '\0', '\0' }; + + tmp[0] = buf[i+1]; + if (isdigit(buf[i+2])) { + tmp[1] = buf[i+2]; + if (isdigit(buf[i+3])) { + tmp[2] = buf[i+3]; + i += 4; + } else { + i += 3; + } } else { - i += 3; + i += 2; } - } else { + data.dptr[j] = strtol(tmp, NULL, 8); + } else if (buf[i+1] == 'a') { + data.dptr[j] = 7; + i += 2; + } else if (buf[i+1] == 'b') { + data.dptr[j] = 8; + i += 2; + } else if (buf[i+1] == 't') { + data.dptr[j] = 9; + i += 2; + } else if (buf[i+1] == 'n') { + data.dptr[j] = 10; i += 2; + } else if (buf[i+1] == 'v') { + data.dptr[j] = 11; + i += 2; + } else if (buf[i+1] == 'f') { + data.dptr[j] = 12; + i += 2; + } else if (buf[i+1] == 'r') { + data.dptr[j] = 13; + i += 2; + } else { + fprintf(stderr, + "Unknown escape \\%c\n", + buf[i+1]); + data.dptr[j] = 0; } - data.dptr[j] = strtol(tmp, NULL, 8); j += 1; } else if (buf[i] == '\n') { i += 1; |