37 #define compat_init_setproctitle ruby_init_setproctitle 39 #ifndef HAVE_SETPROCTITLE 46 #ifdef HAVE_SYS_PSTAT_H 47 #include <sys/pstat.h> 51 #if defined(__APPLE__) 52 #include <crt_externs.h> 54 #define environ (*_NSGetEnviron()) 59 #define SPT_REUSEARGV 2 62 # define SPT_TYPE SPT_NONE 66 # define SPT_PADCHAR '\0' 69 #if SPT_TYPE == SPT_REUSEARGV 70 static char *argv_start =
NULL;
71 static size_t argv_env_len = 0;
72 static size_t argv_len = 0;
80 #if defined(SPT_TYPE) && SPT_TYPE == SPT_REUSEARGV 82 char *lastargv =
NULL;
83 char *lastenvp =
NULL;
97 for (
i = 0; envp[
i] !=
NULL;
i++)
109 if (lastargv ==
NULL || lastargv + 1 ==
argv[
i])
113 for (
i = 0; envp[
i] !=
NULL;
i++) {
114 if (lastenvp + 1 == envp[
i])
115 lastenvp = envp[
i] +
strlen(envp[
i]);
119 argv_start =
argv[0];
120 argv_len = lastargv -
argv[0];
121 argv_env_len = lastenvp -
argv[0];
123 for (
i = 0; envp[
i] !=
NULL;
i++)
129 #ifndef HAVE_SETPROCTITLE 133 #if SPT_TYPE != SPT_NONE 138 #if SPT_TYPE == SPT_PSTAT 142 #if SPT_TYPE == SPT_REUSEARGV 143 if (argv_env_len <= 0)
149 vsnprintf(ptitle,
sizeof(ptitle) , fmt, ap);
153 #if SPT_TYPE == SPT_PSTAT 154 pst.pst_command = ptitle;
155 pstat(PSTAT_SETCMD, pst,
strlen(ptitle), 0, 0);
156 #elif SPT_TYPE == SPT_REUSEARGV 157 len =
strlcpy(argv_start, ptitle, argv_env_len);
158 argvlen =
len > argv_len ? argv_env_len : argv_len;
159 for(;
len < argvlen;
len++)
size_t strlen(const char *)
char * ruby_strdup(const char *)
#define compat_init_setproctitle
register unsigned int len
RUBY_EXTERN size_t strlcpy(char *, const char *, size_t)
void setproctitle(const char *fmt,...)