uv: Upgrade to a9f6f06
This commit is contained in:
parent
c383befd25
commit
7397ab2cf1
4
deps/uv/config-unix.mk
vendored
4
deps/uv/config-unix.mk
vendored
@ -128,6 +128,10 @@ else
|
||||
RUNNER_LINKFLAGS += -pthread
|
||||
endif
|
||||
|
||||
ifneq (FreeBSD,$(uname_S))
|
||||
OBJS += src/unix/proctitle.o
|
||||
endif
|
||||
|
||||
RUNNER_LIBS=
|
||||
RUNNER_SRC=test/runner-unix.c
|
||||
|
||||
|
13
deps/uv/include/uv-private/uv-unix.h
vendored
13
deps/uv/include/uv-private/uv-unix.h
vendored
@ -40,10 +40,17 @@
|
||||
#include <termios.h>
|
||||
#include <pwd.h>
|
||||
|
||||
#include <semaphore.h>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
# include <mach/mach.h>
|
||||
# include <mach/task.h>
|
||||
# include <mach/semaphore.h>
|
||||
#else
|
||||
# include <semaphore.h>
|
||||
#endif
|
||||
|
||||
#if __sun
|
||||
# include <sys/port.h>
|
||||
# include <port.h>
|
||||
@ -67,7 +74,11 @@ typedef pthread_once_t uv_once_t;
|
||||
typedef pthread_t uv_thread_t;
|
||||
typedef pthread_mutex_t uv_mutex_t;
|
||||
typedef pthread_rwlock_t uv_rwlock_t;
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
typedef semaphore_t uv_sem_t;
|
||||
#else
|
||||
typedef sem_t uv_sem_t;
|
||||
#endif
|
||||
|
||||
/* Platform-specific definitions for uv_spawn support. */
|
||||
typedef gid_t uv_gid_t;
|
||||
|
27
deps/uv/src/unix/darwin.c
vendored
27
deps/uv/src/unix/darwin.c
vendored
@ -41,8 +41,6 @@
|
||||
#include <sys/sysctl.h>
|
||||
#include <unistd.h> /* sysconf */
|
||||
|
||||
static char *process_title;
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
/* see: http://developer.apple.com/library/mac/#qa/qa1398/_index.html */
|
||||
uint64_t uv_hrtime() {
|
||||
@ -138,31 +136,6 @@ void uv_loadavg(double avg[3]) {
|
||||
}
|
||||
|
||||
|
||||
char** uv_setup_args(int argc, char** argv) {
|
||||
process_title = argc ? strdup(argv[0]) : NULL;
|
||||
return argv;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
/* TODO implement me */
|
||||
return uv__new_artificial_error(UV_ENOSYS);
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||
if (process_title) {
|
||||
strncpy(buffer, process_title, size);
|
||||
} else {
|
||||
if (size > 0) {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||
struct task_basic_info t_info;
|
||||
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
|
||||
|
16
deps/uv/src/unix/freebsd.c
vendored
16
deps/uv/src/unix/freebsd.c
vendored
@ -139,9 +139,23 @@ char** uv_setup_args(int argc, char** argv) {
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
int oid[4];
|
||||
|
||||
if (process_title) free(process_title);
|
||||
process_title = strdup(title);
|
||||
setproctitle(title);
|
||||
|
||||
oid[0] = CTL_KERN;
|
||||
oid[1] = KERN_PROC;
|
||||
oid[2] = KERN_PROC_ARGS;
|
||||
oid[3] = getpid();
|
||||
|
||||
sysctl(oid,
|
||||
ARRAY_SIZE(oid),
|
||||
NULL,
|
||||
NULL,
|
||||
process_title,
|
||||
strlen(process_title) + 1);
|
||||
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
72
deps/uv/src/unix/linux/linux-core.c
vendored
72
deps/uv/src/unix/linux/linux-core.c
vendored
@ -58,11 +58,6 @@
|
||||
|
||||
static char buf[MAXPATHLEN + 1];
|
||||
|
||||
static struct {
|
||||
char *str;
|
||||
size_t len;
|
||||
} process_title;
|
||||
|
||||
|
||||
/*
|
||||
* There's probably some way to get time from Linux than gettimeofday(). What
|
||||
@ -112,73 +107,6 @@ uint64_t uv_get_total_memory(void) {
|
||||
}
|
||||
|
||||
|
||||
char** uv_setup_args(int argc, char** argv) {
|
||||
char **new_argv;
|
||||
char **new_env;
|
||||
size_t size;
|
||||
int envc;
|
||||
char *s;
|
||||
int i;
|
||||
|
||||
for (envc = 0; environ[envc]; envc++);
|
||||
|
||||
s = envc ? environ[envc - 1] : argv[argc - 1];
|
||||
|
||||
process_title.str = argv[0];
|
||||
process_title.len = s + strlen(s) + 1 - argv[0];
|
||||
|
||||
size = process_title.len;
|
||||
size += (argc + 1) * sizeof(char **);
|
||||
size += (envc + 1) * sizeof(char **);
|
||||
|
||||
if ((s = (char *) malloc(size)) == NULL) {
|
||||
process_title.str = NULL;
|
||||
process_title.len = 0;
|
||||
return argv;
|
||||
}
|
||||
|
||||
new_argv = (char **) s;
|
||||
new_env = new_argv + argc + 1;
|
||||
s = (char *) (new_env + envc + 1);
|
||||
memcpy(s, process_title.str, process_title.len);
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
new_argv[i] = s + (argv[i] - argv[0]);
|
||||
new_argv[argc] = NULL;
|
||||
|
||||
s += environ[0] - argv[0];
|
||||
|
||||
for (i = 0; i < envc; i++)
|
||||
new_env[i] = s + (environ[i] - environ[0]);
|
||||
new_env[envc] = NULL;
|
||||
|
||||
environ = new_env;
|
||||
return new_argv;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
/* No need to terminate, last char is always '\0'. */
|
||||
if (process_title.len)
|
||||
strncpy(process_title.str, title, process_title.len - 1);
|
||||
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||
if (process_title.str) {
|
||||
strncpy(buffer, process_title.str, size);
|
||||
} else {
|
||||
if (size > 0) {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||
FILE* f;
|
||||
int itmp;
|
||||
|
30
deps/uv/src/unix/openbsd.c
vendored
30
deps/uv/src/unix/openbsd.c
vendored
@ -40,9 +40,6 @@
|
||||
#define NANOSEC ((uint64_t) 1e9)
|
||||
|
||||
|
||||
static char *process_title;
|
||||
|
||||
|
||||
uint64_t uv_hrtime(void) {
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
@ -137,33 +134,6 @@ uint64_t uv_get_total_memory(void) {
|
||||
}
|
||||
|
||||
|
||||
char** uv_setup_args(int argc, char** argv) {
|
||||
process_title = argc ? strdup(argv[0]) : NULL;
|
||||
return argv;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
if (process_title) free(process_title);
|
||||
process_title = strdup(title);
|
||||
setproctitle(title);
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||
if (process_title) {
|
||||
strncpy(buffer, process_title, size);
|
||||
} else {
|
||||
if (size > 0) {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||
kvm_t *kd = NULL;
|
||||
struct kinfo_proc *kinfo = NULL;
|
||||
|
92
deps/uv/src/unix/proctitle.c
vendored
Normal file
92
deps/uv/src/unix/proctitle.c
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "uv.h"
|
||||
#include "internal.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
/* NOTE: FreeBSD is using it's own implementation of those functions */
|
||||
|
||||
static struct {
|
||||
char *str;
|
||||
size_t len;
|
||||
} process_title;
|
||||
|
||||
extern char** environ;
|
||||
|
||||
|
||||
char** uv_setup_args(int argc, char** argv) {
|
||||
char **new_argv;
|
||||
char **new_env;
|
||||
size_t size;
|
||||
int envc;
|
||||
char *s;
|
||||
int i;
|
||||
|
||||
for (envc = 0; environ[envc]; envc++);
|
||||
|
||||
s = envc ? environ[envc - 1] : argv[argc - 1];
|
||||
|
||||
process_title.str = argv[0];
|
||||
process_title.len = s + strlen(s) + 1 - argv[0];
|
||||
|
||||
size = process_title.len;
|
||||
size += (argc + 1) * sizeof(char **);
|
||||
size += (envc + 1) * sizeof(char **);
|
||||
|
||||
if ((s = (char *) malloc(size)) == NULL) {
|
||||
process_title.str = NULL;
|
||||
process_title.len = 0;
|
||||
return argv;
|
||||
}
|
||||
|
||||
new_argv = (char **) s;
|
||||
new_env = new_argv + argc + 1;
|
||||
s = (char *) (new_env + envc + 1);
|
||||
memcpy(s, process_title.str, process_title.len);
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
new_argv[i] = s + (argv[i] - argv[0]);
|
||||
new_argv[argc] = NULL;
|
||||
|
||||
s += environ[0] - argv[0];
|
||||
|
||||
for (i = 0; i < envc; i++)
|
||||
new_env[i] = s + (environ[i] - environ[0]);
|
||||
new_env[envc] = NULL;
|
||||
|
||||
environ = new_env;
|
||||
return new_argv;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
uv_strlcpy(process_title.str, title, process_title.len);
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||
uv_strlcpy(buffer, process_title.str ? process_title.str : "", size);
|
||||
return uv_ok_;
|
||||
}
|
18
deps/uv/src/unix/sunos.c
vendored
18
deps/uv/src/unix/sunos.c
vendored
@ -238,24 +238,6 @@ void uv__fs_event_close(uv_fs_event_t* handle) {
|
||||
#endif /* HAVE_PORTS_FS */
|
||||
|
||||
|
||||
char** uv_setup_args(int argc, char** argv) {
|
||||
return argv;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_set_process_title(const char* title) {
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||
if (size > 0) {
|
||||
buffer[0] = '\0';
|
||||
}
|
||||
return uv_ok_;
|
||||
}
|
||||
|
||||
|
||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||
psinfo_t psinfo;
|
||||
uv_err_t err;
|
||||
|
40
deps/uv/src/unix/thread.c
vendored
40
deps/uv/src/unix/thread.c
vendored
@ -167,6 +167,44 @@ void uv_once(uv_once_t* guard, void (*callback)(void)) {
|
||||
abort();
|
||||
}
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
|
||||
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
||||
return semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value);
|
||||
}
|
||||
|
||||
|
||||
void uv_sem_destroy(uv_sem_t* sem) {
|
||||
if (semaphore_destroy(mach_task_self(), *sem))
|
||||
abort();
|
||||
}
|
||||
|
||||
|
||||
void uv_sem_post(uv_sem_t* sem) {
|
||||
if (semaphore_signal(*sem))
|
||||
abort();
|
||||
}
|
||||
|
||||
|
||||
void uv_sem_wait(uv_sem_t* sem) {
|
||||
if (semaphore_wait(*sem))
|
||||
abort();
|
||||
}
|
||||
|
||||
|
||||
int uv_sem_trywait(uv_sem_t* sem) {
|
||||
mach_timespec_t interval;
|
||||
|
||||
interval.tv_sec = 0;
|
||||
interval.tv_nsec = 0;
|
||||
|
||||
if (semaphore_timedwait(*sem, interval) == KERN_SUCCESS)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
#else /* !(defined(__APPLE__) && defined(__MACH__)) */
|
||||
|
||||
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
||||
return sem_init(sem, 0, value);
|
||||
@ -209,3 +247,5 @@ int uv_sem_trywait(uv_sem_t* sem) {
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
#endif /* defined(__APPLE__) && defined(__MACH__) */
|
||||
|
13
deps/uv/test/test-process-title.c
vendored
13
deps/uv/test/test-process-title.c
vendored
@ -23,20 +23,27 @@
|
||||
#include "task.h"
|
||||
#include <string.h>
|
||||
|
||||
TEST_IMPL(process_title) {
|
||||
|
||||
static void set_title(const char* title) {
|
||||
char buffer[512];
|
||||
uv_err_t err;
|
||||
|
||||
err = uv_get_process_title(buffer, sizeof(buffer));
|
||||
ASSERT(UV_OK == err.code);
|
||||
|
||||
err = uv_set_process_title("new title");
|
||||
err = uv_set_process_title(title);
|
||||
ASSERT(UV_OK == err.code);
|
||||
|
||||
err = uv_get_process_title(buffer, sizeof(buffer));
|
||||
ASSERT(UV_OK == err.code);
|
||||
|
||||
ASSERT(strcmp(buffer, "new title") == 0);
|
||||
ASSERT(strcmp(buffer, title) == 0);
|
||||
}
|
||||
|
||||
|
||||
TEST_IMPL(process_title) {
|
||||
/* Check for format string vulnerabilities. */
|
||||
set_title("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s");
|
||||
set_title("new title");
|
||||
return 0;
|
||||
}
|
||||
|
3
deps/uv/uv.gyp
vendored
3
deps/uv/uv.gyp
vendored
@ -287,6 +287,9 @@
|
||||
[ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
||||
'sources': [ 'src/unix/kqueue.c' ],
|
||||
}],
|
||||
[ 'OS!="win" and OS!="freebsd"', {
|
||||
'sources': [ 'src/unix/proctitle.c' ],
|
||||
}],
|
||||
]
|
||||
},
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user