Rizin
unix-like reverse engineering framework and cli tools
bsd-proctitle.c
Go to the documentation of this file.
1 /* Copyright libuv project contributors. All rights reserved.
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to
5  * deal in the Software without restriction, including without limitation the
6  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7  * sell copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19  * IN THE SOFTWARE.
20  */
21 
22 #include "uv.h"
23 #include "internal.h"
24 
25 #include <sys/types.h>
26 #include <unistd.h>
27 
28 
31 static char* process_title;
32 
33 
34 static void init_process_title_mutex_once(void) {
36  abort();
37 }
38 
39 
41  /* TODO(bnoordhuis) uv_mutex_destroy(&process_title_mutex)
42  * and reset process_title_mutex_once?
43  */
44 }
45 
46 
47 char** uv_setup_args(int argc, char** argv) {
48  process_title = argc > 0 ? uv__strdup(argv[0]) : NULL;
49  return argv;
50 }
51 
52 
53 int uv_set_process_title(const char* title) {
54  char* new_title;
55 
56  new_title = uv__strdup(title);
57  if (new_title == NULL)
58  return UV_ENOMEM;
59 
62 
64  process_title = new_title;
65  setproctitle("%s", title);
66 
68 
69  return 0;
70 }
71 
72 
73 int uv_get_process_title(char* buffer, size_t size) {
74  size_t len;
75 
76  if (buffer == NULL || size == 0)
77  return UV_EINVAL;
78 
81 
82  if (process_title != NULL) {
83  len = strlen(process_title) + 1;
84 
85  if (size < len) {
87  return UV_ENOBUFS;
88  }
89 
91  } else {
92  len = 0;
93  }
94 
96 
97  buffer[len] = '\0';
98 
99  return 0;
100 }
size_t len
Definition: 6502dis.c:15
static void init_process_title_mutex_once(void)
Definition: bsd-proctitle.c:34
void uv__process_title_cleanup(void)
Definition: bsd-proctitle.c:40
static uv_once_t process_title_mutex_once
Definition: bsd-proctitle.c:30
char ** uv_setup_args(int argc, char **argv)
Definition: bsd-proctitle.c:47
static char * process_title
Definition: bsd-proctitle.c:31
int uv_set_process_title(const char *title)
Definition: bsd-proctitle.c:53
int uv_get_process_title(char *buffer, size_t size)
Definition: bsd-proctitle.c:73
static uv_mutex_t process_title_mutex
Definition: bsd-proctitle.c:29
#define NULL
Definition: cris-opc.c:27
voidpf void uLong size
Definition: ioapi.h:138
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
static static fork const void static count static fd const char const char static newpath char char argv
Definition: sflib.h:40
Definition: buffer.h:15
int void setproctitle(const char *name,...)
pthread_mutex_t uv_mutex_t
Definition: unix.h:137
pthread_once_t uv_once_t
Definition: unix.h:135
#define UV_ONCE_INIT
Definition: unix.h:133
char * uv__strdup(const char *s)
Definition: uv-common.c:55
void uv__free(void *ptr)
Definition: uv-common.c:81
UV_EXTERN void uv_mutex_lock(uv_mutex_t *handle)
Definition: thread.c:330
UV_EXTERN void uv_once(uv_once_t *guard, void(*callback)(void))
Definition: thread.c:419
UV_EXTERN void uv_mutex_unlock(uv_mutex_t *handle)
Definition: thread.c:350
UV_EXTERN int uv_mutex_init(uv_mutex_t *handle)
Definition: thread.c:282