summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-04-16 11:41:47 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-04-16 11:41:47 +0800
commit9c662e64f282249d07b08c7eaa99f8613a637934 (patch)
tree24b8ae89e559c719220acc6cb740e97b217aab24 /src/trans/codegen_c.cpp
parent3a1797867580bc17a63a49bdf340da1a3188c676 (diff)
downloadmrust-9c662e64f282249d07b08c7eaa99f8613a637934.tar.gz
Codegen C - Fix incorrect escaped values
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 165486ef..983bdfd4 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -193,6 +193,7 @@ namespace {
::std::stringstream cmd_ss;
for(const auto& arg : args)
{
+ // TODO: use a formatter specific to shell escaping
cmd_ss << "\"" << FmtEscaped(arg) << "\" ";
}
DEBUG("- " << cmd_ss.str());
@@ -1376,6 +1377,7 @@ namespace {
m_of << "\t__asm__ ";
if(is_volatile) m_of << "__volatile__";
// TODO: Convert format string?
+ // TODO: Use a C-specific escaper here.
m_of << "(\"" << (is_intel ? ".syntax intel; " : "") << FmtEscaped(e.tpl) << (is_intel ? ".syntax att; " : "") << "\"";
m_of << ": ";
for(unsigned int i = 0; i < e.outputs.size(); i ++ )
@@ -2718,7 +2720,7 @@ namespace {
if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' )
m_of << v;
else
- m_of << "\\" << (unsigned int)v;
+ m_of << "\\" << ((unsigned int)v & 0xFF);
}
m_of << "\"" << ::std::dec;
m_of << ";\n\t";
@@ -2924,7 +2926,7 @@ namespace {
if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' )
m_of << v;
else
- m_of << "\\" << (unsigned int)v;
+ m_of << "\\" << ((unsigned int)v & 0xFF);
}
m_of << "\"" << ::std::dec;
),
@@ -2934,7 +2936,7 @@ namespace {
if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' )
m_of << v;
else
- m_of << "\\" << (unsigned int)v;
+ m_of << "\\" << ((unsigned int)v & 0xFF);
}
m_of << "\", " << ::std::dec << c.size() << ")";
),