2323#include < uv.h>
2424
2525#include " core/debug.h"
26+ #include " core/misc.h"
2627#include " core/psxemulator.h"
2728#include " core/psxmem.h"
2829#include " core/r3000a.h"
@@ -184,21 +185,6 @@ void PCSX::GdbClient::processData(const Slice& slice) {
184185 }
185186}
186187
187- static std::vector<std::string> split (const std::string& str, const std::string& delim) {
188- std::vector<std::string> tokens;
189- size_t prev = 0 , pos = 0 ;
190- do {
191- pos = str.find (delim, prev);
192- if (pos == std::string::npos) pos = str.length ();
193- std::string token = str.substr (prev, pos - prev);
194- if (!token.empty ()) tokens.push_back (token);
195- prev = pos + delim.length ();
196- } while (pos < str.length () && prev < str.length ());
197- return std::move (tokens);
198- }
199-
200- static bool startsWith (const std::string& s1, const std::string& s2) { return s1.rfind (s2, 0 ) == 0 ; }
201-
202188static std::pair<uint32_t , bool > parseHexNumber (const char * str) {
203189 uint64_t value = 0 ;
204190 char c;
@@ -322,7 +308,7 @@ static const std::string targetXML = R"(<?xml version="1.0"?>
322308)" ;
323309
324310std::pair<uint64_t , uint64_t > PCSX::GdbClient::parseCursor (const std::string& cursorStr) {
325- auto cursorStrs = split (cursorStr, " ," );
311+ auto cursorStrs = Misc:: split (cursorStr, " ," );
326312 uint64_t off = 0 ;
327313 uint64_t len = 0 ;
328314 if (cursorStrs.size () == 2 ) {
@@ -436,7 +422,7 @@ void PCSX::GdbClient::processCommand() {
436422 m_waitingForTrap = true ;
437423 } else if (m_cmd[0 ] == ' M' ) {
438424 // write memory
439- auto elements = split (m_cmd, " :" );
425+ auto elements = Misc:: split (m_cmd, " :" );
440426 auto [off, len] = parseCursor (elements[0 ].substr (1 ));
441427 size_t i = 0 ;
442428 while (len--) {
@@ -480,7 +466,7 @@ void PCSX::GdbClient::processCommand() {
480466 write (" " );
481467 return ;
482468 }
483- auto breakpointData = split (m_cmd.substr (1 ), " ," );
469+ auto breakpointData = Misc:: split (m_cmd.substr (1 ), " ," );
484470 if (breakpointData.size () != 3 ) {
485471 // wrong number of arguments
486472 write (" " );
@@ -540,22 +526,22 @@ void PCSX::GdbClient::processCommand() {
540526 write (" OK" );
541527 } else if (m_cmd == " Hg0" ) {
542528 write (" OK" );
543- } else if (startsWith (m_cmd, " vKill;" )) {
529+ } else if (Misc:: startsWith (m_cmd, " vKill;" )) {
544530 write (" OK" );
545- } else if (startsWith (m_cmd, qSupported)) {
531+ } else if (Misc:: startsWith (m_cmd, qSupported)) {
546532 // do we care about any features gdb supports?
547533 // auto elements = split(m_cmd.substr(qSupported.length()), ";");
548534 write (" PacketSize=4000;qXfer:features:read+;qXfer:threads:read+;QStartNoAckMode+" );
549- } else if (startsWith (m_cmd, " QStartNoAckMode" )) {
535+ } else if (Misc:: startsWith (m_cmd, " QStartNoAckMode" )) {
550536 m_ackEnabled = false ;
551537 write (" OK" );
552- } else if (startsWith (m_cmd, qSymbol)) {
538+ } else if (Misc:: startsWith (m_cmd, qSymbol)) {
553539 // It looks like extended-remote doesn't even offer to give us the
554540 // location of the start address...? Why? That's a terrible design.
555541 // We'll have to basically rely on our wits and monitor commands
556542 // tricks to get us to load an arbitrary file properly. We'll only
557543 // make this work if the symbols _start or _reset are defined.
558- auto elements = split (m_cmd.substr (qSymbol.length ()), " :" );
544+ auto elements = Misc:: split (m_cmd.substr (qSymbol.length ()), " :" );
559545 switch (m_qsymbolState) {
560546 case QSYMBOL_IDLE :
561547 // gdb is offering symbols. Let's start by trying _start's location.
@@ -586,7 +572,7 @@ void PCSX::GdbClient::processCommand() {
586572 write (" OK" );
587573 break ;
588574 }
589- } else if (startsWith (m_cmd, " qRcmd," )) {
575+ } else if (Misc:: startsWith (m_cmd, " qRcmd," )) {
590576 // this is the "monitor" command
591577 size_t len = m_cmd.length () - 6 ;
592578 std::string monitor;
@@ -598,11 +584,11 @@ void PCSX::GdbClient::processCommand() {
598584 monitor += c;
599585 }
600586 processMonitorCommand (monitor);
601- } else if (startsWith (m_cmd, qXferMemMap)) {
587+ } else if (Misc:: startsWith (m_cmd, qXferMemMap)) {
602588 writePaged (memoryMap, m_cmd.substr (qXferMemMap.length ()));
603- } else if (startsWith (m_cmd, qXferFeatures)) {
589+ } else if (Misc:: startsWith (m_cmd, qXferFeatures)) {
604590 writePaged (targetXML, m_cmd.substr (qXferFeatures.length ()));
605- } else if (startsWith (m_cmd, qXferThreads)) {
591+ } else if (Misc:: startsWith (m_cmd, qXferThreads)) {
606592 writePaged (" <?xml version=\" 1.0\" ?><threads></threads>" , m_cmd.substr (qXferThreads.length ()));
607593 } else {
608594 g_system->printf (" Unknown GDB command: %s\n " , m_cmd.c_str ());
@@ -619,10 +605,10 @@ void PCSX::GdbClient::processMonitorCommand(const std::string& cmd) {
619605 writeEscaped (" " );
620606 m_sentBanner = true ;
621607 }
622- if (startsWith (cmd, " reset" )) {
608+ if (Misc:: startsWith (cmd, " reset" )) {
623609 g_emulator->m_psxCpu ->psxReset ();
624610 writeEscaped (" Emulation reset\n " );
625- auto words = split (cmd, " " );
611+ auto words = Misc:: split (cmd, " " );
626612 if (words.size () == 2 ) {
627613 if (words[1 ] == " halt" ) {
628614 writeEscaped (" Emulation paused\n " );
0 commit comments