Core: Alter the kernel string functions to use std::string instead of const char*.

Most functions already operate on std::strings. This also removes the need to manually null terminate thread names.
This commit is contained in:
Lioncash 2014-08-17 23:03:22 -04:00
parent 68c81f28d9
commit 98fa3f7cba
16 changed files with 38 additions and 41 deletions

View file

@ -17,8 +17,8 @@ namespace Kernel {
class AddressArbiter : public Object { class AddressArbiter : public Object {
public: public:
const char* GetTypeName() const { return "Arbiter"; } std::string GetTypeName() const { return "Arbiter"; }
const char* GetName() const { return name.c_str(); } std::string GetName() const { return name; }
static Kernel::HandleType GetStaticHandleType() { return HandleType::AddressArbiter; } static Kernel::HandleType GetStaticHandleType() { return HandleType::AddressArbiter; }
Kernel::HandleType GetHandleType() const { return HandleType::AddressArbiter; } Kernel::HandleType GetHandleType() const { return HandleType::AddressArbiter; }

View file

@ -31,8 +31,8 @@ enum class FileCommand : u32 {
class Archive : public Object { class Archive : public Object {
public: public:
const char* GetTypeName() const { return "Archive"; } std::string GetTypeName() const { return "Archive"; }
const char* GetName() const { return name.c_str(); } std::string GetName() const { return name; }
static Kernel::HandleType GetStaticHandleType() { return HandleType::Archive; } static Kernel::HandleType GetStaticHandleType() { return HandleType::Archive; }
Kernel::HandleType GetHandleType() const { return HandleType::Archive; } Kernel::HandleType GetHandleType() const { return HandleType::Archive; }
@ -110,7 +110,7 @@ Result MountArchive(Archive* archive) {
return -1; return -1;
} }
g_archive_map[id_code] = archive->GetHandle(); g_archive_map[id_code] = archive->GetHandle();
INFO_LOG(KERNEL, "Mounted archive %s", archive->GetName()); INFO_LOG(KERNEL, "Mounted archive %s", archive->GetName().c_str());
return 0; return 0;
} }

View file

@ -16,8 +16,8 @@ namespace Kernel {
class Event : public Object { class Event : public Object {
public: public:
const char* GetTypeName() const { return "Event"; } std::string GetTypeName() const { return "Event"; }
const char* GetName() const { return name.c_str(); } std::string GetName() const { return name; }
static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Event; } static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Event; }
Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Event; } Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Event; }

View file

@ -71,8 +71,8 @@ void ObjectPool::List() {
for (int i = 0; i < MAX_COUNT; i++) { for (int i = 0; i < MAX_COUNT; i++) {
if (occupied[i]) { if (occupied[i]) {
if (pool[i]) { if (pool[i]) {
INFO_LOG(KERNEL, "KO %i: %s \"%s\"", i + HANDLE_OFFSET, pool[i]->GetTypeName(), INFO_LOG(KERNEL, "KO %i: %s \"%s\"", i + HANDLE_OFFSET, pool[i]->GetTypeName().c_str(),
pool[i]->GetName()); pool[i]->GetName().c_str());
} }
} }
} }

View file

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <string>
#include "common/common.h" #include "common/common.h"
typedef u32 Handle; typedef u32 Handle;
@ -33,7 +34,6 @@ enum class HandleType : u32 {
}; };
enum { enum {
MAX_NAME_LENGTH = 0x100,
DEFAULT_STACK_SIZE = 0x4000, DEFAULT_STACK_SIZE = 0x4000,
}; };
@ -45,8 +45,8 @@ class Object : NonCopyable {
public: public:
virtual ~Object() {} virtual ~Object() {}
Handle GetHandle() const { return handle; } Handle GetHandle() const { return handle; }
virtual const char* GetTypeName() const { return "[BAD KERNEL OBJECT TYPE]"; } virtual std::string GetTypeName() const { return "[BAD KERNEL OBJECT TYPE]"; }
virtual const char* GetName() const { return "[UNKNOWN KERNEL OBJECT]"; } virtual std::string GetName() const { return "[UNKNOWN KERNEL OBJECT]"; }
virtual Kernel::HandleType GetHandleType() const = 0; virtual Kernel::HandleType GetHandleType() const = 0;
/** /**

View file

@ -15,8 +15,8 @@ namespace Kernel {
class Mutex : public Object { class Mutex : public Object {
public: public:
const char* GetTypeName() const { return "Mutex"; } std::string GetTypeName() const { return "Mutex"; }
const char* GetName() const { return name.c_str(); } std::string GetName() const { return name; }
static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Mutex; } static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Mutex; }
Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Mutex; } Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Mutex; }

View file

@ -11,7 +11,7 @@ namespace Kernel {
class SharedMemory : public Object { class SharedMemory : public Object {
public: public:
const char* GetTypeName() const { return "SharedMemory"; } std::string GetTypeName() const { return "SharedMemory"; }
static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::SharedMemory; } static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::SharedMemory; }
Kernel::HandleType GetHandleType() const { return Kernel::HandleType::SharedMemory; } Kernel::HandleType GetHandleType() const { return Kernel::HandleType::SharedMemory; }

View file

@ -2,13 +2,12 @@
// Licensed under GPLv2 // Licensed under GPLv2
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <stdio.h>
#include <list>
#include <algorithm> #include <algorithm>
#include <vector> #include <cstdio>
#include <list>
#include <map> #include <map>
#include <string> #include <string>
#include <vector>
#include "common/common.h" #include "common/common.h"
#include "common/thread_queue_list.h" #include "common/thread_queue_list.h"
@ -25,8 +24,8 @@ namespace Kernel {
class Thread : public Kernel::Object { class Thread : public Kernel::Object {
public: public:
const char* GetName() const { return name; } std::string GetName() const { return name; }
const char* GetTypeName() const { return "Thread"; } std::string GetTypeName() const { return "Thread"; }
static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Thread; } static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Thread; }
Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Thread; } Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Thread; }
@ -71,7 +70,7 @@ public:
std::vector<Handle> waiting_threads; std::vector<Handle> waiting_threads;
char name[Kernel::MAX_NAME_LENGTH + 1]; std::string name;
}; };
// Lists all thread ids that aren't deleted/etc. // Lists all thread ids that aren't deleted/etc.
@ -336,9 +335,7 @@ Thread* CreateThread(Handle& handle, const char* name, u32 entry_point, s32 prio
thread->processor_id = processor_id; thread->processor_id = processor_id;
thread->wait_type = WAITTYPE_NONE; thread->wait_type = WAITTYPE_NONE;
thread->wait_handle = 0; thread->wait_handle = 0;
thread->name = name;
strncpy(thread->name, name, Kernel::MAX_NAME_LENGTH);
thread->name[Kernel::MAX_NAME_LENGTH] = '\0';
return thread; return thread;
} }

View file

@ -29,7 +29,7 @@ public:
* Gets the string port name used by CTROS for the service * Gets the string port name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "APT:U"; return "APT:U";
} }
}; };

View file

@ -23,7 +23,7 @@ public:
* Gets the string port name used by CTROS for the service * Gets the string port name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "fs:USER"; return "fs:USER";
} }
}; };

View file

@ -137,7 +137,7 @@ public:
* Gets the string port name used by CTROS for the service * Gets the string port name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "gsp::Gpu"; return "gsp::Gpu";
} }

View file

@ -25,7 +25,7 @@ public:
* Gets the string port name used by CTROS for the service * Gets the string port name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "hid:USER"; return "hid:USER";
} }

View file

@ -24,7 +24,7 @@ public:
* Gets the string port name used by CTROS for the service * Gets the string port name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "ndm:u"; return "ndm:u";
} }

View file

@ -39,8 +39,8 @@ class Interface : public Kernel::Object {
friend class Manager; friend class Manager;
public: public:
const char *GetName() const { return GetPortName(); } std::string GetName() const { return GetPortName(); }
const char *GetTypeName() const { return GetPortName(); } std::string GetTypeName() const { return GetPortName(); }
static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Service; } static Kernel::HandleType GetStaticHandleType() { return Kernel::HandleType::Service; }
Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Service; } Kernel::HandleType GetHandleType() const { return Kernel::HandleType::Service; }
@ -57,7 +57,7 @@ public:
* Gets the string name used by CTROS for a service * Gets the string name used by CTROS for a service
* @return Port name of service * @return Port name of service
*/ */
virtual const char *GetPortName() const { virtual std::string GetPortName() const {
return "[UNKNOWN SERVICE PORT]"; return "[UNKNOWN SERVICE PORT]";
} }
@ -86,7 +86,7 @@ public:
if (itr == m_functions.end()) { if (itr == m_functions.end()) {
ERROR_LOG(OSHLE, "unknown/unimplemented function: port=%s, command=0x%08X", ERROR_LOG(OSHLE, "unknown/unimplemented function: port=%s, command=0x%08X",
GetPortName(), cmd_buff[0]); GetPortName().c_str(), cmd_buff[0]);
// TODO(bunnei): Hack - ignore error // TODO(bunnei): Hack - ignore error
u32* cmd_buff = Service::GetCommandBuffer(); u32* cmd_buff = Service::GetCommandBuffer();
@ -95,7 +95,7 @@ public:
} }
if (itr->second.func == nullptr) { if (itr->second.func == nullptr) {
ERROR_LOG(OSHLE, "unimplemented function: port=%s, name=%s", ERROR_LOG(OSHLE, "unimplemented function: port=%s, name=%s",
GetPortName(), itr->second.name.c_str()); GetPortName().c_str(), itr->second.name.c_str());
// TODO(bunnei): Hack - ignore error // TODO(bunnei): Hack - ignore error
u32* cmd_buff = Service::GetCommandBuffer(); u32* cmd_buff = Service::GetCommandBuffer();

View file

@ -22,7 +22,7 @@ public:
* Gets the string name used by CTROS for the service * Gets the string name used by CTROS for the service
* @return Port name of service * @return Port name of service
*/ */
const char *GetPortName() const { std::string GetPortName() const {
return "srv:"; return "srv:";
} }

View file

@ -92,7 +92,7 @@ Result SendSyncRequest(Handle handle) {
Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle); Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle);
_assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!"); _assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!");
DEBUG_LOG(SVC, "called handle=0x%08X(%s)", handle, object->GetTypeName()); DEBUG_LOG(SVC, "called handle=0x%08X(%s)", handle, object->GetTypeName().c_str());
bool wait = false; bool wait = false;
Result res = object->SyncRequest(&wait); Result res = object->SyncRequest(&wait);
@ -118,8 +118,8 @@ Result WaitSynchronization1(Handle handle, s64 nano_seconds) {
Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle); Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle);
DEBUG_LOG(SVC, "called handle=0x%08X(%s:%s), nanoseconds=%d", handle, object->GetTypeName(), DEBUG_LOG(SVC, "called handle=0x%08X(%s:%s), nanoseconds=%d", handle, object->GetTypeName().c_str(),
object->GetName(), nano_seconds); object->GetName().c_str(), nano_seconds);
_assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!"); _assert_msg_(KERNEL, (object != nullptr), "called, but kernel object is nullptr!");
@ -152,8 +152,8 @@ Result WaitSynchronizationN(s32* out, Handle* handles, s32 handle_count, bool wa
_assert_msg_(KERNEL, (object != nullptr), "called handle=0x%08X, but kernel object " _assert_msg_(KERNEL, (object != nullptr), "called handle=0x%08X, but kernel object "
"is nullptr!", handles[i]); "is nullptr!", handles[i]);
DEBUG_LOG(SVC, "\thandle[%d] = 0x%08X(%s:%s)", i, handles[i], object->GetTypeName(), DEBUG_LOG(SVC, "\thandle[%d] = 0x%08X(%s:%s)", i, handles[i], object->GetTypeName().c_str(),
object->GetName()); object->GetName().c_str());
Result res = object->WaitSynchronization(&wait); Result res = object->WaitSynchronization(&wait);