[kernel] Remove unnecessary string copy
This commit is contained in:
parent
b625ef0a38
commit
38d589d1e0
|
@ -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<const char*>(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<X_ANSI_STRING*>(record->name_ptr);
|
||||
std::string name =
|
||||
std::string_view name =
|
||||
name_string == nullptr
|
||||
? "(null)"
|
||||
: util::TranslateAnsiString(kernel_memory(), name_string);
|
||||
|
|
|
@ -614,8 +614,7 @@ dword_result_t NtOpenSymbolicLinkObject_entry(
|
|||
auto object_name =
|
||||
kernel_memory()->TranslateVirtual<X_ANSI_STRING*>(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)) {
|
||||
|
|
|
@ -144,10 +144,10 @@ DECLARE_XBOXKRNL_EXPORT1(ObDereferenceObject, kNone, kImplemented);
|
|||
|
||||
dword_result_t ObCreateSymbolicLink_entry(pointer_t<X_ANSI_STRING> path_ptr,
|
||||
pointer_t<X_ANSI_STRING> 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
|
||||
|
|
|
@ -172,7 +172,7 @@ void XObject::SetAttributes(uint32_t obj_attributes_ptr) {
|
|||
memory(), xe::load_and_swap<uint32_t>(
|
||||
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]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue