Created
January 16, 2020 10:40
-
-
Save e7/500222dbd1d4ab058028e8a1c4c5d207 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <unistd.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#define NGX_OK 0 | |
#define NGX_ERROR -1 | |
#define NGX_SETPROCTITLE_PAD '\0' | |
typedef int ngx_int_t; | |
typedef unsigned int ngx_uint_t; | |
extern char **environ; | |
static char *ngx_os_argv_last; | |
static int ngx_argc; | |
static char **ngx_os_argv; | |
static u_char *ngx_cpystrn(u_char *dst, const u_char *src, size_t n) { | |
if (n == 0) { | |
return dst; | |
} | |
while (--n) { | |
*dst = *src; | |
if (*dst == '\0') { | |
return dst; | |
} | |
dst++; | |
src++; | |
} | |
*dst = '\0'; | |
return dst; | |
} | |
static void ngx_init_setproctitle() { | |
u_char *p; | |
size_t size; | |
ngx_uint_t i; | |
size = 0; | |
for (i = 0; environ[i]; i++) { | |
size += strlen(environ[i]) + 1; | |
} | |
p = (u_char *) malloc(size); | |
ngx_os_argv_last = ngx_os_argv[0]; | |
for (i = 0; ngx_os_argv[i]; i++) { | |
if (ngx_os_argv_last == ngx_os_argv[i]) { | |
ngx_os_argv_last = ngx_os_argv[i] + strlen(ngx_os_argv[i]) + 1; | |
} | |
} | |
for (i = 0; environ[i]; i++) { | |
if (ngx_os_argv_last == environ[i]) { | |
size = strlen(environ[i]) + 1; | |
ngx_os_argv_last = environ[i] + size; | |
ngx_cpystrn(p, (u_char *) environ[i], size); | |
environ[i] = (char *) p; | |
p += size; | |
} | |
} | |
ngx_os_argv_last--; | |
} | |
static void ngx_setproctitle(const char *title) { | |
u_char *p; | |
ngx_os_argv[1] = NULL; | |
p = ngx_cpystrn((u_char *) ngx_os_argv[0], (u_char *) "", | |
ngx_os_argv_last - ngx_os_argv[0]); | |
p = ngx_cpystrn(p, (const u_char *) title, ngx_os_argv_last - (char *) p); | |
if (ngx_os_argv_last - (char *) p) { | |
memset(p, NGX_SETPROCTITLE_PAD, ngx_os_argv_last - (char *) p); | |
} | |
} | |
void change_process_name(int argc, char *argv[], const char *new_name) { | |
ngx_os_argv = argv; | |
ngx_argc = argc; | |
ngx_init_setproctitle(); | |
ngx_setproctitle(new_name); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment