X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fproctitle.c;h=f605aef18b7b4b9f5aa3cd3fa29b02b0e9a81cce;hb=f0459952ab7a84b2a2e16ee38456087b0986a228;hp=e5f9bd4f5aca9d6e03fb600fd8c1fd84689e9b42;hpb=68aea40e09df6409198bcf423cd4acb9fffd0a88;p=libucw.git diff --git a/lib/proctitle.c b/lib/proctitle.c index e5f9bd4f..f605aef1 100644 --- a/lib/proctitle.c +++ b/lib/proctitle.c @@ -1,7 +1,10 @@ /* - * Sherlock Library -- Setting of Process Title + * UCW Library -- Setting of Process Title * - * (c) 2001 Martin Mares + * (c) 2001--2006 Martin Mares + * + * This software may be freely distributed and used according to the terms + * of the GNU Lesser General Public License. */ #include "lib/lib.h" @@ -11,40 +14,42 @@ #include #include +static char **spt_argv; static char *spt_start, *spt_end; void setproctitle_init(int argc, char **argv) { -#ifdef linux -#if 0 /* FIXME: This doesn't work. Why? */ - uns i, len; - char **env, *t; +#ifdef CONFIG_LINUX + int i, len; + char **env, **oldenv, *t; + + spt_argv = argv; /* Create a backup copy of environment */ + oldenv = __environ; len = 0; - for (i=0; __environ[i]; i++) - len += strlen(__environ[i]) + 1; - env = xmalloc(sizeof(char *)*(i+1)); + for (i=0; oldenv[i]; i++) + len += strlen(oldenv[i]) + 1; + __environ = env = xmalloc(sizeof(char *)*(i+1)); t = xmalloc(len); - spt_end = __environ[0]; - for (i=0; __environ[i]; i++) + for (i=0; oldenv[i]; i++) { env[i] = t; - len = strlen(__environ[i]) + 1; - memcpy(t, __environ[i], len); + len = strlen(oldenv[i]) + 1; + memcpy(t, oldenv[i], len); t += len; - spt_end = MAX(spt_end, __environ[i] + len); } env[i] = NULL; - __environ[0] = NULL; - spt_start = (byte *)(__environ+1); - __environ = env; - argv[0] = spt_start; -#else - spt_start = argv[0]; - spt_end = argv[argc-1] + strlen(argv[argc-1]) - 1; -#endif + + /* Scan for consecutive free space */ + spt_start = spt_end = argv[0]; + for (i=0; i