summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2007-10-16 16:42:02 +1000
committerJon Loeliger <jdl@freescale.com>2007-10-16 08:10:15 -0500
commita756c12bea9e39acbed483d9008852f3a371e4a4 (patch)
tree8ab2b1ce49c726a0df2811ab3f7e359163070b0c /data.c
parent333542fabf8720b881e992a5abca32ef4bcb841a (diff)
downloaddtc-a756c12bea9e39acbed483d9008852f3a371e4a4.tar.gz
dtc: Improve support for string escapes
dtc supports the use of C-style escapes (\n, \t and so forth) in string property definitions via the data_copy_escape_string() function. However, while it supports the most common escape characters, it doesn't support the full set that C does, which is a potential gotcha. Worse, a bug in the lexer means that while data_copy_escape_string() can handle the \" escape, a string with such an escape won't lex correctly. This patch fixes both problems, extending data_copy_escape_string() to support the missing escapes, and fixing the regex for strings in the lexer to handle internal escaped quotes. This also adds a testcase for string escape functionality. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'data.c')
-rw-r--r--data.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/data.c b/data.c
index 1836f08..b8c79c1 100644
--- a/data.c
+++ b/data.c
@@ -150,12 +150,24 @@ struct data data_copy_escape_string(char *s, int len)
c = s[i++];
assert(c);
switch (c) {
+ case 'a':
+ q[d.len++] = '\a';
+ break;
+ case 'b':
+ q[d.len++] = '\b';
+ break;
case 't':
q[d.len++] = '\t';
break;
case 'n':
q[d.len++] = '\n';
break;
+ case 'v':
+ q[d.len++] = '\v';
+ break;
+ case 'f':
+ q[d.len++] = '\f';
+ break;
case 'r':
q[d.len++] = '\r';
break;