X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fproctitle.c;h=111ab4b985400c79ae4fb62d07d5643c8431af63;hb=0d56b467cc2184f00a4e390f95596704d819dfa3;hp=e5f9bd4f5aca9d6e03fb600fd8c1fd84689e9b42;hpb=68aea40e09df6409198bcf423cd4acb9fffd0a88;p=libucw.git diff --git a/lib/proctitle.c b/lib/proctitle.c index e5f9bd4f..111ab4b9 100644 --- a/lib/proctitle.c +++ b/lib/proctitle.c @@ -2,6 +2,9 @@ * Sherlock Library -- Setting of Process Title * * (c) 2001 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; + 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