uv: Upgrade to 94355e4
authorisaacs <i@izs.me>
Thu, 19 Jul 2012 16:29:29 +0000 (09:29 -0700)
committerisaacs <i@izs.me>
Thu, 19 Jul 2012 16:33:02 +0000 (09:33 -0700)
deps/uv/config-unix.mk
deps/uv/src/unix/darwin.c
deps/uv/src/unix/linux/linux-core.c
deps/uv/src/unix/openbsd.c
deps/uv/src/unix/pipe.c
deps/uv/src/unix/proctitle.c [deleted file]
deps/uv/src/unix/sunos.c
deps/uv/uv.gyp

index 231d884..0581b51 100644 (file)
@@ -128,10 +128,6 @@ else
 RUNNER_LINKFLAGS += -pthread
 endif
 
-ifneq (FreeBSD,$(uname_S))
-OBJS += src/unix/proctitle.o
-endif
-
 RUNNER_LIBS=
 RUNNER_SRC=test/runner-unix.c
 
index b3cd012..e6deb30 100644 (file)
@@ -41,6 +41,8 @@
 #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() {
@@ -136,6 +138,31 @@ 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;
index 9cde6a1..34f48a9 100644 (file)
 
 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
@@ -107,6 +112,73 @@ 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;
index 0c5d816..865f8e9 100644 (file)
@@ -40,6 +40,9 @@
 #define NANOSEC ((uint64_t) 1e9)
 
 
+static char *process_title;
+
+
 uint64_t uv_hrtime(void) {
   struct timespec ts;
   clock_gettime(CLOCK_MONOTONIC, &ts);
@@ -134,6 +137,33 @@ 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;
index 317ac67..957e96f 100644 (file)
@@ -170,18 +170,17 @@ void uv_pipe_connect(uv_connect_t* req,
                     uv_connect_cb cb) {
   struct sockaddr_un saddr;
   int saved_errno;
-  int sockfd;
-  int status;
+  int new_sock;
+  int err;
   int r;
 
   saved_errno = errno;
-  sockfd = -1;
-  status = -1;
+  new_sock = (handle->fd == -1);
+  err = -1;
 
-  if ((sockfd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
-    uv__set_sys_error(handle->loop, errno);
-    goto out;
-  }
+  if (new_sock)
+    if ((handle->fd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
+      goto out;
 
   memset(&saddr, 0, sizeof saddr);
   uv_strlcpy(saddr.sun_path, name, sizeof(saddr.sun_path));
@@ -191,25 +190,25 @@ void uv_pipe_connect(uv_connect_t* req,
    * is either there or not.
    */
   do {
-    r = connect(sockfd, (struct sockaddr*)&saddr, sizeof saddr);
+    r = connect(handle->fd, (struct sockaddr*)&saddr, sizeof saddr);
   }
   while (r == -1 && errno == EINTR);
 
-  if (r == -1) {
-    status = errno;
-    close(sockfd);
+  if (r == -1)
     goto out;
-  }
 
-  uv__stream_open((uv_stream_t*)handle,
-                  sockfd,
-                  UV_STREAM_READABLE | UV_STREAM_WRITABLE);
+  if (new_sock)
+    if (uv__stream_open((uv_stream_t*)handle,
+                        handle->fd,
+                        UV_STREAM_READABLE | UV_STREAM_WRITABLE))
+      goto out;
+
   uv__io_start(handle->loop, &handle->read_watcher);
   uv__io_start(handle->loop, &handle->write_watcher);
-  status = 0;
+  err = 0;
 
 out:
-  handle->delayed_error = status; /* Passed to callback. */
+  handle->delayed_error = err ? errno : 0; /* Passed to callback. */
   handle->connect_req = req;
 
   uv__req_init(handle->loop, req, UV_CONNECT);
diff --git a/deps/uv/src/unix/proctitle.c b/deps/uv/src/unix/proctitle.c
deleted file mode 100644 (file)
index 9057074..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 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) {
-  /* proctitle doesn't need to be zero terminated, last char is always '\0'.
-   * Use strncpy(), it pads the remainder with nul bytes. Avoids garbage output
-   * on systems where `ps aux` prints the entire proctitle buffer, not just the
-   * characters up to the first '\0'.
-   */
-  if (process_title.len > 0)
-    strncpy(process_title.str, title, process_title.len - 1);
-
-  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_;
-}
index 1a439d9..b95a89b 100644 (file)
@@ -238,6 +238,24 @@ 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;
index 1ed3b6b..96c6b72 100644 (file)
         [ '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' ],
-        }],
       ]
     },