diff --git a/include/uv-private/uv-bsd.h b/include/uv-private/uv-bsd.h new file mode 100644 index 00000000..26830a68 --- /dev/null +++ b/include/uv-private/uv-bsd.h @@ -0,0 +1,30 @@ +/* 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. + */ + +#ifndef UV_BSD_H +#define UV_BSD_H + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + int fflags; \ + int fd; \ + +#endif /* UV_BSD_H */ diff --git a/include/uv-private/uv-darwin.h b/include/uv-private/uv-darwin.h new file mode 100644 index 00000000..93f2ca4e --- /dev/null +++ b/include/uv-private/uv-darwin.h @@ -0,0 +1,37 @@ +/* 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. + */ + +#ifndef UV_DARWIN_H +#define UV_DARWIN_H + +#if defined(__APPLE__) && defined(__MACH__) +# include +# include +# include +# define UV_PLATFORM_SEM_T semaphore_t +#endif + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + ev_io event_watcher; \ + int fflags; \ + int fd; \ + +#endif /* UV_DARWIN_H */ diff --git a/include/uv-private/uv-linux.h b/include/uv-private/uv-linux.h new file mode 100644 index 00000000..0d50123e --- /dev/null +++ b/include/uv-private/uv-linux.h @@ -0,0 +1,34 @@ +/* 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. + */ + +#ifndef UV_LINUX_H +#define UV_LINUX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t inotify_read_watcher; \ + void* inotify_watchers; \ + int inotify_fd; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + ngx_queue_t watchers; \ + int wd; \ + +#endif /* UV_LINUX_H */ diff --git a/include/uv-private/uv-sunos.h b/include/uv-private/uv-sunos.h new file mode 100644 index 00000000..9d55e23f --- /dev/null +++ b/include/uv-private/uv-sunos.h @@ -0,0 +1,40 @@ +/* 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. + */ + +#ifndef UV_SUNOS_H +#define UV_SUNOS_H + +#include +#include + +#if defined(PORT_SOURCE_FILE) + +# define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t fs_event_watcher; \ + int fs_fd; \ + +# define UV_PLATFORM_FS_EVENT_FIELDS \ + file_obj_t fo; \ + int fd; \ + +#endif /* defined(PORT_SOURCE_FILE) */ + +#endif /* UV_SUNOS_H */ diff --git a/include/uv-private/uv-unix.h b/include/uv-private/uv-unix.h index e7649258..88178e3d 100644 --- a/include/uv-private/uv-unix.h +++ b/include/uv-private/uv-unix.h @@ -40,57 +40,10 @@ #include #include +#include #include #include -#if defined(__APPLE__) && defined(__MACH__) -# include -# include -# include -#else -# include -#endif - -#if defined(__sun) -# include -# include -#endif - -/* Note: May be cast to struct iovec. See writev(2). */ -typedef struct { - char* base; - size_t len; -} uv_buf_t; - -typedef int uv_file; - -typedef int uv_os_sock_t; - -typedef struct stat uv_statbuf_t; - -#define UV_ONCE_INIT PTHREAD_ONCE_INIT - -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; -typedef uid_t uv_uid_t; - -/* Platform-specific definitions for uv_dlopen support. */ -#define UV_DYNAMIC /* empty */ -typedef struct { - void* handle; - char* errmsg; -} uv_lib_t; - struct uv__io_s; struct uv_loop_s; @@ -101,21 +54,61 @@ struct uv__io_s { ev_io io_watcher; }; -#define UV_REQ_TYPE_PRIVATE /* empty */ - #if defined(__linux__) -# define UV_LOOP_PRIVATE_PLATFORM_FIELDS \ - uv__io_t inotify_read_watcher; \ - void* inotify_watchers; \ - int inotify_fd; -#elif defined(PORT_SOURCE_FILE) -# define UV_LOOP_PRIVATE_PLATFORM_FIELDS \ - uv__io_t fs_event_watcher; \ - int fs_fd; -#else -# define UV_LOOP_PRIVATE_PLATFORM_FIELDS +# include "uv-linux.h" +#elif defined(__sun) +# include "uv-sunos.h" +#elif defined(__APPLE__) +# include "uv-darwin.h" +#elif defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +# include "uv-bsd.h" #endif +#ifndef UV_PLATFORM_SEM_T +# define UV_PLATFORM_SEM_T sem_t +#endif + +#ifndef UV_PLATFORM_LOOP_FIELDS +# define UV_PLATFORM_LOOP_FIELDS /* empty */ +#endif + +#ifndef UV_PLATFORM_FS_EVENT_FIELDS +# define UV_PLATFORM_FS_EVENT_FIELDS /* empty */ +#endif + +/* Note: May be cast to struct iovec. See writev(2). */ +typedef struct { + char* base; + size_t len; +} uv_buf_t; + +typedef int uv_file; +typedef int uv_os_sock_t; +typedef struct stat uv_statbuf_t; + +#define UV_ONCE_INIT PTHREAD_ONCE_INIT + +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; +typedef UV_PLATFORM_SEM_T uv_sem_t; + +/* Platform-specific definitions for uv_spawn support. */ +typedef gid_t uv_gid_t; +typedef uid_t uv_uid_t; + +/* Platform-specific definitions for uv_dlopen support. */ +#define UV_DYNAMIC /* empty */ + +typedef struct { + void* handle; + char* errmsg; +} uv_lib_t; + #define UV_LOOP_PRIVATE_FIELDS \ unsigned long flags; \ /* Poll result queue */ \ @@ -134,14 +127,20 @@ struct uv__io_s { uv__io_t async_watcher; \ int async_pipefd[2]; \ /* RB_HEAD(uv__timers, uv_timer_s) */ \ - struct uv__timers { struct uv_timer_s* rbh_root; } timer_handles; \ + struct uv__timers { \ + struct uv_timer_s* rbh_root; \ + } timer_handles; \ uint64_t time; \ void* signal_ctx; \ uv_signal_t child_watcher; \ - UV_LOOP_PRIVATE_PLATFORM_FIELDS + UV_PLATFORM_LOOP_FIELDS \ + +#define UV_REQ_TYPE_PRIVATE /* empty */ #define UV_REQ_PRIVATE_FIELDS /* empty */ +#define UV_PRIVATE_REQ_TYPES /* empty */ + #define UV_WRITE_PRIVATE_FIELDS \ ngx_queue_t queue; \ int write_index; \ @@ -150,10 +149,10 @@ struct uv__io_s { int error; \ uv_buf_t bufsml[4]; \ -#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ - #define UV_CONNECT_PRIVATE_FIELDS \ - ngx_queue_t queue; + ngx_queue_t queue; \ + +#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ #define UV_UDP_SEND_PRIVATE_FIELDS \ ngx_queue_t queue; \ @@ -164,15 +163,10 @@ struct uv__io_s { uv_udp_send_cb send_cb; \ uv_buf_t bufsml[4]; \ -#define UV_PRIVATE_REQ_TYPES /* empty */ - - -/* TODO: union or classes please! */ #define UV_HANDLE_PRIVATE_FIELDS \ int flags; \ uv_handle_t* next_closing; \ - #define UV_STREAM_PRIVATE_FIELDS \ uv_connect_t *connect_req; \ uv_shutdown_t *shutdown_req; \ @@ -185,13 +179,9 @@ struct uv__io_s { int accepted_fd; \ int fd; \ - -/* UV_TCP, idle_handle is for UV_TCP_SINGLE_ACCEPT handles */ #define UV_TCP_PRIVATE_FIELDS \ - uv_idle_t* idle_handle; \ + uv_idle_t* idle_handle; /* for UV_TCP_SINGLE_ACCEPT handles */ \ - -/* UV_UDP */ #define UV_UDP_PRIVATE_FIELDS \ int fd; \ uv_alloc_cb alloc_cb; \ @@ -201,44 +191,30 @@ struct uv__io_s { ngx_queue_t write_queue; \ ngx_queue_t write_completed_queue; \ - -/* UV_NAMED_PIPE */ #define UV_PIPE_PRIVATE_FIELDS \ const char* pipe_fname; /* strdup'ed */ - -/* UV_POLL */ #define UV_POLL_PRIVATE_FIELDS \ int fd; \ uv__io_t io_watcher; - -/* UV_PREPARE */ #define UV_PREPARE_PRIVATE_FIELDS \ uv_prepare_cb prepare_cb; \ ngx_queue_t queue; - -/* UV_CHECK */ #define UV_CHECK_PRIVATE_FIELDS \ uv_check_cb check_cb; \ ngx_queue_t queue; - -/* UV_IDLE */ #define UV_IDLE_PRIVATE_FIELDS \ uv_idle_cb idle_cb; \ ngx_queue_t queue; - -/* UV_ASYNC */ #define UV_ASYNC_PRIVATE_FIELDS \ volatile sig_atomic_t pending; \ uv_async_cb async_cb; \ ngx_queue_t queue; - -/* UV_TIMER */ #define UV_TIMER_PRIVATE_FIELDS \ /* RB_ENTRY(uv_timer_s) node; */ \ struct { \ @@ -279,44 +255,8 @@ struct uv__io_s { ngx_queue_t queue; \ unsigned int signum; \ -/* UV_FS_EVENT_PRIVATE_FIELDS */ -#if defined(__linux__) - #define UV_FS_EVENT_PRIVATE_FIELDS \ - ngx_queue_t watchers; \ uv_fs_event_cb cb; \ - int wd; \ - void* pad0; \ - void* pad1; \ - -#elif defined(__APPLE__) \ - || defined(__FreeBSD__) \ - || defined(__DragonFly__) \ - || defined(__OpenBSD__) \ - || defined(__NetBSD__) - -#define UV_FS_EVENT_PRIVATE_FIELDS \ - ev_io event_watcher; \ - uv_fs_event_cb cb; \ - int fflags; \ - int fd; - -#elif defined(__sun) - -#ifdef PORT_SOURCE_FILE -# define UV_FS_EVENT_PRIVATE_FIELDS \ - uv_fs_event_cb cb; \ - file_obj_t fo; \ - int fd; -#else /* !PORT_SOURCE_FILE */ -# define UV_FS_EVENT_PRIVATE_FIELDS -#endif - -#else - -/* Stub for platforms where the file watcher isn't implemented yet. */ -#define UV_FS_EVENT_PRIVATE_FIELDS - -#endif + UV_PLATFORM_FS_EVENT_FIELDS \ #endif /* UV_UNIX_H */ diff --git a/uv.gyp b/uv.gyp index 90b36d01..7b0fe1a5 100644 --- a/uv.gyp +++ b/uv.gyp @@ -111,6 +111,10 @@ 'include/uv-private/eio.h', 'include/uv-private/ev.h', 'include/uv-private/uv-unix.h', + 'include/uv-private/uv-linux.h', + 'include/uv-private/uv-sunos.h', + 'include/uv-private/uv-darwin.h', + 'include/uv-private/uv-bsd.h', 'src/unix/async.c', 'src/unix/core.c', 'src/unix/dl.c',