Edit

IABSD.fr/ports/sysutils/mdprint/patches

Branch :

  • Show log

    Commit

  • Author : sthen
    Date : 2025-02-19 19:46:04
    Hash : af927c0c
    Message : apply 2to3 conversions via patches rather than running during build; ok kn

  • patch-tools_mdprint_mdprint_py
  • apply 2to3
    
    Use equality tests instead of identity checks with literals to fix Python 3.8+
    SyntaxWarning messages.
    
    Ensure integer typed results from integer division with the floordiv operator
    when using Python 3.  `type(int(1)/int(1))' yields "<class 'int'>" and
    "<class 'float'>" in Python 2 and 3 respectively.
    
    Decode ARC node names and string property values as UTF-8 to preserve the output
    format and fix --grep when using Python 3, e.g. print/use "value" instead of
    "b'value'".  Python 3 uses type "<class 'bytes'>" and does not decode
    automatically, Python 2 uses "<class 'str'>" already for everything.
    
    Adapt sloppy conversion of tuples into hex encoded strings likewise.
    
    Index: tools/mdprint/mdprint.py
    --- tools/mdprint/mdprint.py.orig
    +++ tools/mdprint/mdprint.py
    @@ -88,7 +88,7 @@ class MDPrintApp:
             for node_string in node_strings:
                 tokens = node_string.split('.')
                 node_name = tokens.pop(0)
    -            prop_names = filter(lambda (s): s, tokens) # remove empty strings
    +            prop_names = [s for s in tokens if s] # remove empty strings
                 if node_name not in nodes:
                     nodes[node_name] = prop_names
                 else:
    @@ -106,7 +106,7 @@ class MDPrintApp:
             arg = dspri_info()
             f = open(MDPrintApp.DefaultPRIFilePath, mode="rb")
             rv = fcntl.ioctl(f, ioctl, arg)
    -        if rv is 0:
    +        if rv == 0:
                 rv = arg.size
             else:
                 rv = -1
    @@ -155,7 +155,7 @@ class Parser(dict):
             self.data_blk_off = None
     
         def node_ids(self):
    -        return self.keys()
    +        return list(self.keys())
     
         def parse_header(self):
             (self.major, self.minor, self.node_blk_sz, self.name_blk_sz,
    @@ -165,7 +165,7 @@ class Parser(dict):
             self.name_blk_off = self.node_blk_off + self.node_blk_sz
             self.data_blk_off = self.name_blk_off + self.name_blk_sz
     
    -        if self.major is not 1:
    +        if self.major != 1:
                 MDPrintApp.err("Only major version 1 MD's are supported")
                 return False
             else:
    @@ -186,7 +186,7 @@ class Parser(dict):
     
                 if element.tag is Element.NodeTag:
     
    -                node_id = element.offset / Element.Size
    +                node_id = element.offset // Element.Size
                     self.counts[element.name] += 1
     
                     if node_id in self:
    @@ -266,7 +266,7 @@ class Parser(dict):
         def parse_name(self, name_off, name_len):
             (name, ) = struct.unpack_from("!%ds" % name_len,
                 self.mdbuffer, self.name_blk_off + name_off)
    -        return name
    +        return name.decode('utf-8')
     
         def parse_data_string(self, data_off, data_len):
             (name, ) = struct.unpack_from("!%ds" % (data_len - 1),
    @@ -292,19 +292,19 @@ class Parser(dict):
                 return False
     
             # Make sure the last string is the empty string.
    -        if len(strings[-1]) is not 0:
    +        if len(strings[-1]) != 0:
                 return False
             strings.pop()
     
             for s in strings:
    -            if len(s) is 0:
    +            if len(s) == 0:
                     return False
                 # Only treat as a string if all characters
                 # are between 0x20 and 0x7f inclusive
                 if re.match(b'[\x20-\x7f]+$', s) is None:
                     return False
     
    -        return strings
    +        return [s.decode('utf-8') for s in strings]
     
     class Element:
     
    @@ -379,18 +379,18 @@ class Printer:
     
             # Print arcs, ordered by target node type.
             # Use this lambda function to sort by node type.
    -        f = lambda (node_id, node): node.type
    -        arc_name_f = lambda (t):t[0]
    +        f = lambda node_id_node: node_id_node[1].type
    +        arc_name_f = lambda t:t[0]
     
             if self.settings.backlinks:
    -            for _, target_node in sorted(node.backs.iteritems(), key=f):
    +            for _, target_node in sorted(iter(node.backs.items()), key=f):
                     if (not subgraph) or target_node.in_subgraph:
                         self.print_back_arc(md, node, target_node, self.settings)
     
    -        for _, target_node in sorted(node.fwds.iteritems(), key=f):
    +        for _, target_node in sorted(iter(node.fwds.items()), key=f):
                 self.print_fwd_arc(md, node, target_node, self.settings)
     
    -        for (arc_name, _), target_node in sorted(node.named_arcs.iteritems(),
    +        for (arc_name, _), target_node in sorted(iter(node.named_arcs.items()),
                 key=arc_name_f):
                 self.print_named_arc(md, node, arc_name, target_node, self.settings)
     
    @@ -495,7 +495,7 @@ class ParsablePrinter(Printer):
                 self.p(node.type)
     
         def print_str_prop(self, md, node, prop_name, prop_val):
    -        self.p("|%s=\"%s\"" % (prop_name, prop_val))
    +        self.p("|%s=\"%s\"" % (prop_name, prop_val.decode('utf-8')))
     
         def print_val_prop(self, md, node, prop_name, prop_val):
             self.p("|%s=0x%x" % (prop_name, prop_val))
    @@ -511,7 +511,8 @@ class ParsablePrinter(Printer):
                 self.p("\"%s\"" % strings[-1])
     
             else:
    -            self.p("0x" + str(prop_val).encode("hex"))
    +            from codecs import encode
    +            self.p("0x" + encode(bytes(prop_val), 'hex_codec').decode('utf-8'))
     
             self.p("}")
     
    @@ -548,22 +549,22 @@ class TextPrinter(Printer):
     
         def node_start(self, md, node, settings):
             if settings.nodeids:
    -            print("%s (node 0x%x) {" % (node.type, node.node_id))
    +            print(("%s (node 0x%x) {" % (node.type, node.node_id)))
             else:
    -            print("%s {" % node.type)
    +            print(("%s {" % node.type))
         def print_str_prop(self, md, node, prop_name, prop_val):
    -        print("\t%s = \"%s\"" % (prop_name, prop_val))
    +        print(("\t%s = \"%s\"" % (prop_name, prop_val.decode('utf-8'))))
         def print_val_prop(self, md, node, prop_name, prop_val):
    -        print("\t%s = 0x%x /* %d */" % (prop_name, prop_val, prop_val))
    +        print(("\t%s = 0x%x /* %d */" % (prop_name, prop_val, prop_val)))
         def print_data_prop(self, md, node, prop_name, prop_val):
     
    -        print "\t%s = {" % prop_name
    +        print("\t%s = {" % prop_name)
     
             strings = Parser.get_string_list(prop_val)
             if strings:
                 for s in strings[:-1]:
    -                print "\t\t\"%s\"," % s
    -            print "\t\t\"%s\"" % strings[-1]
    +                print("\t\t\"%s\"," % s)
    +            print("\t\t\"%s\"" % strings[-1])
     
             else:
                 print_byte = lambda b:"0x%02x" % b
    @@ -572,33 +573,33 @@ class TextPrinter(Printer):
                 # Some magic to print 8 columns of bytes: for each
                 # chunk of 8 bytes in the byte array, get an array
                 # slice 8-long and join it with a space.
    -            for i in range(0, (len(prop_val)+bpl-1)/bpl):
    +            for i in range(0, (len(prop_val)+bpl-1)//bpl):
                     raw = "%s" % ' '.join(map(print_byte,
                         prop_val[i * bpl:(i+1) * bpl]))
    -                print "\t\t%s" % raw
    +                print("\t\t%s" % raw)
     
    -        print "\t}"
    +        print("\t}")
     
         def print_named_arc(self, md, node, arc_name, target_node, settings):
             if settings.nodeids:
    -            print("\t%s --> %s (node 0x%x)" %
    -                (arc_name, target_node.type, target_node.node_id))
    +            print(("\t%s --> %s (node 0x%x)" %
    +                (arc_name, target_node.type, target_node.node_id)))
             else:
    -            print("\t%s --> %s" % (arc_name, target_node.type))
    +            print(("\t%s --> %s" % (arc_name, target_node.type)))
     
         def print_fwd_arc(self, md, node, target_node, settings):
             if settings.nodeids:
    -            print("\tfwd --> %s (node 0x%x)" %
    -                (target_node.type, target_node.node_id))
    +            print(("\tfwd --> %s (node 0x%x)" %
    +                (target_node.type, target_node.node_id)))
             else:
    -            print("\tfwd --> %s" % target_node.type)
    +            print(("\tfwd --> %s" % target_node.type))
     
         def print_back_arc(self, md, node, target_node, settings):
             if settings.nodeids:
    -            print("\tbak <-- %s (node 0x%x)" %
    -                (target_node.type, target_node.node_id))
    +            print(("\tbak <-- %s (node 0x%x)" %
    +                (target_node.type, target_node.node_id)))
             else:
    -            print("\tbak <-- %s" % target_node.type)
    +            print(("\tbak <-- %s" % target_node.type))
     
         def node_end(self, md, node):
             print("}")
    @@ -612,29 +613,29 @@ class HTMLPrinter(Printer):
             self.header_string = header
     
         def md_start(self, md):
    -        print "<html><head><title>MD</title><body>"
    +        print("<html><head><title>MD</title><body>")
             if self.header_string:
    -            print "<pre>" + header + "</pre>"
    +            print("<pre>" + header + "</pre>")
     
         def node_start(self, md, node, settings):
    -        print ("<div class=node><p><b><a href=#0x%x name=0x%x>%s</b></a> "
    +        print(("<div class=node><p><b><a href=#0x%x name=0x%x>%s</b></a> "
                     "<i>node 0x%x</i> <i>(%d %s nodes)</i>" %
                     (node.node_id, node.node_id, node.type, node.node_id,
    -            md.counts[node.type], node.type))
    +            md.counts[node.type], node.type)))
     
         def print_str_prop(self, md, node, prop_name, prop_val):
    -        print("<br>%s = \"%s\"" % (prop_name, prop_val))
    +        print(("<br>%s = \"%s\"" % (prop_name, prop_val.decode('utf-8'))))
     
         def print_val_prop(self, md, node, prop_name, prop_val):
    -        print("<br>%s = 0x%x /* %d */" % (prop_name, prop_val, prop_val))
    +        print(("<br>%s = 0x%x /* %d */" % (prop_name, prop_val, prop_val)))
     
         def print_data_prop(self, md, node, prop_name, prop_val):
    -        print("<br>%s = {" % prop_name)
    +        print(("<br>%s = {" % prop_name))
     
             strings = Parser.get_string_list(prop_val)
             if strings:
                 for s in strings:
    -                print "<br>&nbsp;\"%s\"" % s
    +                print("<br>&nbsp;\"%s\"" % s)
             else:
                 print_byte = lambda b:"0x%02x" % b
                 bpl = 8 # bytes per line
    @@ -642,32 +643,32 @@ class HTMLPrinter(Printer):
                 # Some magic to print 8 columns of bytes: for each
                 # chunk of 8 bytes in the byte array, get an array
                 # slice 8-long and join it with a space.
    -            for i in range(0, (len(prop_val)+bpl-1)/bpl):
    -                print "<br>&nbsp;", ', '.join(map(print_byte,
    -                    prop_val[i * bpl:(i+1) * bpl]))
    +            for i in range(0, (len(prop_val)+bpl-1)//bpl):
    +                print("<br>&nbsp;", ', '.join(map(print_byte,
    +                    prop_val[i * bpl:(i+1) * bpl])))
     
             print("<br>}")
     
         def print_fwd_arc(self, md, node, target_node, settings):
    -        print ("<br>&rarr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
    -            (target_node.node_id, target_node.type, target_node.node_id))
    +        print(("<br>&rarr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
    +            (target_node.node_id, target_node.type, target_node.node_id)))
     
         def print_back_arc(self, md, node, target_node, settings):
    -        print ("<br>&larr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
    -            (target_node.node_id, target_node.type, target_node.node_id))
    +        print(("<br>&larr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
    +            (target_node.node_id, target_node.type, target_node.node_id)))
     
         def print_named_arc(self, md, node, arc_name, target_node, settings):
    -        print ("<br>%s &rarr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
    +        print(("<br>%s &rarr; <a href=#0x%x><b>%s</b></a> <i>node_0x%x</i>" %
                 (arc_name, target_node.node_id, target_node.type,
    -            target_node.node_id))
    +            target_node.node_id)))
     
         def node_end(self, md, node):
    -        print "</p>"
    -        print "</div>"
    -        print "<hr>"
    +        print("</p>")
    +        print("</div>")
    +        print("<hr>")
     
         def md_end(self, md):
    -        print '</body></html>'
    +        print('</body></html>')
     
     class PrintSettings:
         def __init__(self, parsable, backlinks, node_ids):
    @@ -753,7 +754,7 @@ if __name__ == "__main__":
         # Binary mode can not be used with display options or input files
         if (flags.print_binary and
             # input file?
    -        ((len (args) is not 0) or
    +        ((len (args) != 0) or
             # display options?
             (flags.parsable or flags.print_html or (not flags.nodeids)
                 or (not flags.backlinks) or (not flags.print_header)
    @@ -773,7 +774,7 @@ if __name__ == "__main__":
         # No input file provided and the PRI option isn't set; use the guest MD.
         # Check the guest MD device file exists and set the mdfilename to the
         # PRI MD device file.
    -    elif len(args) is 0 and not flags.pri:
    +    elif len(args) == 0 and not flags.pri:
             mdfilename = MDPrintApp.DefaultFilePath
             if os.path.exists(mdfilename):
                 mdfilename = mdfilename
    @@ -785,7 +786,7 @@ if __name__ == "__main__":
     
         # No input and the PRI option is set, check the PRI device file exists
         # and set the mdfilename to the PRI MD device file.
    -    elif len(args) is 0 and flags.pri:
    +    elif len(args) == 0 and flags.pri:
             mdfilename = MDPrintApp.DefaultPRIFilePath
             if not os.path.exists(mdfilename):
                 MDPrintApp.err("PRI option enabled, but the PRI device "
    @@ -794,7 +795,7 @@ if __name__ == "__main__":
                 sys.exit(1)
     
         # Input file provided with PRI option, this is an error
    -    elif len(args) is 1 and flags.pri:
    +    elif len(args) == 1 and flags.pri:
             mdfilename = args[0]
             MDPrintApp.err("Both an input MD file was provided (\"%s\") "
                 "and the PRI option was enabled. Use one or the other.\n" %
    @@ -803,7 +804,7 @@ if __name__ == "__main__":
             sys.exit(1)
     
         # Single input file, make sure it exists
    -    elif len(args) is 1:
    +    elif len(args) == 1:
             mdfilename = args[0]
             if not os.path.exists(mdfilename):
                 MDPrintApp.err("Input MD file \"%s\" could not "
    @@ -819,7 +820,7 @@ if __name__ == "__main__":
         try:
             if flags.pri:
                 pri_size = MDPrintApp.get_pri_size()
    -            if pri_size is -1:
    +            if pri_size == -1:
                     MDPrintApp.err("Couldn't read PRI size from \"%s\"\n" %
                         mdfilename)
                     option_parser.print_help()
    @@ -916,7 +917,7 @@ if __name__ == "__main__":
                     (md[flags.root].type, flags.root)
             if node_filter.grep:
                 header += "Limiting output to\n"
    -            for node in node_filter.grep.keys():
    +            for node in list(node_filter.grep.keys()):
                     if len(node_filter.grep[node]) == 0:
                         props = '*'
                     else:
    @@ -944,7 +945,7 @@ if __name__ == "__main__":
                 printer.print_subgraph(md, flags.root)
             else:
                 printer.print_md(md)
    -    except IOError, e:
    +    except IOError as e:
             if e.errno != errno.EPIPE:
                 raise