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