[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/10] Add support for passing contents of argv0
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH 06/10] Add support for passing contents of argv0 |
Date: |
Wed, 15 Apr 2009 18:13:40 +0200 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
On Sun, Apr 05, 2009 at 11:59:22PM +0300, address@hidden wrote:
> From: Riku Voipio <address@hidden>
>
> Added switch -0 (zero) which can be used to pass argv[0] to
> target process. The main use is for a binfmt_misc wrapper when
> the "P - preserve-argv[0]" setting is used.
>
> From: Mika Westerberg
>
> Signed-off-by: Riku Voipio <address@hidden>
> ---
> linux-user/main.c | 38 +++++++++++++++++++++++++++++++++++++-
> 1 files changed, 37 insertions(+), 1 deletions(-)
Thanks, applied.
> diff --git a/linux-user/main.c b/linux-user/main.c
> index feb3036..40308aa 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -2213,6 +2213,7 @@ static void usage(void)
> "-drop-ld-preload drop LD_PRELOAD for target process\n"
> "-E var=value sets/modifies targets environment
> variable(s)\n"
> "-U var unsets targets environment variable(s)\n"
> + "-0 argv0 forces target process argv[0] to be argv0\n"
> "\n"
> "Debug options:\n"
> "-d options activate log (logfile=%s)\n"
> @@ -2263,7 +2264,11 @@ int main(int argc, char **argv, char **envp)
> const char *r;
> int gdbstub_port = 0;
> char **target_environ, **wrk;
> + char **target_argv;
> + int target_argc;
> envlist_t *envlist = NULL;
> + const char *argv0 = NULL;
> + int i;
>
> if (argc <= 1)
> usage();
> @@ -2320,6 +2325,9 @@ int main(int argc, char **argv, char **envp)
> r = argv[optind++];
> if (envlist_unsetenv(envlist, r) != 0)
> usage();
> + } else if (!strcmp(r, "0")) {
> + r = argv[optind++];
> + argv0 = r;
> } else if (!strcmp(r, "s")) {
> if (optind >= argc)
> break;
> @@ -2430,11 +2438,39 @@ int main(int argc, char **argv, char **envp)
> target_environ = envlist_to_environ(envlist, NULL);
> envlist_free(envlist);
>
> - if (loader_exec(filename, argv+optind, target_environ, regs, info) != 0)
> {
> + /*
> + * Prepare copy of argv vector for target.
> + */
> + target_argc = argc - optind;
> + target_argv = calloc(target_argc + 1, sizeof (char *));
> + if (target_argv == NULL) {
> + (void) fprintf(stderr, "Unable to allocate memory for target_argv\n");
> + exit(1);
> + }
> +
> + /*
> + * If argv0 is specified (using '-0' switch) we replace
> + * argv[0] pointer with the given one.
> + */
> + i = 0;
> + if (argv0 != NULL) {
> + target_argv[i++] = strdup(argv0);
> + }
> + for (; i < target_argc; i++) {
> + target_argv[i] = strdup(argv[optind + i]);
> + }
> + target_argv[target_argc] = NULL;
> +
> + if (loader_exec(filename, target_argv, target_environ, regs, info) != 0)
> {
> printf("Error loading %s\n", filename);
> _exit(1);
> }
>
> + for (i = 0; i < target_argc; i++) {
> + free(target_argv[i]);
> + }
> + free(target_argv);
> +
> for (wrk = target_environ; *wrk; wrk++) {
> free(*wrk);
> }
> --
> 1.6.2.1
>
>
>
>
--
Aurelien Jarno GPG: 1024D/F1BCDB73
address@hidden http://www.aurel32.net
- [Qemu-devel] [PATCH 00/10] misc userland patches [v2], riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 01/10] Fix fstatat64()/newfstatat() syscall implementation, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 02/10] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 06/10] Add support for passing contents of argv0, riku . voipio, 2009/04/05
- Re: [Qemu-devel] [PATCH 06/10] Add support for passing contents of argv0,
Aurelien Jarno <=
- [Qemu-devel] [PATCH 05/10] Added posix message queue syscalls except mq_notify, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 09/10] Prefer glibc over direct syscalls, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 10/10] linux-user: Proper exit code for uncaught signals, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 08/10] linux-user: removed unnecessary MAX_SOCK_ADDR checks for socket syscalls, riku . voipio, 2009/04/05
- [Qemu-devel] [PATCH 07/10] linux-user: unix sockets - fix running dbus, riku . voipio, 2009/04/05