[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 22/32] qapi: New helper c_string()
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [RFC PATCH 22/32] qapi: New helper c_string() |
Date: |
Mon, 2 Oct 2017 17:25:42 +0200 |
Use new c_string() to replace qapi-introspect's more limited
to_c_string().
Signed-off-by: Markus Armbruster <address@hidden>
---
scripts/qapi-introspect.py | 8 ++------
scripts/qapi.py | 15 +++++++++++++++
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/scripts/qapi-introspect.py b/scripts/qapi-introspect.py
index 89365449b0..52404b07ab 100644
--- a/scripts/qapi-introspect.py
+++ b/scripts/qapi-introspect.py
@@ -35,10 +35,6 @@ def to_json(obj, level=0):
return ret
-def to_c_string(string):
- return '"' + string.replace('\\', r'\\').replace('"', r'\"') + '"'
-
-
class QAPISchemaGenIntrospectVisitor(QAPISchemaVisitor):
def __init__(self, unmask):
self._unmask = unmask
@@ -70,12 +66,12 @@ extern const char %(c_name)s[];
''',
c_name=c_name(name))
lines = to_json(jsons).split('\n')
- c_string = '\n '.join([to_c_string(line) for line in lines])
self.defn = mcgen('''
const char %(c_name)s[] = %(c_string)s;
''',
c_name=c_name(name),
- c_string=c_string)
+ c_string='\n '.join([c_string(line)
+ for line in lines]))
self._schema = None
self._jsons = None
self._used_types = None
diff --git a/scripts/qapi.py b/scripts/qapi.py
index efc128eee0..958249fbd8 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -1915,6 +1915,21 @@ def c_name(name, protect=True):
return 'q_' + name
return name
+
+def c_string(string):
+ def escape_ch(match):
+ ch = match.group(0)
+ esc = {'\a': 'a', '\b': 'b', '\f': 'f', '\n': 'n', '\r': 'r',
+ '\t': 't', '\v': 'v', '"': r'"', '\\': '\\'}.get(ch)
+ if not esc:
+ esc = 'x%02x' % ord(ch)
+ return '\\' + esc
+
+ if string is None:
+ return "NULL"
+ return '"' + re.sub(r'[\0-\37"\\\177]', escape_ch, string) + '"'
+
+
eatspace = '\033EATSPACE.'
pointer_suffix = ' *' + eatspace
--
2.13.6
- Re: [Qemu-devel] [RFC PATCH 01/32] tests/qapi-schema: Improve coverage of '@', (continued)
- [Qemu-devel] [RFC PATCH 04/32] qapi2texi: Fix for '@' not followed by \w character, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 09/32] qapi: check_type() parameter allow_optional is now unused, drop, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 13/32] qapi: Use argparse to open schema file, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 06/32] qapi2texi: Drop | example markup, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 29/32] qapi/options: QAPIfy --echr argument type, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 32/32] qapi/options: QAPIfy --add-fd argument type, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 22/32] qapi: New helper c_string(),
Markus Armbruster <=
- [Qemu-devel] [RFC PATCH 30/32] qapi/options: QAPIfy --watchdog-action argument type, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 08/32] qapi: Simplify check_name() parameters, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 10/32] qapi: Don't run generators twice, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 31/32] qapi/options: QAPIfy --blockdev argument type, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 05/32] qapi2texi: Provide access to Texinfo markup, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 21/32] qapi: Define QAPIOptionKind and QAPIOption automatically, Markus Armbruster, 2017/10/02
- [Qemu-devel] [RFC PATCH 23/32] qapi-options: Command line option backend, Markus Armbruster, 2017/10/02