Skip to content

Commit aee4da6

Browse files
committed
Convert Vec<c_char> to Vec<u8> when printing
1 parent b786182 commit aee4da6

1 file changed

Lines changed: 5 additions & 4 deletions

File tree

cpp2rust/converter/converter.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ bool Converter::GetFmtArg(clang::Expr *arg, std::string &fmt,
13791379
} else if (arg_str.contains("Setw")) {
13801380
fmt_width = Trim(ToString(arg));
13811381
} else if (!arg->getType()->isCharType() &&
1382-
Mapper::Map(arg->getType()) != "Vec<u8>") {
1382+
Mapper::Map(arg->getType()) != "Vec<::core::ffi::c_char>") {
13831383
fmt += ("{:" + fmt_width + fmt_trait + "}");
13841384
fmt_width.clear(); // Reset setw after first usage
13851385
arg_str = ToString(arg);
@@ -1395,11 +1395,12 @@ bool Converter::GetFmtArg(clang::Expr *arg, std::string &fmt,
13951395

13961396
bool Converter::GetRawArg(clang::Expr *arg, std::string &raw_args) {
13971397
if (arg->getType()->isCharType()) {
1398-
raw_args += "(&[" + ToString(arg) + ']';
1399-
} else if (Mapper::Map(arg->getType()) == "Vec<u8>") {
1398+
raw_args += "(&[" + ToString(arg) + " as u8]";
1399+
} else if (Mapper::Map(arg->getType()) == "Vec<::core::ffi::c_char>") {
14001400
PushExprKind push(*this, ExprKind::RValue);
14011401
std::string str = ToString(arg);
1402-
raw_args += "(&(" + str + ")[..(" + str + ").len() - 1]";
1402+
raw_args += "(&(" + str + ").iter().take((" + str +
1403+
").len() - 1).map(|&c| c as u8).collect::<Vec<u8>>()[..]";
14031404
} else if (Mapper::ToString(arg).contains("std::endl")) {
14041405
raw_args += "(&[b'\\n']";
14051406
} else if (clang::isa<clang::StringLiteral>(arg->IgnoreImplicit())) {

0 commit comments

Comments
 (0)