diff --git a/src/xenia/kernel/util/shim_utils.h b/src/xenia/kernel/util/shim_utils.h index 0b6551615..579305a72 100644 --- a/src/xenia/kernel/util/shim_utils.h +++ b/src/xenia/kernel/util/shim_utils.h @@ -84,18 +84,18 @@ inline uint64_t get_arg_64(PPCContext* ppc_context, uint8_t index) { return SHIM_MEM_64(stack_address); } -inline std::string TranslateAnsiString(const Memory* memory, - const X_ANSI_STRING* ansi_string) { +inline std::string_view TranslateAnsiString(const Memory* memory, + const X_ANSI_STRING* ansi_string) { if (!ansi_string || !ansi_string->length) { return ""; } - return std::string( + return std::string_view( memory->TranslateVirtual(ansi_string->pointer), ansi_string->length); } -inline std::string TranslateAnsiStringAddress(const Memory* memory, - uint32_t guest_address) { +inline std::string_view TranslateAnsiStringAddress(const Memory* memory, + uint32_t guest_address) { if (!guest_address) { return ""; } @@ -440,7 +440,7 @@ inline void AppendParam(StringBuffer* string_buffer, if (record) { auto name_string = kernel_memory()->TranslateVirtual(record->name_ptr); - std::string name = + std::string_view name = name_string == nullptr ? "(null)" : util::TranslateAnsiString(kernel_memory(), name_string); diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_io.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_io.cc index 2e2022bc6..3e7a700ef 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_io.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_io.cc @@ -614,8 +614,7 @@ dword_result_t NtOpenSymbolicLinkObject_entry( auto object_name = kernel_memory()->TranslateVirtual(object_attrs->name_ptr); - std::string target_path = - util::TranslateAnsiString(kernel_memory(), object_name); + auto target_path = util::TranslateAnsiString(kernel_memory(), object_name); // Enforce that the path is ASCII. if (!IsValidPath(target_path, false)) { diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_ob.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_ob.cc index 1eec0e430..8ecc5b3c0 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_ob.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_ob.cc @@ -144,10 +144,10 @@ DECLARE_XBOXKRNL_EXPORT1(ObDereferenceObject, kNone, kImplemented); dword_result_t ObCreateSymbolicLink_entry(pointer_t path_ptr, pointer_t target_ptr) { - auto path = util::TranslateAnsiString(kernel_memory(), path_ptr); - auto target = util::TranslateAnsiString(kernel_memory(), target_ptr); - path = xe::utf8::canonicalize_guest_path(path); - target = xe::utf8::canonicalize_guest_path(target); + auto path = xe::utf8::canonicalize_guest_path( + util::TranslateAnsiString(kernel_memory(), path_ptr)); + auto target = xe::utf8::canonicalize_guest_path( + util::TranslateAnsiString(kernel_memory(), target_ptr)); if (xe::utf8::starts_with(path, u8"\\??\\")) { path = path.substr(4); // Strip the full qualifier diff --git a/src/xenia/kernel/xobject.cc b/src/xenia/kernel/xobject.cc index 20b85249b..bf189c2af 100644 --- a/src/xenia/kernel/xobject.cc +++ b/src/xenia/kernel/xobject.cc @@ -172,7 +172,7 @@ void XObject::SetAttributes(uint32_t obj_attributes_ptr) { memory(), xe::load_and_swap( memory()->TranslateVirtual(obj_attributes_ptr + 4))); if (!name.empty()) { - name_ = std::move(name); + name_ = std::string(name); kernel_state_->object_table()->AddNameMapping(name_, handles_[0]); } } diff --git a/src/xenia/kernel/xsymboliclink.cc b/src/xenia/kernel/xsymboliclink.cc index 0d0a2ad43..e282a8879 100644 --- a/src/xenia/kernel/xsymboliclink.cc +++ b/src/xenia/kernel/xsymboliclink.cc @@ -24,8 +24,8 @@ XSymbolicLink::~XSymbolicLink() {} void XSymbolicLink::Initialize(const std::string_view path, const std::string_view target) { - path_ = path; - target_ = target; + path_ = std::string(path); + target_ = std::string(target); // TODO(gibbed): kernel_state_->RegisterSymbolicLink(this); }