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