X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fproctitle.c;h=ef985a2753319c9d72bdb3e66b267b8b65adfaed;hb=8ffdaed1c5f5bf4ad0914b8d17f14af51ce037a5;hp=e5f9bd4f5aca9d6e03fb600fd8c1fd84689e9b42;hpb=68aea40e09df6409198bcf423cd4acb9fffd0a88;p=libucw.git diff --git a/lib/proctitle.c b/lib/proctitle.c index e5f9bd4f..ef985a27 100644 --- a/lib/proctitle.c +++ b/lib/proctitle.c @@ -11,40 +11,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