X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=lib%2Fsetproctitle.c;fp=lib%2Fsetproctitle.c;h=0000000000000000000000000000000000000000;hb=b7a32e2d73e3ab1add8208d3e157f7269a31ef4d;hp=cb729608f5cfcad2c8ab3a4afe6c8bfe5bc4e3f0;hpb=ac902a8299ff4469b356836f431ead31c3377377;p=innduct.git diff --git a/lib/setproctitle.c b/lib/setproctitle.c deleted file mode 100644 index cb72960..0000000 --- a/lib/setproctitle.c +++ /dev/null @@ -1,106 +0,0 @@ -/* $Id: setproctitle.c 5943 2002-12-08 02:28:06Z rra $ -** -** Replacement for a missing setproctitle. -** -** Provides the same functionality as the BSD function setproctitle on hosts -** where modifying argv will produce those results, or on HP-UX (which has -** its own peculiar way of doing this). This may be ineffective on some -** platforms. -** -** Before calling setproctitle, it is *required* that setproctitle_init be -** called, passing it argc and argv as arguments. setproctitle_init will be -** stubbed out on those platforms that don't need it. -*/ - -#include "config.h" -#include "clibrary.h" -#include "portable/setproctitle.h" - -#include "inn/messages.h" - -#if HAVE_PSTAT - -#include -#include - -void -setproctitle(const char *format, ...) -{ - va_list args; - char title[BUFSIZ]; - union pstun un; - ssize_t delta = 0; - - if (message_program_name != NULL) { - delta = snprintf(title, sizeof(title), "%s: ", message_program_name); - if (delta < 0) - delta = 0; - } - va_start(args, format); - vsnprintf(title + delta, sizeof(title) - delta, format, args); - va_end(args); - un.pst_command = title; - pstat(PSTAT_SETCMD, un, strlen(title), 0, 0); -} - -#else - -static char *title_start = NULL; -static char *title_end = NULL; - -void -setproctitle_init(int argc, char *argv[]) -{ - title_start = argv[0]; - title_end = argv[argc - 1] + strlen(argv[argc - 1]) - 1; -} - -void -setproctitle(const char *format, ...) -{ - va_list args; - size_t length; - ssize_t delta; - char *title; - - if (title_start == NULL || title_end == NULL) { - warn("setproctitle called without setproctitle_init"); - return; - } - - /* setproctitle prepends the program name to its arguments. Our emulation - should therefore do the same thing. However, some operating systems - seem to do that automatically even when we completely overwrite argv, - so start our title with a - so that they'll instead put (nnrpd) at the - end, thinking we're swapped out. */ - title = title_start; - *title++ = '-'; - *title++ = ' '; - length = title_end - title_start - 2; - - /* Now, put in the actual content. Get the program name from - message_program_name if it's set. */ - if (message_program_name != NULL) { - delta = snprintf(title, length, "%s: ", message_program_name); - if (delta < 0 || (size_t) delta > length) - return; - if (delta > 0) { - title += delta; - length -= delta; - } - } - va_start(args, format); - delta = vsnprintf(title, length, format, args); - va_end(args); - if (delta < 0 || (size_t) delta > length) - return; - if (delta > 0) { - title += delta; - length -= delta; - } - for (; length > 1; length--, title++) - *title = ' '; - *title = '\0'; -} - -#endif /* !HAVE_PSTAT */