mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-04 10:07:04 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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()
 |