X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=yang%2Fembedmodel.py;h=6d37839cf36ea660a189cfb5be239a776797c975;hb=12906cb1c84b4de54874365d4a02a040ed9632d1;hp=0a25c93da7cd98db512826fd951dd240ce306616;hpb=690e4f9dff41b78e630efee96eabb11864804452;p=mirror_frr.git diff --git a/yang/embedmodel.py b/yang/embedmodel.py index 0a25c93da..6d37839cf 100644 --- a/yang/embedmodel.py +++ b/yang/embedmodel.py @@ -1,4 +1,5 @@ #!/usr/bin/python3 +# SPDX-License-Identifier: NONE # # YANG module to C wrapper # written 2018 by David Lamparter, placed in Public Domain. @@ -12,20 +13,22 @@ inname = sys.argv[1] outname = sys.argv[2] outdir = os.path.dirname(os.path.abspath(outname)) -if not os.path.isdir(outdir): +try: os.makedirs(outdir) +except FileExistsError: + pass # these are regexes to avoid a compile-time/host dependency on yang-tools # or python-yang. Cross-compiling FRR is already somewhat involved, no need # to make it even harder. -re_name = re.compile(r'\bmodule\s+([^\s]+)\s+\{') -re_subname = re.compile(r'\bsubmodule\s+([^\s]+)\s+\{') -re_mainname = re.compile(r'\bbelongs-to\s+([^\s]+)\s+\{') -re_rev = re.compile(r'\brevision\s+([\d-]+)\s+\{') +re_name = re.compile(r"\bmodule\s+([^\s]+)\s+\{") +re_subname = re.compile(r"\bsubmodule\s+([^\s]+)\s+\{") +re_mainname = re.compile(r"\bbelongs-to\s+([^\s]+)\s+\{") +re_rev = re.compile(r"\brevision\s+([\d-]+)\s+\{") -template = '''/* autogenerated by embedmodel.py. DO NOT EDIT */ +template = """/* autogenerated by embedmodel.py. DO NOT EDIT */ #include #include "yang.h" @@ -47,23 +50,28 @@ static void embed_register(void) { \tyang_module_embed(&embed); } -''' +""" + +passchars = set(string.printable) - set("\\'\"%\r\n\t\x0b\x0c") + -passchars = set(string.printable) - set('\\\'"%\r\n\t\x0b\x0c') def escapech(char): if char in passchars: return char - if char == '\n': - return '\\n' - if char == '\t': - return '\\t' - if char in '"\\\'': - return '\\' + char - return '\\x%02x' % (ord(char)) + if char == "\n": + return "\\n" + if char == "\t": + return "\\t" + if char in "\"\\'": + return "\\" + char + return "\\x%02x" % (ord(char)) + + def escape(line): - return ''.join([escapech(i) for i in line]) + return "".join([escapech(i) for i in line]) + -with open(inname, 'r') as fd: +with open(inname, "r") as fd: data = fd.read() sub_name = "" @@ -72,29 +80,33 @@ sub_rev = "" # XML support isn't actively used currently, but it's here in case the need # arises. It does avoid the regex'ing. -if '