summaryrefslogtreecommitdiff
path: root/ctdb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2018-06-26 19:51:00 +1000
committerMartin Schwenke <martins@samba.org>2018-07-02 11:30:29 +0200
commit0b4a071ed1817bbc5523b259ca41c62a9e9b1f0b (patch)
tree8588127c4ba41e55e351b4dcca81013073a3ba5f /ctdb
parent63255ef92552da92956c05160f33622d0bbc3a28 (diff)
downloadsamba-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.c52
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;