all repos — mgba @ 70f581162fe47d260fcf5946858054328188b808

mGBA Game Boy Advance Emulator

src/platform/psp2/perf.c (view raw)

 1/* Copyright (c) 2013-2020 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#include <mgba-util/socket.h>
 7
 8#include <psp2/appmgr.h>
 9#include <psp2/kernel/processmgr.h>
10#include <psp2/kernel/threadmgr.h>
11
12#define MAX_ARGS 19
13
14
15void connectServer(char* args[]) {
16	Socket server = SocketOpenTCP(7215, NULL);
17	if (SOCKET_FAILED(server)) {
18		return;
19	}
20	if (SOCKET_FAILED(SocketListen(server, 0))) {
21		SocketClose(server);
22		return;
23	}
24	Socket conn = SocketAccept(server, NULL);
25	if (SOCKET_FAILED(conn)) {
26		SocketClose(server);
27		return;
28	}
29
30	int i = 0;
31	ssize_t len;
32	char arg[1024];
33	while (i < MAX_ARGS && (len = SocketRecv(conn, arg, sizeof(arg) - 1)) > 0) {
34		arg[len] = '\0';
35		char* tok;
36		for (tok = strtok(arg, "\n"); tok && i < MAX_ARGS; ++i) {
37			args[i] = strdup(tok);
38			tok = strtok(NULL, "\n");
39		}
40		if (arg[len - 1] == '\n') {
41			return;
42		}
43	}
44
45	SocketClose(conn);
46	SocketClose(server);
47}
48
49int main() {
50	char* args[MAX_ARGS + 1] = { 0 };
51	SocketSubsystemInit();
52	connectServer(args);
53	SocketSubsystemDeinit();
54	sceAppMgrLoadExec("app0:/perf.bin", args, NULL);
55	sceKernelExitProcess(0);
56	return 0;
57}