]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tools: add source code string mangler
authorDavid Lamparter <equinox@diac24.net>
Tue, 14 Jul 2020 08:18:09 +0000 (10:18 +0200)
committerDavid Lamparter <equinox@diac24.net>
Tue, 14 Jul 2020 08:37:24 +0000 (10:37 +0200)
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
tools/stringmangle.py [new file with mode: 0644]

diff --git a/tools/stringmangle.py b/tools/stringmangle.py
new file mode 100644 (file)
index 0000000..a2eb373
--- /dev/null
@@ -0,0 +1,59 @@
+# 2020 by David Lamparter, placed in the public domain.
+
+import sys
+import os
+import re
+import argparse
+
+wrap_res = [
+    (re.compile(r'(?<!\\n)"\s*\n\s*"', re.M),           r''),
+]
+pri_res = [
+    (re.compile(r'(PRI[udx][0-9]+)\s*\n\s*"', re.M),    r'\1"'),
+    (re.compile(r'"\s*PRI([udx])32\s*"'),               r'\1'),
+    (re.compile(r'"\s*PRI([udx])32'),                   r'\1"'),
+    (re.compile(r'"\s*PRI([udx])16\s*"'),               r'h\1'),
+    (re.compile(r'"\s*PRI([udx])16'),                   r'h\1"'),
+    (re.compile(r'"\s*PRI([udx])8\s*"'),                r'hh\1'),
+    (re.compile(r'"\s*PRI([udx])8'),                    r'hh\1"'),
+]
+
+def main():
+    argp = argparse.ArgumentParser(description = 'C string mangler')
+    argp.add_argument('--unwrap', action = 'store_const', const = True)
+    argp.add_argument('--pri8-16-32', action = 'store_const', const = True)
+    argp.add_argument('files', type = str, nargs = '+')
+    args = argp.parse_args()
+
+    regexes = []
+    if args.unwrap:
+        regexes.extend(wrap_res)
+    if args.pri8_16_32:
+        regexes.extend(pri_res)
+    if len(regexes) == 0:
+        sys.stderr.write('no action selected to execute\n')
+        sys.exit(1)
+
+    l = 0
+
+    for fn in args.files:
+        sys.stderr.write(fn + '\033[K\r')
+        with open(fn, 'r') as ifd:
+            data = ifd.read()
+
+        newdata = data
+        n = 0
+        for regex, repl in regexes:
+            newdata, m = regex.subn(repl, newdata)
+            n += m
+
+        if n > 0:
+            sys.stderr.write('changed: %s\n' % fn)
+            with open(fn + '.new', 'w') as ofd:
+                ofd.write(newdata)
+            os.rename(fn + '.new', fn)
+            l += 1
+
+    sys.stderr.write('%d files changed.\n' % (l))
+
+main()