notaz.gp2x.de
/
ginge.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tune audio parameters, allow to override
[ginge.git]
/
loader
/
override.c
diff --git
a/loader/override.c
b/loader/override.c
index
5a722d9
..
5927bc2
100644
(file)
--- a/
loader/override.c
+++ b/
loader/override.c
@@
-39,14
+39,17
@@
static const struct dev_fd_t takeover_devs[] = {
{ "/dev/fb1", FAKEDEV_FB1 },
{ "/dev/fb/1", FAKEDEV_FB1 },
{ "/dev/mmuhack", FAKEDEV_MMUHACK },
{ "/dev/fb1", FAKEDEV_FB1 },
{ "/dev/fb/1", FAKEDEV_FB1 },
{ "/dev/mmuhack", FAKEDEV_MMUHACK },
- { "/dev/tty", FAKEDEV_TTY
0
},
+ { "/dev/tty", FAKEDEV_TTY },
{ "/dev/tty0", FAKEDEV_TTY0 },
{ "/dev/tty0", FAKEDEV_TTY0 },
+ { "/dev/touchscreen/wm97xx", FAKEDEV_WM97XX },
+ { "/etc/pointercal", FAKEDEV_WM97XX_P },
+ { "/dev/input/mice", -ENODEV },
#ifdef PND
#ifdef PND
- { "/dev/input/event*", -
1
}, // hide for now, may cause dupe events
+ { "/dev/input/event*", -
ENODEV
}, // hide for now, may cause dupe events
#endif
};
#endif
};
-
static
long w_open_raw(const char *pathname, int flags, mode_t mode)
+long w_open_raw(const char *pathname, int flags, mode_t mode)
{
long ret;
int i;
{
long ret;
int i;
@@
-68,8
+71,11
@@
static long w_open_raw(const char *pathname, int flags, mode_t mode)
}
}
}
}
- if (i == ARRAY_SIZE(takeover_devs))
- ret = g_open_raw(pathname, flags, mode);
+ if (i == ARRAY_SIZE(takeover_devs)) {
+ const char *w_path = emu_wrap_path(pathname);
+ ret = g_open_raw(w_path, flags, mode);
+ emu_wrap_path_free(w_path, pathname);
+ }
if (ret >= 0) {
for (i = 0; emu_interesting_fds[i].name != NULL; i++) {
if (ret >= 0) {
for (i = 0; emu_interesting_fds[i].name != NULL; i++) {
@@
-137,12
+143,12
@@
long w_read_raw(int fd, void *buf, size_t count)
{
long ret;
{
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);
else
ret = g_read_raw(fd, buf, count);
- //strace("read(%d, %p, %
l
d) = %ld\n", fd, buf, count, ret);
+ //strace("read(%d, %p, %
z
d) = %ld\n", fd, buf, count, ret);
return ret;
}
return ret;
}
@@
-251,15
+257,20
@@
static UNUSED int w_execvp(const char *file, char *const argv[])
return emu_do_execve(file, argv, environ);
}
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);
}
{
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;
static int w_chdir(const char *path)
{
long ret;
@@
-277,6
+288,7
@@
static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz)
{
long ret;
{
long ret;
+#ifndef DL
if (path != NULL && strncmp(path, "/proc/", 6) == 0
&& strcmp(strrchr(path, '/'), "/exe") == 0)
{
if (path != NULL && strncmp(path, "/proc/", 6) == 0
&& strcmp(strrchr(path, '/'), "/exe") == 0)
{
@@
-285,6
+297,7
@@
static ssize_t w_readlink(const char *path, char *buf, size_t bufsiz)
ret = bufsiz;
}
else
ret = bufsiz;
}
else
+#endif
ret = g_readlink_raw(path, buf, bufsiz);
strace("readlink(%s, %s, %zd) = %ld\n", path, buf, bufsiz, ret);
ret = g_readlink_raw(path, buf, bufsiz);
strace("readlink(%s, %s, %zd) = %ld\n", path, buf, bufsiz, ret);
@@
-338,7
+351,7
@@
MAKE_WRAP_SYM_N(execlp);
MAKE_WRAP_SYM_N(execle);
MAKE_WRAP_SYM_N(execv);
MAKE_WRAP_SYM_N(execvp);
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")));
MAKE_WRAP_SYM_N(chdir);
MAKE_WRAP_SYM_N(readlink);
typeof(mmap) mmap2 __attribute__((alias("w_mmap")));
@@
-361,7
+374,7
@@
static const struct {
REAL_FUNC_NP(tcsetattr),
REAL_FUNC_NP(system),
// exec* - skipped
REAL_FUNC_NP(tcsetattr),
REAL_FUNC_NP(system),
// exec* - skipped
- REAL_FUNC_NP(execve),
+
//
REAL_FUNC_NP(execve),
//REAL_FUNC_NP(chdir),
};
//REAL_FUNC_NP(chdir),
};
@@
-375,7
+388,7
@@
static const struct {
#define tcgetattr p_real_tcgetattr
#define tcsetattr p_real_tcsetattr
#define system p_real_system
#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
//#define chdir p_real_chdir
#undef MAKE_WRAP_SYM
@@
-458,7
+471,8
@@
int real_system(const char *command)
int real_execve(const char *filename, char *const argv[],
char *const envp[])
{
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)
}
int real_chdir(const char *path)