KInit
Go to the documentation of this file.
24 #include <config-kdeinit.h>
31 #define PF_ARGV_NONE 0
33 #define PF_ARGV_WRITEABLE 2
34 #define PF_ARGV_PSTAT 3
35 #define PF_ARGV_PSSTRINGS 4
37 #ifdef HAVE_SETPROCTITLE
38 # define PF_ARGV_TYPE PF_ARGV_NONE
39 # ifdef HAVE_SYS_TYPES_H
40 # include <sys/types.h>
48 # define PF_ARGV_TYPE PF_ARGV_NEW
50 # define PF_ARGV_TYPE PF_ARGV_WRITEABLE
52 # if defined(HAVE_SYS_PSTAT_H) && defined(HAVE_PSTAT)
53 # include <sys/pstat.h>
55 # define PF_ARGV_TYPE PF_ARGV_PSTAT
58 # ifdef HAVE_SYS_EXEC_H
59 # include <sys/exec.h>
61 # include <machine/vmparam.h>
63 # define PF_ARGV_TYPE PF_ARGV_PSSTRINGS
71 #ifdef HAVE___PROGNAME
72 extern char *__progname;
74 #ifdef HAVE___PROGNAME_FULL
75 extern char *__progname_full;
81 #if PF_ARGV_TYPE == PF_ARGV_WRITEABLE
90 register int i, envpsize;
94 for ( i = envpsize = 0; envp[i] != NULL; i++ ) {
95 envpsize += strlen(envp[i]) + 1;
98 if ((p = (
char **) malloc((i + 1) *
sizeof(
char *))) != NULL) {
101 for (i = 0; envp[i] != NULL; i++) {
102 if ((
environ[i] = static_cast<char *>(malloc(strlen(envp[i]) + 1))) != NULL) {
112 # if PF_ARGV_TYPE == PF_ARGV_WRITEABLE
113 for (i = 0; i < argc; i++) {
114 if (!i || (
LastArgv + 1 == argv[i])) {
115 LastArgv = argv[i] + strlen(argv[i]);
120 for (i = 0; envp[i] != NULL; i++) {
122 if (!strncmp(envp[i],
"XDG_", 4))
125 LastArgv = envp[i] + strlen(envp[i]);
130 # ifdef HAVE___PROGNAME
134 __progname = strdup(
"kdeinit4");
136 # ifdef HAVE___PROGNAME_FULL
138 __progname_full = strdup(argv[0]);
144 static char statbuf[BUFSIZ];
146 #ifndef HAVE_SETPROCTITLE
147 # if PF_ARGV_TYPE == PF_ARGV_PSTAT
160 memset(statbuf, 0,
sizeof(statbuf));
162 #ifdef HAVE_SETPROCTITLE
163 # if __FreeBSD__ >= 4 && !defined(FREEBSD4_0) && !defined(FREEBSD4_1)
165 vsnprintf(statbuf,
sizeof(statbuf), fmt, msg);
169 snprintf(statbuf,
sizeof(statbuf),
"%s",
"kdeinit4: ");
170 vsnprintf(statbuf + strlen(statbuf),
171 sizeof(statbuf) - strlen(statbuf),
176 setproctitle(
"%s", statbuf);
180 snprintf(statbuf,
sizeof(statbuf),
"%s",
"kdeinit4: ");
181 vsnprintf(statbuf + strlen(statbuf),
182 sizeof(statbuf) - strlen(statbuf),
190 #ifdef HAVE_SETPROCTITLE
195 # if PF_ARGV_TYPE == PF_ARGV_NEW
201 # if PF_ARGV_TYPE == PF_ARGV_WRITEABLE
204 snprintf(
Argv[0], maxlen,
"%s", statbuf);
218 # if PF_ARGV_TYPE == PF_ARGV_PSTAT
219 pst.pst_command = statbuf;
220 pstat(PSTAT_SETCMD, pst, i, 0, 0);
223 # if PF_ARGV_TYPE == PF_ARGV_PSSTRINGS
224 PS_STRINGS->ps_nargvstr = 1;
225 PS_STRINGS->ps_argvstr = statbuf;
void proctitle_init(int argc, char *argv[], char *envp[])
Set up the memory space for setting the proctitle.
void proctitle_set(const char *fmt,...)
Change the process title.
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:23:53 by
doxygen 1.8.7 written
by
Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.