[Lldb-commits] [PATCH] D15162: Have result formatter send bytes instead of strings

Todd Fiala via lldb-commits lldb-commits at lists.llvm.org
Wed Dec 2 14:57:10 PST 2015


Lgtm

-Todd

> On Dec 2, 2015, at 2:28 PM, Zachary Turner <zturner at google.com> wrote:
> 
> zturner created this revision.
> zturner added a reviewer: tfiala.
> zturner added a subscriber: lldb-commits.
> 
> http://reviews.llvm.org/D15162
> 
> Files:
>  packages/Python/lldbsuite/test/dotest_channels.py
>  packages/Python/lldbsuite/test/test_results.py
> 
> Index: packages/Python/lldbsuite/test/test_results.py
> ===================================================================
> --- packages/Python/lldbsuite/test/test_results.py
> +++ packages/Python/lldbsuite/test/test_results.py
> @@ -1027,10 +1027,11 @@
>         # Tack on the pid.
>         test_event["pid"] = self.pid
> 
> -        # Send it as {serialized_length_of_serialized_bytes}#{serialized_bytes}
> -        pickled_message = cPickle.dumps(test_event)
> -        self.out_file.send("{}#".format(len(pickled_message)))
> -        self.out_file.send(pickled_message)
> +        # Send it as {serialized_length_of_serialized_bytes}{serialized_bytes}
> +        import struct
> +        msg = cPickle.dumps(test_event)
> +        packet = struct.pack("!I%ds" % len(msg), len(msg), msg)
> +        self.out_file.send(packet)
> 
> 
> class DumpFormatter(ResultsFormatter):
> Index: packages/Python/lldbsuite/test/dotest_channels.py
> ===================================================================
> --- packages/Python/lldbsuite/test/dotest_channels.py
> +++ packages/Python/lldbsuite/test/dotest_channels.py
> @@ -44,7 +44,7 @@
>     def __init__(self, file_object, async_map, forwarding_func):
>         asyncore.dispatcher.__init__(self, sock=file_object, map=async_map)
> 
> -        self.header_contents = ''
> +        self.header_contents = b""
>         self.packet_bytes_remaining = 0
>         self.reading_header = True
>         self.ibuffer = b''
> @@ -69,17 +69,21 @@
>         if not data or (len(data) == 0):
>             return None
> 
> -        for index in range(len(data)):
> -            byte = data[index]
> -            if byte != '#':
> -                # Header byte.
> -                self.header_contents += byte
> -            else:
> -                # End of header.
> -                self.packet_bytes_remaining = int(self.header_contents)
> -                self.header_contents = ''
> -                self.reading_header = False
> -                return data[(index+1):]
> +        full_header_len = 4
> +
> +        assert(len(self.header_contents) < full_header_len)
> +
> +        bytes_avail = len(data)
> +        bytes_needed = full_header_len - len(self.header_contents)
> +        header_bytes_avail = min(bytes_needed, bytes_avail)
> +        self.header_contents += data[:header_bytes_avail]
> +        if len(self.header_contents) == full_header_len:
> +            import struct
> +            # End of header.
> +            self.packet_bytes_remaining = struct.unpack("!I", self.header_contents)[0]
> +            self.header_contents = b""
> +            self.reading_header = False
> +            return data[header_bytes_avail:]
> 
>         # If we made it here, we've exhausted the data and
>         # we're still parsing header content.
> 
> 
> <D15162.41678.patch>


More information about the lldb-commits mailing list