2 * Sherlock Library -- Setting of Process Title
4 * (c) 2001 Martin Mares <mj@ucw.cz>
14 static char **spt_argv;
15 static char *spt_start, *spt_end;
18 setproctitle_init(int argc, char **argv)
22 char **env, **oldenv, *t;
26 /* Create a backup copy of environment */
29 for (i=0; oldenv[i]; i++)
30 len += strlen(oldenv[i]) + 1;
31 __environ = env = xmalloc(sizeof(char *)*(i+1));
33 for (i=0; oldenv[i]; i++)
36 len = strlen(oldenv[i]) + 1;
37 memcpy(t, oldenv[i], len);
42 /* Scan for consecutive free space */
43 spt_start = spt_end = argv[0];
44 for (i=0; i<argc; i++)
45 if (!i || spt_end+1 == argv[i])
46 spt_end = argv[i] + strlen(argv[i]);
47 for (i=0; oldenv[i]; i++)
48 if (spt_end+1 == oldenv[i])
49 spt_end = oldenv[i] + strlen(oldenv[i]);
54 setproctitle(char *msg, ...)
61 if (spt_end > spt_start)
63 n = vsnprintf(buf, sizeof(buf), msg, args);
64 if (n >= (int) sizeof(buf) || n < 0)
65 sprintf(buf, "<too-long>");
66 n = spt_end - spt_start;
67 strncpy(spt_start, buf, n);
69 spt_argv[0] = spt_start;