StreamGDBRemote.cpp revision 263363
1//===-- StreamGDBRemote.cpp -------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Core/StreamGDBRemote.h"
11#include <stdio.h>
12
13using namespace lldb;
14using namespace lldb_private;
15
16StreamGDBRemote::StreamGDBRemote () :
17StreamString ()
18{
19}
20
21StreamGDBRemote::StreamGDBRemote(uint32_t flags, uint32_t addr_size, ByteOrder byte_order) :
22StreamString (flags, addr_size, byte_order)
23{
24}
25
26StreamGDBRemote::~StreamGDBRemote()
27{
28}
29
30
31int
32StreamGDBRemote::PutEscapedBytes (const void* s,
33                                  size_t src_len)
34{
35    int bytes_written = 0;
36    const uint8_t *src = (const uint8_t *)s;
37    bool binary_is_set = m_flags.Test(eBinary);
38    m_flags.Clear(eBinary);
39    while (src_len)
40    {
41        uint8_t byte = *src;
42        src++; src_len--;
43        if (byte == 0x23 || byte == 0x24 || byte == 0x7d || byte == 0x2a)
44        {
45            bytes_written += PutChar(0x7d);
46            byte ^= 0x20;
47        }
48        bytes_written += PutChar(byte);
49    };
50    if (binary_is_set)
51        m_flags.Set(eBinary);
52    return bytes_written;
53}
54
55