From 2e7f7b96e5f1ca788e3f4589afaaa705b20051c0 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 31 Jan 2024 19:54:13 +0100 Subject: Cygwin: implement setproctitle Make sure to create commandline according to setting of setproctitle. Signed-off-by: Corinna Vinschen --- winsup/cygwin/pinfo.cc | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'winsup/cygwin/pinfo.cc') diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 5fd11f5..7f1f41d 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -642,27 +642,24 @@ commune_process (void *arg) { sigproc_printf ("processing PICOM_CMDLINE"); unsigned n = 0; - const char *argv[__argc_safe + 1]; + int argc = __argv0_orig ? 1 : __argc_safe; + const char *argv[argc + 1]; - for (int i = 0; i < __argc_safe; i++) + for (int i = 0; i < argc; i++) { argv[i] = __argv[i] ?: ""; n += strlen (argv[i]) + 1; } - argv[__argc_safe] = NULL; + argv[argc] = NULL; if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L)) - { - /*__seterrno ();*/ // this is run from the signal thread, so don't set errno - sigproc_printf ("WritePipeOverlapped sizeof argv failed, %E"); - } - else - for (const char **a = argv; *a; a++) - if (!WritePipeOverlapped (tothem, *a, strlen (*a) + 1, &nr, 1000L)) - { - sigproc_printf ("WritePipeOverlapped arg %d failed, %E", - a - argv); - break; - } + sigproc_printf ("WritePipeOverlapped sizeof argv failed, %E"); + else for (int i = 0; i < argc; i++) + if (!WritePipeOverlapped (tothem, __argv[i], + strlen (__argv[i]) + 1, &nr, 1000L)) + { + sigproc_printf ("WritePipeOverlapped arg %d failed, %E", i); + break; + } break; } case PICOM_CWD: @@ -1162,12 +1159,14 @@ _pinfo::cmdline (size_t& n) else { n = 0; - for (char **a = __argv; *a; a++) - n += strlen (*a) + 1; + int argc = __argv0_orig ? 1 : __argc_safe; + + for (int i = 0; i < argc; ++i) + n += strlen (__argv[i]) + 1; char *p; p = s = (char *) cmalloc_abort (HEAP_COMMUNE, n); - for (char **a = __argv; *a; a++) - p = stpcpy (p, *a) + 1; + for (int i = 0; i < argc; ++i) + p = stpcpy (p, __argv[i]) + 1; } return s; } -- cgit v1.1