X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=ginge.git;a=blobdiff_plain;f=loader%2Foverride.c;h=3d0d0cc350216e53a882102087c23e0a1ba81906;hp=5a722d932e0f65740b60f1a6e8da1abf8726915b;hb=f2a1fca9e81b773927c0b28dffaa6e2ee8a5956a;hpb=c3831532675b527bd34ee92377b1b6d323345cb1 diff --git a/loader/override.c b/loader/override.c index 5a722d9..3d0d0cc 100644 --- a/loader/override.c +++ b/loader/override.c @@ -41,6 +41,8 @@ static const struct dev_fd_t takeover_devs[] = { { "/dev/mmuhack", FAKEDEV_MMUHACK }, { "/dev/tty", FAKEDEV_TTY0 }, { "/dev/tty0", FAKEDEV_TTY0 }, + { "/dev/touchscreen/wm97xx", FAKEDEV_WM97XX }, + { "/etc/pointercal", FAKEDEV_WM97XX_P }, #ifdef PND { "/dev/input/event*", -1 }, // hide for now, may cause dupe events #endif @@ -137,12 +139,12 @@ long w_read_raw(int fd, void *buf, size_t count) { long ret; - if (fd == FAKEDEV_GPIO) - ret = emu_read_gpiodev(buf, count); + if (FAKEDEV_MEM <= fd && fd < FAKEDEV_FD_BOUNDARY) + ret = emu_do_read(fd, buf, count); else ret = g_read_raw(fd, buf, count); - //strace("read(%d, %p, %ld) = %ld\n", fd, buf, count, ret); + //strace("read(%d, %p, %zd) = %ld\n", fd, buf, count, ret); return ret; } @@ -251,15 +253,20 @@ static UNUSED int w_execvp(const char *file, char *const argv[]) return emu_do_execve(file, argv, environ); } -// static note: this can't safely return because of the way it's patched in -// static note2: can't be used, execve hangs? -static UNUSED int w_execve(const char *filename, char *const argv[], - char *const envp[]) +long w_execve_raw(const char *filename, char * const argv[], + char * const envp[]) { strace("execve(%s, %p, %p) = ?\n", filename, argv, envp); return emu_do_execve(filename, argv, envp); } +static UNUSED int w_execve(const char *filename, char * const argv[], + char * const envp[]) +{ + long ret = w_execve_raw(filename, argv, envp); + return g_syscall_error(ret); +} + static int w_chdir(const char *path) { long ret; @@ -277,6 +284,7 @@ static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz) { long ret; +#ifndef DL if (path != NULL && strncmp(path, "/proc/", 6) == 0 && strcmp(strrchr(path, '/'), "/exe") == 0) { @@ -285,6 +293,7 @@ static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz) ret = bufsiz; } else +#endif ret = g_readlink_raw(path, buf, bufsiz); strace("readlink(%s, %s, %zd) = %ld\n", path, buf, bufsiz, ret); @@ -338,7 +347,7 @@ MAKE_WRAP_SYM_N(execlp); MAKE_WRAP_SYM_N(execle); MAKE_WRAP_SYM_N(execv); MAKE_WRAP_SYM_N(execvp); -MAKE_WRAP_SYM(execve); +MAKE_WRAP_SYM_N(execve); MAKE_WRAP_SYM_N(chdir); MAKE_WRAP_SYM_N(readlink); typeof(mmap) mmap2 __attribute__((alias("w_mmap"))); @@ -361,7 +370,7 @@ static const struct { REAL_FUNC_NP(tcsetattr), REAL_FUNC_NP(system), // exec* - skipped - REAL_FUNC_NP(execve), + //REAL_FUNC_NP(execve), //REAL_FUNC_NP(chdir), }; @@ -375,7 +384,7 @@ static const struct { #define tcgetattr p_real_tcgetattr #define tcsetattr p_real_tcsetattr #define system p_real_system -#define execve p_real_execve +//#define execve p_real_execve //#define chdir p_real_chdir #undef MAKE_WRAP_SYM @@ -458,7 +467,8 @@ int real_system(const char *command) int real_execve(const char *filename, char *const argv[], char *const envp[]) { - return execve(filename, argv, envp); + long ret = g_execve_raw(filename, argv, envp); + return g_syscall_error(ret); } int real_chdir(const char *path)