]> git.proxmox.com Git - mirror_frr.git/blame - tools/stringmangle.py
zebra: debug flags for MAC-IP sync
[mirror_frr.git] / tools / stringmangle.py
CommitLineData
93195af6
DL
1# 2020 by David Lamparter, placed in the public domain.
2
3import sys
4import os
5import re
6import argparse
7
8wrap_res = [
9 (re.compile(r'(?<!\\n)"\s*\n\s*"', re.M), r''),
10]
11pri_res = [
12 (re.compile(r'(PRI[udx][0-9]+)\s*\n\s*"', re.M), r'\1"'),
13 (re.compile(r'"\s*PRI([udx])32\s*"'), r'\1'),
14 (re.compile(r'"\s*PRI([udx])32'), r'\1"'),
15 (re.compile(r'"\s*PRI([udx])16\s*"'), r'h\1'),
16 (re.compile(r'"\s*PRI([udx])16'), r'h\1"'),
17 (re.compile(r'"\s*PRI([udx])8\s*"'), r'hh\1'),
18 (re.compile(r'"\s*PRI([udx])8'), r'hh\1"'),
19]
20
21def main():
22 argp = argparse.ArgumentParser(description = 'C string mangler')
23 argp.add_argument('--unwrap', action = 'store_const', const = True)
24 argp.add_argument('--pri8-16-32', action = 'store_const', const = True)
25 argp.add_argument('files', type = str, nargs = '+')
26 args = argp.parse_args()
27
28 regexes = []
29 if args.unwrap:
30 regexes.extend(wrap_res)
31 if args.pri8_16_32:
32 regexes.extend(pri_res)
33 if len(regexes) == 0:
34 sys.stderr.write('no action selected to execute\n')
35 sys.exit(1)
36
37 l = 0
38
39 for fn in args.files:
40 sys.stderr.write(fn + '\033[K\r')
41 with open(fn, 'r') as ifd:
42 data = ifd.read()
43
44 newdata = data
45 n = 0
46 for regex, repl in regexes:
47 newdata, m = regex.subn(repl, newdata)
48 n += m
49
50 if n > 0:
51 sys.stderr.write('changed: %s\n' % fn)
52 with open(fn + '.new', 'w') as ofd:
53 ofd.write(newdata)
54 os.rename(fn + '.new', fn)
55 l += 1
56
57 sys.stderr.write('%d files changed.\n' % (l))
58
59main()