Cygwin: implement setproctitle
Make sure to create commandline according to setting of setproctitle. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
61fd870296
commit
2e7f7b96e5
|
@ -209,6 +209,14 @@ int setpgid (pid_t __pid, pid_t __pgid);
|
||||||
#if __SVID_VISIBLE || __XSI_VISIBLE >= 500
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 500
|
||||||
int setpgrp (void);
|
int setpgrp (void);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__CYGWIN__) && __BSD_VISIBLE
|
||||||
|
/* Stub for Linux libbsd compatibility. */
|
||||||
|
#define initsetproctitle(c, a, e) setproctitle_init((c), (a), (e))
|
||||||
|
static inline void setproctitle_init (int, char *[], char *[]) {}
|
||||||
|
|
||||||
|
void setproctitle (const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 1, 2)));
|
||||||
|
#endif
|
||||||
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||||
int setregid (gid_t __rgid, gid_t __egid);
|
int setregid (gid_t __rgid, gid_t __egid);
|
||||||
int setreuid (uid_t __ruid, uid_t __euid);
|
int setreuid (uid_t __ruid, uid_t __euid);
|
||||||
|
|
|
@ -1353,6 +1353,7 @@ setpassent NOSIGFE
|
||||||
setpgid SIGFE
|
setpgid SIGFE
|
||||||
setpgrp SIGFE
|
setpgrp SIGFE
|
||||||
setpriority SIGFE
|
setpriority SIGFE
|
||||||
|
setproctitle SIGFE
|
||||||
setprogname NOSIGFE
|
setprogname NOSIGFE
|
||||||
setprotoent = cygwin_setprotoent SIGFE
|
setprotoent = cygwin_setprotoent SIGFE
|
||||||
setpwent NOSIGFE
|
setpwent NOSIGFE
|
||||||
|
|
|
@ -83,6 +83,8 @@ int NO_COPY __isthreaded = 0;
|
||||||
int __argc_safe;
|
int __argc_safe;
|
||||||
int __argc;
|
int __argc;
|
||||||
char **__argv;
|
char **__argv;
|
||||||
|
/* Set via setproctitle */
|
||||||
|
char *__argv0_orig;
|
||||||
|
|
||||||
_cygtls NO_COPY *_main_tls /* !globals.h */;
|
_cygtls NO_COPY *_main_tls /* !globals.h */;
|
||||||
|
|
||||||
|
|
|
@ -489,12 +489,13 @@ details. */
|
||||||
352: Implement dirent.d_reclen.
|
352: Implement dirent.d_reclen.
|
||||||
353: Implement fdclosedir.
|
353: Implement fdclosedir.
|
||||||
354: Implement posix_getdents.
|
354: Implement posix_getdents.
|
||||||
|
355: Implement setproctitle.
|
||||||
|
|
||||||
Note that we forgot to bump the api for ualarm, strtoll, strtoull,
|
Note that we forgot to bump the api for ualarm, strtoll, strtoull,
|
||||||
sigaltstack, sethostname. */
|
sigaltstack, sethostname. */
|
||||||
|
|
||||||
#define CYGWIN_VERSION_API_MAJOR 0
|
#define CYGWIN_VERSION_API_MAJOR 0
|
||||||
#define CYGWIN_VERSION_API_MINOR 354
|
#define CYGWIN_VERSION_API_MINOR 355
|
||||||
|
|
||||||
/* There is also a compatibity version number associated with the shared memory
|
/* There is also a compatibity version number associated with the shared memory
|
||||||
regions. It is incremented when incompatible changes are made to the shared
|
regions. It is incremented when incompatible changes are made to the shared
|
||||||
|
|
|
@ -257,6 +257,40 @@ setprogname (const char *newprogname)
|
||||||
__endtry
|
__endtry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
setproctitle (const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char buf[MAX_PATH]; /* Max len of a new proc title */
|
||||||
|
va_list ap;
|
||||||
|
int len;
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
|
if (__argv0_orig)
|
||||||
|
{
|
||||||
|
tmp = __argv[0];
|
||||||
|
__argv[0] = __argv0_orig;
|
||||||
|
__argv0_orig = NULL;
|
||||||
|
cfree (tmp);
|
||||||
|
}
|
||||||
|
if (fmt)
|
||||||
|
{
|
||||||
|
if (fmt[0] == '-') /* Skip program name prefix. */
|
||||||
|
{
|
||||||
|
fmt++;
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
else /* Print program name heading for grep. */
|
||||||
|
len = snprintf (buf, sizeof buf, "%s: ", getprogname ());
|
||||||
|
va_start (ap, fmt);
|
||||||
|
vsnprintf (buf + len, sizeof buf - len, fmt, ap);
|
||||||
|
va_end (ap);
|
||||||
|
|
||||||
|
tmp = (char *) cstrdup1 (buf);
|
||||||
|
__argv0_orig = __argv[0];
|
||||||
|
__argv[0] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void
|
extern "C" void
|
||||||
logwtmp (const char *line, const char *user, const char *host)
|
logwtmp (const char *line, const char *user, const char *host)
|
||||||
{
|
{
|
||||||
|
|
|
@ -642,27 +642,24 @@ commune_process (void *arg)
|
||||||
{
|
{
|
||||||
sigproc_printf ("processing PICOM_CMDLINE");
|
sigproc_printf ("processing PICOM_CMDLINE");
|
||||||
unsigned n = 0;
|
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] ?: "";
|
argv[i] = __argv[i] ?: "";
|
||||||
n += strlen (argv[i]) + 1;
|
n += strlen (argv[i]) + 1;
|
||||||
}
|
}
|
||||||
argv[__argc_safe] = NULL;
|
argv[argc] = NULL;
|
||||||
if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
|
if (!WritePipeOverlapped (tothem, &n, sizeof n, &nr, 1000L))
|
||||||
{
|
sigproc_printf ("WritePipeOverlapped sizeof argv failed, %E");
|
||||||
/*__seterrno ();*/ // this is run from the signal thread, so don't set errno
|
else for (int i = 0; i < argc; i++)
|
||||||
sigproc_printf ("WritePipeOverlapped sizeof argv failed, %E");
|
if (!WritePipeOverlapped (tothem, __argv[i],
|
||||||
}
|
strlen (__argv[i]) + 1, &nr, 1000L))
|
||||||
else
|
{
|
||||||
for (const char **a = argv; *a; a++)
|
sigproc_printf ("WritePipeOverlapped arg %d failed, %E", i);
|
||||||
if (!WritePipeOverlapped (tothem, *a, strlen (*a) + 1, &nr, 1000L))
|
break;
|
||||||
{
|
}
|
||||||
sigproc_printf ("WritePipeOverlapped arg %d failed, %E",
|
|
||||||
a - argv);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PICOM_CWD:
|
case PICOM_CWD:
|
||||||
|
@ -1162,12 +1159,14 @@ _pinfo::cmdline (size_t& n)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
n = 0;
|
n = 0;
|
||||||
for (char **a = __argv; *a; a++)
|
int argc = __argv0_orig ? 1 : __argc_safe;
|
||||||
n += strlen (*a) + 1;
|
|
||||||
|
for (int i = 0; i < argc; ++i)
|
||||||
|
n += strlen (__argv[i]) + 1;
|
||||||
char *p;
|
char *p;
|
||||||
p = s = (char *) cmalloc_abort (HEAP_COMMUNE, n);
|
p = s = (char *) cmalloc_abort (HEAP_COMMUNE, n);
|
||||||
for (char **a = __argv; *a; a++)
|
for (int i = 0; i < argc; ++i)
|
||||||
p = stpcpy (p, *a) + 1;
|
p = stpcpy (p, __argv[i]) + 1;
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ What's new:
|
||||||
|
|
||||||
- New API calls: fdclosedir, posix_getdents.
|
- New API calls: fdclosedir, posix_getdents.
|
||||||
|
|
||||||
|
- New API call: setproctitle.
|
||||||
|
|
||||||
|
|
||||||
What changed:
|
What changed:
|
||||||
-------------
|
-------------
|
||||||
|
|
Loading…
Reference in New Issue