Blame include/uv.h

Packit b5b901
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Packit b5b901
 *
Packit b5b901
 * Permission is hereby granted, free of charge, to any person obtaining a copy
Packit b5b901
 * of this software and associated documentation files (the "Software"), to
Packit b5b901
 * deal in the Software without restriction, including without limitation the
Packit b5b901
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
Packit b5b901
 * sell copies of the Software, and to permit persons to whom the Software is
Packit b5b901
 * furnished to do so, subject to the following conditions:
Packit b5b901
 *
Packit b5b901
 * The above copyright notice and this permission notice shall be included in
Packit b5b901
 * all copies or substantial portions of the Software.
Packit b5b901
 *
Packit b5b901
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Packit b5b901
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Packit b5b901
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Packit b5b901
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Packit b5b901
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Packit b5b901
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
Packit b5b901
 * IN THE SOFTWARE.
Packit b5b901
 */
Packit b5b901
Packit b5b901
/* See https://github.com/libuv/libuv#documentation for documentation. */
Packit b5b901
Packit b5b901
#ifndef UV_H
Packit b5b901
#define UV_H
Packit b5b901
#ifdef __cplusplus
Packit b5b901
extern "C" {
Packit b5b901
#endif
Packit b5b901
Packit Service e08953
#if defined(BUILDING_UV_SHARED) && defined(USING_UV_SHARED)
Packit Service e08953
#error "Define either BUILDING_UV_SHARED or USING_UV_SHARED, not both."
Packit Service e08953
#endif
Packit Service e08953
Packit b5b901
#ifdef _WIN32
Packit b5b901
  /* Windows - set up dll import/export decorators. */
Packit b5b901
# if defined(BUILDING_UV_SHARED)
Packit b5b901
    /* Building shared library. */
Packit b5b901
#   define UV_EXTERN __declspec(dllexport)
Packit b5b901
# elif defined(USING_UV_SHARED)
Packit b5b901
    /* Using shared library. */
Packit b5b901
#   define UV_EXTERN __declspec(dllimport)
Packit b5b901
# else
Packit b5b901
    /* Building static library. */
Packit b5b901
#   define UV_EXTERN /* nothing */
Packit b5b901
# endif
Packit b5b901
#elif __GNUC__ >= 4
Packit b5b901
# define UV_EXTERN __attribute__((visibility("default")))
Packit b5b901
#else
Packit b5b901
# define UV_EXTERN /* nothing */
Packit b5b901
#endif
Packit b5b901
Packit b5b901
#include "uv/errno.h"
Packit b5b901
#include "uv/version.h"
Packit b5b901
#include <stddef.h>
Packit b5b901
#include <stdio.h>
Packit b5b901
Packit b5b901
#if defined(_MSC_VER) && _MSC_VER < 1600
Packit b5b901
# include "uv/stdint-msvc2008.h"
Packit b5b901
#else
Packit b5b901
# include <stdint.h>
Packit b5b901
#endif
Packit b5b901
Packit b5b901
#if defined(_WIN32)
Packit b5b901
# include "uv/win.h"
Packit b5b901
#else
Packit b5b901
# include "uv/unix.h"
Packit b5b901
#endif
Packit b5b901
Packit b5b901
/* Expand this list if necessary. */
Packit b5b901
#define UV_ERRNO_MAP(XX)                                                      \
Packit b5b901
  XX(E2BIG, "argument list too long")                                         \
Packit b5b901
  XX(EACCES, "permission denied")                                             \
Packit b5b901
  XX(EADDRINUSE, "address already in use")                                    \
Packit b5b901
  XX(EADDRNOTAVAIL, "address not available")                                  \
Packit b5b901
  XX(EAFNOSUPPORT, "address family not supported")                            \
Packit b5b901
  XX(EAGAIN, "resource temporarily unavailable")                              \
Packit b5b901
  XX(EAI_ADDRFAMILY, "address family not supported")                          \
Packit b5b901
  XX(EAI_AGAIN, "temporary failure")                                          \
Packit b5b901
  XX(EAI_BADFLAGS, "bad ai_flags value")                                      \
Packit b5b901
  XX(EAI_BADHINTS, "invalid value for hints")                                 \
Packit b5b901
  XX(EAI_CANCELED, "request canceled")                                        \
Packit b5b901
  XX(EAI_FAIL, "permanent failure")                                           \
Packit b5b901
  XX(EAI_FAMILY, "ai_family not supported")                                   \
Packit b5b901
  XX(EAI_MEMORY, "out of memory")                                             \
Packit b5b901
  XX(EAI_NODATA, "no address")                                                \
Packit b5b901
  XX(EAI_NONAME, "unknown node or service")                                   \
Packit b5b901
  XX(EAI_OVERFLOW, "argument buffer overflow")                                \
Packit b5b901
  XX(EAI_PROTOCOL, "resolved protocol is unknown")                            \
Packit b5b901
  XX(EAI_SERVICE, "service not available for socket type")                    \
Packit b5b901
  XX(EAI_SOCKTYPE, "socket type not supported")                               \
Packit b5b901
  XX(EALREADY, "connection already in progress")                              \
Packit b5b901
  XX(EBADF, "bad file descriptor")                                            \
Packit b5b901
  XX(EBUSY, "resource busy or locked")                                        \
Packit b5b901
  XX(ECANCELED, "operation canceled")                                         \
Packit b5b901
  XX(ECHARSET, "invalid Unicode character")                                   \
Packit b5b901
  XX(ECONNABORTED, "software caused connection abort")                        \
Packit b5b901
  XX(ECONNREFUSED, "connection refused")                                      \
Packit b5b901
  XX(ECONNRESET, "connection reset by peer")                                  \
Packit b5b901
  XX(EDESTADDRREQ, "destination address required")                            \
Packit b5b901
  XX(EEXIST, "file already exists")                                           \
Packit b5b901
  XX(EFAULT, "bad address in system call argument")                           \
Packit b5b901
  XX(EFBIG, "file too large")                                                 \
Packit b5b901
  XX(EHOSTUNREACH, "host is unreachable")                                     \
Packit b5b901
  XX(EINTR, "interrupted system call")                                        \
Packit b5b901
  XX(EINVAL, "invalid argument")                                              \
Packit b5b901
  XX(EIO, "i/o error")                                                        \
Packit b5b901
  XX(EISCONN, "socket is already connected")                                  \
Packit b5b901
  XX(EISDIR, "illegal operation on a directory")                              \
Packit b5b901
  XX(ELOOP, "too many symbolic links encountered")                            \
Packit b5b901
  XX(EMFILE, "too many open files")                                           \
Packit b5b901
  XX(EMSGSIZE, "message too long")                                            \
Packit b5b901
  XX(ENAMETOOLONG, "name too long")                                           \
Packit b5b901
  XX(ENETDOWN, "network is down")                                             \
Packit b5b901
  XX(ENETUNREACH, "network is unreachable")                                   \
Packit b5b901
  XX(ENFILE, "file table overflow")                                           \
Packit b5b901
  XX(ENOBUFS, "no buffer space available")                                    \
Packit b5b901
  XX(ENODEV, "no such device")                                                \
Packit b5b901
  XX(ENOENT, "no such file or directory")                                     \
Packit b5b901
  XX(ENOMEM, "not enough memory")                                             \
Packit b5b901
  XX(ENONET, "machine is not on the network")                                 \
Packit b5b901
  XX(ENOPROTOOPT, "protocol not available")                                   \
Packit b5b901
  XX(ENOSPC, "no space left on device")                                       \
Packit b5b901
  XX(ENOSYS, "function not implemented")                                      \
Packit b5b901
  XX(ENOTCONN, "socket is not connected")                                     \
Packit b5b901
  XX(ENOTDIR, "not a directory")                                              \
Packit b5b901
  XX(ENOTEMPTY, "directory not empty")                                        \
Packit b5b901
  XX(ENOTSOCK, "socket operation on non-socket")                              \
Packit b5b901
  XX(ENOTSUP, "operation not supported on socket")                            \
Packit b5b901
  XX(EPERM, "operation not permitted")                                        \
Packit b5b901
  XX(EPIPE, "broken pipe")                                                    \
Packit b5b901
  XX(EPROTO, "protocol error")                                                \
Packit b5b901
  XX(EPROTONOSUPPORT, "protocol not supported")                               \
Packit b5b901
  XX(EPROTOTYPE, "protocol wrong type for socket")                            \
Packit b5b901
  XX(ERANGE, "result too large")                                              \
Packit b5b901
  XX(EROFS, "read-only file system")                                          \
Packit b5b901
  XX(ESHUTDOWN, "cannot send after transport endpoint shutdown")              \
Packit b5b901
  XX(ESPIPE, "invalid seek")                                                  \
Packit b5b901
  XX(ESRCH, "no such process")                                                \
Packit b5b901
  XX(ETIMEDOUT, "connection timed out")                                       \
Packit b5b901
  XX(ETXTBSY, "text file is busy")                                            \
Packit b5b901
  XX(EXDEV, "cross-device link not permitted")                                \
Packit b5b901
  XX(UNKNOWN, "unknown error")                                                \
Packit b5b901
  XX(EOF, "end of file")                                                      \
Packit b5b901
  XX(ENXIO, "no such device or address")                                      \
Packit b5b901
  XX(EMLINK, "too many links")                                                \
Packit b5b901
  XX(EHOSTDOWN, "host is down")                                               \
Packit b5b901
  XX(EREMOTEIO, "remote I/O error")                                           \
Packit b5b901
  XX(ENOTTY, "inappropriate ioctl for device")                                \
Packit b5b901
  XX(EFTYPE, "inappropriate file type or format")                             \
Packit Service e08953
  XX(EILSEQ, "illegal byte sequence")                                         \
Packit b5b901
Packit b5b901
#define UV_HANDLE_TYPE_MAP(XX)                                                \
Packit b5b901
  XX(ASYNC, async)                                                            \
Packit b5b901
  XX(CHECK, check)                                                            \
Packit b5b901
  XX(FS_EVENT, fs_event)                                                      \
Packit b5b901
  XX(FS_POLL, fs_poll)                                                        \
Packit b5b901
  XX(HANDLE, handle)                                                          \
Packit b5b901
  XX(IDLE, idle)                                                              \
Packit b5b901
  XX(NAMED_PIPE, pipe)                                                        \
Packit b5b901
  XX(POLL, poll)                                                              \
Packit b5b901
  XX(PREPARE, prepare)                                                        \
Packit b5b901
  XX(PROCESS, process)                                                        \
Packit b5b901
  XX(STREAM, stream)                                                          \
Packit b5b901
  XX(TCP, tcp)                                                                \
Packit b5b901
  XX(TIMER, timer)                                                            \
Packit b5b901
  XX(TTY, tty)                                                                \
Packit b5b901
  XX(UDP, udp)                                                                \
Packit b5b901
  XX(SIGNAL, signal)                                                          \
Packit b5b901
Packit b5b901
#define UV_REQ_TYPE_MAP(XX)                                                   \
Packit b5b901
  XX(REQ, req)                                                                \
Packit b5b901
  XX(CONNECT, connect)                                                        \
Packit b5b901
  XX(WRITE, write)                                                            \
Packit b5b901
  XX(SHUTDOWN, shutdown)                                                      \
Packit b5b901
  XX(UDP_SEND, udp_send)                                                      \
Packit b5b901
  XX(FS, fs)                                                                  \
Packit b5b901
  XX(WORK, work)                                                              \
Packit b5b901
  XX(GETADDRINFO, getaddrinfo)                                                \
Packit b5b901
  XX(GETNAMEINFO, getnameinfo)                                                \
Packit Service e08953
  XX(RANDOM, random)                                                          \
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
#define XX(code, _) UV_ ## code = UV__ ## code,
Packit b5b901
  UV_ERRNO_MAP(XX)
Packit b5b901
#undef XX
Packit b5b901
  UV_ERRNO_MAX = UV__EOF - 1
Packit b5b901
} uv_errno_t;
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_UNKNOWN_HANDLE = 0,
Packit b5b901
#define XX(uc, lc) UV_##uc,
Packit b5b901
  UV_HANDLE_TYPE_MAP(XX)
Packit b5b901
#undef XX
Packit b5b901
  UV_FILE,
Packit b5b901
  UV_HANDLE_TYPE_MAX
Packit b5b901
} uv_handle_type;
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_UNKNOWN_REQ = 0,
Packit b5b901
#define XX(uc, lc) UV_##uc,
Packit b5b901
  UV_REQ_TYPE_MAP(XX)
Packit b5b901
#undef XX
Packit b5b901
  UV_REQ_TYPE_PRIVATE
Packit b5b901
  UV_REQ_TYPE_MAX
Packit b5b901
} uv_req_type;
Packit b5b901
Packit b5b901
Packit b5b901
/* Handle types. */
Packit b5b901
typedef struct uv_loop_s uv_loop_t;
Packit b5b901
typedef struct uv_handle_s uv_handle_t;
Packit Service e08953
typedef struct uv_dir_s uv_dir_t;
Packit b5b901
typedef struct uv_stream_s uv_stream_t;
Packit b5b901
typedef struct uv_tcp_s uv_tcp_t;
Packit b5b901
typedef struct uv_udp_s uv_udp_t;
Packit b5b901
typedef struct uv_pipe_s uv_pipe_t;
Packit b5b901
typedef struct uv_tty_s uv_tty_t;
Packit b5b901
typedef struct uv_poll_s uv_poll_t;
Packit b5b901
typedef struct uv_timer_s uv_timer_t;
Packit b5b901
typedef struct uv_prepare_s uv_prepare_t;
Packit b5b901
typedef struct uv_check_s uv_check_t;
Packit b5b901
typedef struct uv_idle_s uv_idle_t;
Packit b5b901
typedef struct uv_async_s uv_async_t;
Packit b5b901
typedef struct uv_process_s uv_process_t;
Packit b5b901
typedef struct uv_fs_event_s uv_fs_event_t;
Packit b5b901
typedef struct uv_fs_poll_s uv_fs_poll_t;
Packit b5b901
typedef struct uv_signal_s uv_signal_t;
Packit b5b901
Packit b5b901
/* Request types. */
Packit b5b901
typedef struct uv_req_s uv_req_t;
Packit b5b901
typedef struct uv_getaddrinfo_s uv_getaddrinfo_t;
Packit b5b901
typedef struct uv_getnameinfo_s uv_getnameinfo_t;
Packit b5b901
typedef struct uv_shutdown_s uv_shutdown_t;
Packit b5b901
typedef struct uv_write_s uv_write_t;
Packit b5b901
typedef struct uv_connect_s uv_connect_t;
Packit b5b901
typedef struct uv_udp_send_s uv_udp_send_t;
Packit b5b901
typedef struct uv_fs_s uv_fs_t;
Packit b5b901
typedef struct uv_work_s uv_work_t;
Packit Service e08953
typedef struct uv_random_s uv_random_t;
Packit b5b901
Packit b5b901
/* None of the above. */
Packit Service e08953
typedef struct uv_env_item_s uv_env_item_t;
Packit b5b901
typedef struct uv_cpu_info_s uv_cpu_info_t;
Packit b5b901
typedef struct uv_interface_address_s uv_interface_address_t;
Packit b5b901
typedef struct uv_dirent_s uv_dirent_t;
Packit b5b901
typedef struct uv_passwd_s uv_passwd_t;
Packit Service e08953
typedef struct uv_utsname_s uv_utsname_t;
Packit Service e08953
typedef struct uv_statfs_s uv_statfs_t;
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_LOOP_BLOCK_SIGNAL
Packit b5b901
} uv_loop_option;
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_RUN_DEFAULT = 0,
Packit b5b901
  UV_RUN_ONCE,
Packit b5b901
  UV_RUN_NOWAIT
Packit b5b901
} uv_run_mode;
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN unsigned int uv_version(void);
Packit b5b901
UV_EXTERN const char* uv_version_string(void);
Packit b5b901
Packit b5b901
typedef void* (*uv_malloc_func)(size_t size);
Packit b5b901
typedef void* (*uv_realloc_func)(void* ptr, size_t size);
Packit b5b901
typedef void* (*uv_calloc_func)(size_t count, size_t size);
Packit b5b901
typedef void (*uv_free_func)(void* ptr);
Packit b5b901
Packit Service e08953
UV_EXTERN void uv_library_shutdown(void);
Packit Service e08953
Packit b5b901
UV_EXTERN int uv_replace_allocator(uv_malloc_func malloc_func,
Packit b5b901
                                   uv_realloc_func realloc_func,
Packit b5b901
                                   uv_calloc_func calloc_func,
Packit b5b901
                                   uv_free_func free_func);
Packit b5b901
Packit b5b901
UV_EXTERN uv_loop_t* uv_default_loop(void);
Packit b5b901
UV_EXTERN int uv_loop_init(uv_loop_t* loop);
Packit b5b901
UV_EXTERN int uv_loop_close(uv_loop_t* loop);
Packit b5b901
/*
Packit b5b901
 * NOTE:
Packit b5b901
 *  This function is DEPRECATED (to be removed after 0.12), users should
Packit b5b901
 *  allocate the loop manually and use uv_loop_init instead.
Packit b5b901
 */
Packit b5b901
UV_EXTERN uv_loop_t* uv_loop_new(void);
Packit b5b901
/*
Packit b5b901
 * NOTE:
Packit b5b901
 *  This function is DEPRECATED (to be removed after 0.12). Users should use
Packit b5b901
 *  uv_loop_close and free the memory manually instead.
Packit b5b901
 */
Packit b5b901
UV_EXTERN void uv_loop_delete(uv_loop_t*);
Packit b5b901
UV_EXTERN size_t uv_loop_size(void);
Packit b5b901
UV_EXTERN int uv_loop_alive(const uv_loop_t* loop);
Packit b5b901
UV_EXTERN int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...);
Packit b5b901
UV_EXTERN int uv_loop_fork(uv_loop_t* loop);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode);
Packit b5b901
UV_EXTERN void uv_stop(uv_loop_t*);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_ref(uv_handle_t*);
Packit b5b901
UV_EXTERN void uv_unref(uv_handle_t*);
Packit b5b901
UV_EXTERN int uv_has_ref(const uv_handle_t*);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_update_time(uv_loop_t*);
Packit b5b901
UV_EXTERN uint64_t uv_now(const uv_loop_t*);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_backend_fd(const uv_loop_t*);
Packit b5b901
UV_EXTERN int uv_backend_timeout(const uv_loop_t*);
Packit b5b901
Packit b5b901
typedef void (*uv_alloc_cb)(uv_handle_t* handle,
Packit b5b901
                            size_t suggested_size,
Packit b5b901
                            uv_buf_t* buf);
Packit b5b901
typedef void (*uv_read_cb)(uv_stream_t* stream,
Packit b5b901
                           ssize_t nread,
Packit b5b901
                           const uv_buf_t* buf);
Packit b5b901
typedef void (*uv_write_cb)(uv_write_t* req, int status);
Packit b5b901
typedef void (*uv_connect_cb)(uv_connect_t* req, int status);
Packit b5b901
typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status);
Packit b5b901
typedef void (*uv_connection_cb)(uv_stream_t* server, int status);
Packit b5b901
typedef void (*uv_close_cb)(uv_handle_t* handle);
Packit b5b901
typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events);
Packit b5b901
typedef void (*uv_timer_cb)(uv_timer_t* handle);
Packit b5b901
typedef void (*uv_async_cb)(uv_async_t* handle);
Packit b5b901
typedef void (*uv_prepare_cb)(uv_prepare_t* handle);
Packit b5b901
typedef void (*uv_check_cb)(uv_check_t* handle);
Packit b5b901
typedef void (*uv_idle_cb)(uv_idle_t* handle);
Packit b5b901
typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal);
Packit b5b901
typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg);
Packit b5b901
typedef void (*uv_fs_cb)(uv_fs_t* req);
Packit b5b901
typedef void (*uv_work_cb)(uv_work_t* req);
Packit b5b901
typedef void (*uv_after_work_cb)(uv_work_t* req, int status);
Packit b5b901
typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req,
Packit b5b901
                                  int status,
Packit b5b901
                                  struct addrinfo* res);
Packit b5b901
typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req,
Packit b5b901
                                  int status,
Packit b5b901
                                  const char* hostname,
Packit b5b901
                                  const char* service);
Packit Service e08953
typedef void (*uv_random_cb)(uv_random_t* req,
Packit Service e08953
                             int status,
Packit Service e08953
                             void* buf,
Packit Service e08953
                             size_t buflen);
Packit b5b901
Packit b5b901
typedef struct {
Packit b5b901
  long tv_sec;
Packit b5b901
  long tv_nsec;
Packit b5b901
} uv_timespec_t;
Packit b5b901
Packit b5b901
Packit b5b901
typedef struct {
Packit b5b901
  uint64_t st_dev;
Packit b5b901
  uint64_t st_mode;
Packit b5b901
  uint64_t st_nlink;
Packit b5b901
  uint64_t st_uid;
Packit b5b901
  uint64_t st_gid;
Packit b5b901
  uint64_t st_rdev;
Packit b5b901
  uint64_t st_ino;
Packit b5b901
  uint64_t st_size;
Packit b5b901
  uint64_t st_blksize;
Packit b5b901
  uint64_t st_blocks;
Packit b5b901
  uint64_t st_flags;
Packit b5b901
  uint64_t st_gen;
Packit b5b901
  uv_timespec_t st_atim;
Packit b5b901
  uv_timespec_t st_mtim;
Packit b5b901
  uv_timespec_t st_ctim;
Packit b5b901
  uv_timespec_t st_birthtim;
Packit b5b901
} uv_stat_t;
Packit b5b901
Packit b5b901
Packit b5b901
typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle,
Packit b5b901
                               const char* filename,
Packit b5b901
                               int events,
Packit b5b901
                               int status);
Packit b5b901
Packit b5b901
typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle,
Packit b5b901
                              int status,
Packit b5b901
                              const uv_stat_t* prev,
Packit b5b901
                              const uv_stat_t* curr);
Packit b5b901
Packit b5b901
typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum);
Packit b5b901
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_LEAVE_GROUP = 0,
Packit b5b901
  UV_JOIN_GROUP
Packit b5b901
} uv_membership;
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN int uv_translate_sys_error(int sys_errno);
Packit b5b901
Packit b5b901
UV_EXTERN const char* uv_strerror(int err);
Packit b5b901
UV_EXTERN char* uv_strerror_r(int err, char* buf, size_t buflen);
Packit b5b901
Packit b5b901
UV_EXTERN const char* uv_err_name(int err);
Packit b5b901
UV_EXTERN char* uv_err_name_r(int err, char* buf, size_t buflen);
Packit b5b901
Packit b5b901
Packit b5b901
#define UV_REQ_FIELDS                                                         \
Packit b5b901
  /* public */                                                                \
Packit b5b901
  void* data;                                                                 \
Packit b5b901
  /* read-only */                                                             \
Packit b5b901
  uv_req_type type;                                                           \
Packit b5b901
  /* private */                                                               \
Packit b5b901
  void* reserved[6];                                                          \
Packit b5b901
  UV_REQ_PRIVATE_FIELDS                                                       \
Packit b5b901
Packit b5b901
/* Abstract base class of all requests. */
Packit b5b901
struct uv_req_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
/* Platform-specific request types. */
Packit b5b901
UV_PRIVATE_REQ_TYPES
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN int uv_shutdown(uv_shutdown_t* req,
Packit b5b901
                          uv_stream_t* handle,
Packit b5b901
                          uv_shutdown_cb cb);
Packit b5b901
Packit b5b901
struct uv_shutdown_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_stream_t* handle;
Packit b5b901
  uv_shutdown_cb cb;
Packit b5b901
  UV_SHUTDOWN_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
#define UV_HANDLE_FIELDS                                                      \
Packit b5b901
  /* public */                                                                \
Packit b5b901
  void* data;                                                                 \
Packit b5b901
  /* read-only */                                                             \
Packit b5b901
  uv_loop_t* loop;                                                            \
Packit b5b901
  uv_handle_type type;                                                        \
Packit b5b901
  /* private */                                                               \
Packit b5b901
  uv_close_cb close_cb;                                                       \
Packit b5b901
  void* handle_queue[2];                                                      \
Packit b5b901
  union {                                                                     \
Packit b5b901
    int fd;                                                                   \
Packit b5b901
    void* reserved[4];                                                        \
Packit b5b901
  } u;                                                                        \
Packit b5b901
  UV_HANDLE_PRIVATE_FIELDS                                                    \
Packit b5b901
Packit b5b901
/* The abstract base class of all handles. */
Packit b5b901
struct uv_handle_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN size_t uv_handle_size(uv_handle_type type);
Packit b5b901
UV_EXTERN uv_handle_type uv_handle_get_type(const uv_handle_t* handle);
Packit b5b901
UV_EXTERN const char* uv_handle_type_name(uv_handle_type type);
Packit b5b901
UV_EXTERN void* uv_handle_get_data(const uv_handle_t* handle);
Packit b5b901
UV_EXTERN uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle);
Packit b5b901
UV_EXTERN void uv_handle_set_data(uv_handle_t* handle, void* data);
Packit b5b901
Packit b5b901
UV_EXTERN size_t uv_req_size(uv_req_type type);
Packit b5b901
UV_EXTERN void* uv_req_get_data(const uv_req_t* req);
Packit b5b901
UV_EXTERN void uv_req_set_data(uv_req_t* req, void* data);
Packit b5b901
UV_EXTERN uv_req_type uv_req_get_type(const uv_req_t* req);
Packit b5b901
UV_EXTERN const char* uv_req_type_name(uv_req_type type);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_is_active(const uv_handle_t* handle);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg);
Packit b5b901
Packit b5b901
/* Helpers for ad hoc debugging, no API/ABI stability guaranteed. */
Packit b5b901
UV_EXTERN void uv_print_all_handles(uv_loop_t* loop, FILE* stream);
Packit b5b901
UV_EXTERN void uv_print_active_handles(uv_loop_t* loop, FILE* stream);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_send_buffer_size(uv_handle_t* handle, int* value);
Packit b5b901
UV_EXTERN int uv_recv_buffer_size(uv_handle_t* handle, int* value);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd);
Packit b5b901
Packit b5b901
UV_EXTERN uv_buf_t uv_buf_init(char* base, unsigned int len);
Packit b5b901
Packit b5b901
Packit b5b901
#define UV_STREAM_FIELDS                                                      \
Packit b5b901
  /* number of bytes queued for writing */                                    \
Packit b5b901
  size_t write_queue_size;                                                    \
Packit b5b901
  uv_alloc_cb alloc_cb;                                                       \
Packit b5b901
  uv_read_cb read_cb;                                                         \
Packit b5b901
  /* private */                                                               \
Packit b5b901
  UV_STREAM_PRIVATE_FIELDS
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_stream_t is a subclass of uv_handle_t.
Packit b5b901
 *
Packit b5b901
 * uv_stream is an abstract class.
Packit b5b901
 *
Packit b5b901
 * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t and uv_tty_t.
Packit b5b901
 */
Packit b5b901
struct uv_stream_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_STREAM_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN size_t uv_stream_get_write_queue_size(const uv_stream_t* stream);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb);
Packit b5b901
UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_read_start(uv_stream_t*,
Packit b5b901
                            uv_alloc_cb alloc_cb,
Packit b5b901
                            uv_read_cb read_cb);
Packit b5b901
UV_EXTERN int uv_read_stop(uv_stream_t*);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_write(uv_write_t* req,
Packit b5b901
                       uv_stream_t* handle,
Packit b5b901
                       const uv_buf_t bufs[],
Packit b5b901
                       unsigned int nbufs,
Packit b5b901
                       uv_write_cb cb);
Packit b5b901
UV_EXTERN int uv_write2(uv_write_t* req,
Packit b5b901
                        uv_stream_t* handle,
Packit b5b901
                        const uv_buf_t bufs[],
Packit b5b901
                        unsigned int nbufs,
Packit b5b901
                        uv_stream_t* send_handle,
Packit b5b901
                        uv_write_cb cb);
Packit b5b901
UV_EXTERN int uv_try_write(uv_stream_t* handle,
Packit b5b901
                           const uv_buf_t bufs[],
Packit b5b901
                           unsigned int nbufs);
Packit b5b901
Packit b5b901
/* uv_write_t is a subclass of uv_req_t. */
Packit b5b901
struct uv_write_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_write_cb cb;
Packit b5b901
  uv_stream_t* send_handle; /* TODO: make private and unix-only in v2.x. */
Packit b5b901
  uv_stream_t* handle;
Packit b5b901
  UV_WRITE_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN int uv_is_readable(const uv_stream_t* handle);
Packit b5b901
UV_EXTERN int uv_is_writable(const uv_stream_t* handle);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_stream_set_blocking(uv_stream_t* handle, int blocking);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_is_closing(const uv_handle_t* handle);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_tcp_t is a subclass of uv_stream_t.
Packit b5b901
 *
Packit b5b901
 * Represents a TCP stream or TCP server.
Packit b5b901
 */
Packit b5b901
struct uv_tcp_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_STREAM_FIELDS
Packit b5b901
  UV_TCP_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle);
Packit b5b901
UV_EXTERN int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags);
Packit b5b901
UV_EXTERN int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock);
Packit b5b901
UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable);
Packit b5b901
UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle,
Packit b5b901
                               int enable,
Packit b5b901
                               unsigned int delay);
Packit b5b901
UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable);
Packit b5b901
Packit b5b901
enum uv_tcp_flags {
Packit b5b901
  /* Used with uv_tcp_bind, when an IPv6 address is used. */
Packit b5b901
  UV_TCP_IPV6ONLY = 1
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle,
Packit b5b901
                          const struct sockaddr* addr,
Packit b5b901
                          unsigned int flags);
Packit b5b901
UV_EXTERN int uv_tcp_getsockname(const uv_tcp_t* handle,
Packit b5b901
                                 struct sockaddr* name,
Packit b5b901
                                 int* namelen);
Packit b5b901
UV_EXTERN int uv_tcp_getpeername(const uv_tcp_t* handle,
Packit b5b901
                                 struct sockaddr* name,
Packit b5b901
                                 int* namelen);
Packit Service e08953
UV_EXTERN int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb);
Packit b5b901
UV_EXTERN int uv_tcp_connect(uv_connect_t* req,
Packit b5b901
                             uv_tcp_t* handle,
Packit b5b901
                             const struct sockaddr* addr,
Packit b5b901
                             uv_connect_cb cb);
Packit b5b901
Packit b5b901
/* uv_connect_t is a subclass of uv_req_t. */
Packit b5b901
struct uv_connect_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_connect_cb cb;
Packit b5b901
  uv_stream_t* handle;
Packit b5b901
  UV_CONNECT_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * UDP support.
Packit b5b901
 */
Packit b5b901
Packit b5b901
enum uv_udp_flags {
Packit b5b901
  /* Disables dual stack mode. */
Packit b5b901
  UV_UDP_IPV6ONLY = 1,
Packit b5b901
  /*
Packit b5b901
   * Indicates message was truncated because read buffer was too small. The
Packit b5b901
   * remainder was discarded by the OS. Used in uv_udp_recv_cb.
Packit b5b901
   */
Packit b5b901
  UV_UDP_PARTIAL = 2,
Packit b5b901
  /*
Packit b5b901
   * Indicates if SO_REUSEADDR will be set when binding the handle.
Packit b5b901
   * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other
Packit b5b901
   * Unix platforms, it sets the SO_REUSEADDR flag.  What that means is that
Packit b5b901
   * multiple threads or processes can bind to the same address without error
Packit b5b901
   * (provided they all set the flag) but only the last one to bind will receive
Packit b5b901
   * any traffic, in effect "stealing" the port from the previous listener.
Packit b5b901
   */
Packit Service e08953
  UV_UDP_REUSEADDR = 4,
Packit Service e08953
  /*
Packit Service e08953
   * Indicates that the message was received by recvmmsg, so the buffer provided
Packit Service e08953
   * must not be freed by the recv_cb callback.
Packit Service e08953
   */
Packit Service e08953
  UV_UDP_MMSG_CHUNK = 8,
Packit Service e08953
Packit Service e08953
  /*
Packit Service e08953
   * Indicates that recvmmsg should be used, if available.
Packit Service e08953
   */
Packit Service e08953
  UV_UDP_RECVMMSG = 256
Packit b5b901
};
Packit b5b901
Packit b5b901
typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status);
Packit b5b901
typedef void (*uv_udp_recv_cb)(uv_udp_t* handle,
Packit b5b901
                               ssize_t nread,
Packit b5b901
                               const uv_buf_t* buf,
Packit b5b901
                               const struct sockaddr* addr,
Packit b5b901
                               unsigned flags);
Packit b5b901
Packit b5b901
/* uv_udp_t is a subclass of uv_handle_t. */
Packit b5b901
struct uv_udp_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  /* read-only */
Packit b5b901
  /*
Packit b5b901
   * Number of bytes queued for sending. This field strictly shows how much
Packit b5b901
   * information is currently queued.
Packit b5b901
   */
Packit b5b901
  size_t send_queue_size;
Packit b5b901
  /*
Packit b5b901
   * Number of send requests currently in the queue awaiting to be processed.
Packit b5b901
   */
Packit b5b901
  size_t send_queue_count;
Packit b5b901
  UV_UDP_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
/* uv_udp_send_t is a subclass of uv_req_t. */
Packit b5b901
struct uv_udp_send_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_udp_t* handle;
Packit b5b901
  uv_udp_send_cb cb;
Packit b5b901
  UV_UDP_SEND_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle);
Packit b5b901
UV_EXTERN int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags);
Packit b5b901
UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock);
Packit b5b901
UV_EXTERN int uv_udp_bind(uv_udp_t* handle,
Packit b5b901
                          const struct sockaddr* addr,
Packit b5b901
                          unsigned int flags);
Packit Service e08953
UV_EXTERN int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr);
Packit b5b901
Packit Service e08953
UV_EXTERN int uv_udp_getpeername(const uv_udp_t* handle,
Packit Service e08953
                                 struct sockaddr* name,
Packit Service e08953
                                 int* namelen);
Packit b5b901
UV_EXTERN int uv_udp_getsockname(const uv_udp_t* handle,
Packit b5b901
                                 struct sockaddr* name,
Packit b5b901
                                 int* namelen);
Packit b5b901
UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle,
Packit b5b901
                                    const char* multicast_addr,
Packit b5b901
                                    const char* interface_addr,
Packit b5b901
                                    uv_membership membership);
Packit Service e08953
UV_EXTERN int uv_udp_set_source_membership(uv_udp_t* handle,
Packit Service e08953
                                           const char* multicast_addr,
Packit Service e08953
                                           const char* interface_addr,
Packit Service e08953
                                           const char* source_addr,
Packit Service e08953
                                           uv_membership membership);
Packit b5b901
UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on);
Packit b5b901
UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl);
Packit b5b901
UV_EXTERN int uv_udp_set_multicast_interface(uv_udp_t* handle,
Packit b5b901
                                             const char* interface_addr);
Packit b5b901
UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on);
Packit b5b901
UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl);
Packit b5b901
UV_EXTERN int uv_udp_send(uv_udp_send_t* req,
Packit b5b901
                          uv_udp_t* handle,
Packit b5b901
                          const uv_buf_t bufs[],
Packit b5b901
                          unsigned int nbufs,
Packit b5b901
                          const struct sockaddr* addr,
Packit b5b901
                          uv_udp_send_cb send_cb);
Packit b5b901
UV_EXTERN int uv_udp_try_send(uv_udp_t* handle,
Packit b5b901
                              const uv_buf_t bufs[],
Packit b5b901
                              unsigned int nbufs,
Packit b5b901
                              const struct sockaddr* addr);
Packit b5b901
UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle,
Packit b5b901
                                uv_alloc_cb alloc_cb,
Packit b5b901
                                uv_udp_recv_cb recv_cb);
Packit b5b901
UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle);
Packit b5b901
UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle);
Packit b5b901
UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_tty_t is a subclass of uv_stream_t.
Packit b5b901
 *
Packit b5b901
 * Representing a stream for the console.
Packit b5b901
 */
Packit b5b901
struct uv_tty_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_STREAM_FIELDS
Packit b5b901
  UV_TTY_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  /* Initial/normal terminal mode */
Packit b5b901
  UV_TTY_MODE_NORMAL,
Packit b5b901
  /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */
Packit b5b901
  UV_TTY_MODE_RAW,
Packit b5b901
  /* Binary-safe I/O mode for IPC (Unix-only) */
Packit b5b901
  UV_TTY_MODE_IO
Packit b5b901
} uv_tty_mode_t;
Packit b5b901
Packit Service e08953
typedef enum {
Packit Service e08953
  /*
Packit Service e08953
   * The console supports handling of virtual terminal sequences
Packit Service e08953
   * (Windows10 new console, ConEmu)
Packit Service e08953
   */
Packit Service e08953
  UV_TTY_SUPPORTED,
Packit Service e08953
  /* The console cannot process the virtual terminal sequence.  (Legacy
Packit Service e08953
   * console)
Packit Service e08953
   */
Packit Service e08953
  UV_TTY_UNSUPPORTED
Packit Service e08953
} uv_tty_vtermstate_t;
Packit Service e08953
Packit Service e08953
Packit b5b901
UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable);
Packit b5b901
UV_EXTERN int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode);
Packit b5b901
UV_EXTERN int uv_tty_reset_mode(void);
Packit b5b901
UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height);
Packit Service e08953
UV_EXTERN void uv_tty_set_vterm_state(uv_tty_vtermstate_t state);
Packit Service e08953
UV_EXTERN int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state);
Packit b5b901
Packit b5b901
#ifdef __cplusplus
Packit b5b901
extern "C++" {
Packit b5b901
Packit b5b901
inline int uv_tty_set_mode(uv_tty_t* handle, int mode) {
Packit b5b901
  return uv_tty_set_mode(handle, static_cast<uv_tty_mode_t>(mode));
Packit b5b901
}
Packit b5b901
Packit b5b901
}
Packit b5b901
#endif
Packit b5b901
Packit b5b901
UV_EXTERN uv_handle_type uv_guess_handle(uv_file file);
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_pipe_t is a subclass of uv_stream_t.
Packit b5b901
 *
Packit b5b901
 * Representing a pipe stream or pipe server. On Windows this is a Named
Packit b5b901
 * Pipe. On Unix this is a Unix domain socket.
Packit b5b901
 */
Packit b5b901
struct uv_pipe_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_STREAM_FIELDS
Packit b5b901
  int ipc; /* non-zero if this pipe is used for passing handles */
Packit b5b901
  UV_PIPE_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc);
Packit b5b901
UV_EXTERN int uv_pipe_open(uv_pipe_t*, uv_file file);
Packit b5b901
UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name);
Packit b5b901
UV_EXTERN void uv_pipe_connect(uv_connect_t* req,
Packit b5b901
                               uv_pipe_t* handle,
Packit b5b901
                               const char* name,
Packit b5b901
                               uv_connect_cb cb);
Packit b5b901
UV_EXTERN int uv_pipe_getsockname(const uv_pipe_t* handle,
Packit b5b901
                                  char* buffer,
Packit b5b901
                                  size_t* size);
Packit b5b901
UV_EXTERN int uv_pipe_getpeername(const uv_pipe_t* handle,
Packit b5b901
                                  char* buffer,
Packit b5b901
                                  size_t* size);
Packit b5b901
UV_EXTERN void uv_pipe_pending_instances(uv_pipe_t* handle, int count);
Packit b5b901
UV_EXTERN int uv_pipe_pending_count(uv_pipe_t* handle);
Packit b5b901
UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle);
Packit b5b901
UV_EXTERN int uv_pipe_chmod(uv_pipe_t* handle, int flags);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_poll_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  uv_poll_cb poll_cb;
Packit b5b901
  UV_POLL_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
enum uv_poll_event {
Packit b5b901
  UV_READABLE = 1,
Packit b5b901
  UV_WRITABLE = 2,
Packit b5b901
  UV_DISCONNECT = 4,
Packit b5b901
  UV_PRIORITIZED = 8
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd);
Packit b5b901
UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop,
Packit b5b901
                                  uv_poll_t* handle,
Packit b5b901
                                  uv_os_sock_t socket);
Packit b5b901
UV_EXTERN int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb);
Packit b5b901
UV_EXTERN int uv_poll_stop(uv_poll_t* handle);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_prepare_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_PREPARE_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare);
Packit b5b901
UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb);
Packit b5b901
UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_check_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_CHECK_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check);
Packit b5b901
UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb);
Packit b5b901
UV_EXTERN int uv_check_stop(uv_check_t* check);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_idle_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_IDLE_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle);
Packit b5b901
UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb);
Packit b5b901
UV_EXTERN int uv_idle_stop(uv_idle_t* idle);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_async_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_ASYNC_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_async_init(uv_loop_t*,
Packit b5b901
                            uv_async_t* async,
Packit b5b901
                            uv_async_cb async_cb);
Packit b5b901
UV_EXTERN int uv_async_send(uv_async_t* async);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_timer_t is a subclass of uv_handle_t.
Packit b5b901
 *
Packit b5b901
 * Used to get woken up at a specified time in the future.
Packit b5b901
 */
Packit b5b901
struct uv_timer_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  UV_TIMER_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* handle);
Packit b5b901
UV_EXTERN int uv_timer_start(uv_timer_t* handle,
Packit b5b901
                             uv_timer_cb cb,
Packit b5b901
                             uint64_t timeout,
Packit b5b901
                             uint64_t repeat);
Packit b5b901
UV_EXTERN int uv_timer_stop(uv_timer_t* handle);
Packit b5b901
UV_EXTERN int uv_timer_again(uv_timer_t* handle);
Packit b5b901
UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat);
Packit b5b901
UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_getaddrinfo_t is a subclass of uv_req_t.
Packit b5b901
 *
Packit b5b901
 * Request object for uv_getaddrinfo.
Packit b5b901
 */
Packit b5b901
struct uv_getaddrinfo_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  /* read-only */
Packit b5b901
  uv_loop_t* loop;
Packit b5b901
  /* struct addrinfo* addrinfo is marked as private, but it really isn't. */
Packit b5b901
  UV_GETADDRINFO_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop,
Packit b5b901
                             uv_getaddrinfo_t* req,
Packit b5b901
                             uv_getaddrinfo_cb getaddrinfo_cb,
Packit b5b901
                             const char* node,
Packit b5b901
                             const char* service,
Packit b5b901
                             const struct addrinfo* hints);
Packit b5b901
UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
* uv_getnameinfo_t is a subclass of uv_req_t.
Packit b5b901
*
Packit b5b901
* Request object for uv_getnameinfo.
Packit b5b901
*/
Packit b5b901
struct uv_getnameinfo_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  /* read-only */
Packit b5b901
  uv_loop_t* loop;
Packit b5b901
  /* host and service are marked as private, but they really aren't. */
Packit b5b901
  UV_GETNAMEINFO_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_getnameinfo(uv_loop_t* loop,
Packit b5b901
                             uv_getnameinfo_t* req,
Packit b5b901
                             uv_getnameinfo_cb getnameinfo_cb,
Packit b5b901
                             const struct sockaddr* addr,
Packit b5b901
                             int flags);
Packit b5b901
Packit b5b901
Packit b5b901
/* uv_spawn() options. */
Packit b5b901
typedef enum {
Packit b5b901
  UV_IGNORE         = 0x00,
Packit b5b901
  UV_CREATE_PIPE    = 0x01,
Packit b5b901
  UV_INHERIT_FD     = 0x02,
Packit b5b901
  UV_INHERIT_STREAM = 0x04,
Packit b5b901
Packit b5b901
  /*
Packit b5b901
   * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE
Packit b5b901
   * determine the direction of flow, from the child process' perspective. Both
Packit b5b901
   * flags may be specified to create a duplex data stream.
Packit b5b901
   */
Packit b5b901
  UV_READABLE_PIPE  = 0x10,
Packit b5b901
  UV_WRITABLE_PIPE  = 0x20,
Packit b5b901
Packit b5b901
  /*
Packit b5b901
   * Open the child pipe handle in overlapped mode on Windows.
Packit b5b901
   * On Unix it is silently ignored.
Packit b5b901
   */
Packit b5b901
  UV_OVERLAPPED_PIPE = 0x40
Packit b5b901
} uv_stdio_flags;
Packit b5b901
Packit b5b901
typedef struct uv_stdio_container_s {
Packit b5b901
  uv_stdio_flags flags;
Packit b5b901
Packit b5b901
  union {
Packit b5b901
    uv_stream_t* stream;
Packit b5b901
    int fd;
Packit b5b901
  } data;
Packit b5b901
} uv_stdio_container_t;
Packit b5b901
Packit b5b901
typedef struct uv_process_options_s {
Packit b5b901
  uv_exit_cb exit_cb; /* Called after the process exits. */
Packit b5b901
  const char* file;   /* Path to program to execute. */
Packit b5b901
  /*
Packit b5b901
   * Command line arguments. args[0] should be the path to the program. On
Packit b5b901
   * Windows this uses CreateProcess which concatenates the arguments into a
Packit b5b901
   * string this can cause some strange errors. See the note at
Packit b5b901
   * windows_verbatim_arguments.
Packit b5b901
   */
Packit b5b901
  char** args;
Packit b5b901
  /*
Packit b5b901
   * This will be set as the environ variable in the subprocess. If this is
Packit b5b901
   * NULL then the parents environ will be used.
Packit b5b901
   */
Packit b5b901
  char** env;
Packit b5b901
  /*
Packit b5b901
   * If non-null this represents a directory the subprocess should execute
Packit b5b901
   * in. Stands for current working directory.
Packit b5b901
   */
Packit b5b901
  const char* cwd;
Packit b5b901
  /*
Packit b5b901
   * Various flags that control how uv_spawn() behaves. See the definition of
Packit b5b901
   * `enum uv_process_flags` below.
Packit b5b901
   */
Packit b5b901
  unsigned int flags;
Packit b5b901
  /*
Packit b5b901
   * The `stdio` field points to an array of uv_stdio_container_t structs that
Packit b5b901
   * describe the file descriptors that will be made available to the child
Packit b5b901
   * process. The convention is that stdio[0] points to stdin, fd 1 is used for
Packit b5b901
   * stdout, and fd 2 is stderr.
Packit b5b901
   *
Packit b5b901
   * Note that on windows file descriptors greater than 2 are available to the
Packit b5b901
   * child process only if the child processes uses the MSVCRT runtime.
Packit b5b901
   */
Packit b5b901
  int stdio_count;
Packit b5b901
  uv_stdio_container_t* stdio;
Packit b5b901
  /*
Packit b5b901
   * Libuv can change the child process' user/group id. This happens only when
Packit b5b901
   * the appropriate bits are set in the flags fields. This is not supported on
Packit b5b901
   * windows; uv_spawn() will fail and set the error to UV_ENOTSUP.
Packit b5b901
   */
Packit b5b901
  uv_uid_t uid;
Packit b5b901
  uv_gid_t gid;
Packit b5b901
} uv_process_options_t;
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * These are the flags that can be used for the uv_process_options.flags field.
Packit b5b901
 */
Packit b5b901
enum uv_process_flags {
Packit b5b901
  /*
Packit b5b901
   * Set the child process' user id. The user id is supplied in the `uid` field
Packit b5b901
   * of the options struct. This does not work on windows; setting this flag
Packit b5b901
   * will cause uv_spawn() to fail.
Packit b5b901
   */
Packit b5b901
  UV_PROCESS_SETUID = (1 << 0),
Packit b5b901
  /*
Packit b5b901
   * Set the child process' group id. The user id is supplied in the `gid`
Packit b5b901
   * field of the options struct. This does not work on windows; setting this
Packit b5b901
   * flag will cause uv_spawn() to fail.
Packit b5b901
   */
Packit b5b901
  UV_PROCESS_SETGID = (1 << 1),
Packit b5b901
  /*
Packit b5b901
   * Do not wrap any arguments in quotes, or perform any other escaping, when
Packit b5b901
   * converting the argument list into a command line string. This option is
Packit b5b901
   * only meaningful on Windows systems. On Unix it is silently ignored.
Packit b5b901
   */
Packit b5b901
  UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2),
Packit b5b901
  /*
Packit b5b901
   * Spawn the child process in a detached state - this will make it a process
Packit b5b901
   * group leader, and will effectively enable the child to keep running after
Packit b5b901
   * the parent exits.  Note that the child process will still keep the
Packit b5b901
   * parent's event loop alive unless the parent process calls uv_unref() on
Packit b5b901
   * the child's process handle.
Packit b5b901
   */
Packit b5b901
  UV_PROCESS_DETACHED = (1 << 3),
Packit b5b901
  /*
Packit Service e08953
   * Hide the subprocess window that would normally be created. This option is
Packit Service e08953
   * only meaningful on Windows systems. On Unix it is silently ignored.
Packit Service e08953
   */
Packit Service e08953
  UV_PROCESS_WINDOWS_HIDE = (1 << 4),
Packit Service e08953
  /*
Packit b5b901
   * Hide the subprocess console window that would normally be created. This
Packit b5b901
   * option is only meaningful on Windows systems. On Unix it is silently
Packit b5b901
   * ignored.
Packit b5b901
   */
Packit Service e08953
  UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5),
Packit Service e08953
  /*
Packit Service e08953
   * Hide the subprocess GUI window that would normally be created. This
Packit Service e08953
   * option is only meaningful on Windows systems. On Unix it is silently
Packit Service e08953
   * ignored.
Packit Service e08953
   */
Packit Service e08953
  UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6)
Packit b5b901
};
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_process_t is a subclass of uv_handle_t.
Packit b5b901
 */
Packit b5b901
struct uv_process_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  uv_exit_cb exit_cb;
Packit b5b901
  int pid;
Packit b5b901
  UV_PROCESS_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_spawn(uv_loop_t* loop,
Packit b5b901
                       uv_process_t* handle,
Packit b5b901
                       const uv_process_options_t* options);
Packit b5b901
UV_EXTERN int uv_process_kill(uv_process_t*, int signum);
Packit b5b901
UV_EXTERN int uv_kill(int pid, int signum);
Packit b5b901
UV_EXTERN uv_pid_t uv_process_get_pid(const uv_process_t*);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_work_t is a subclass of uv_req_t.
Packit b5b901
 */
Packit b5b901
struct uv_work_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_loop_t* loop;
Packit b5b901
  uv_work_cb work_cb;
Packit b5b901
  uv_after_work_cb after_work_cb;
Packit b5b901
  UV_WORK_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_queue_work(uv_loop_t* loop,
Packit b5b901
                            uv_work_t* req,
Packit b5b901
                            uv_work_cb work_cb,
Packit b5b901
                            uv_after_work_cb after_work_cb);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_cancel(uv_req_t* req);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_cpu_times_s {
Packit Service e08953
  uint64_t user; /* milliseconds */
Packit Service e08953
  uint64_t nice; /* milliseconds */
Packit Service e08953
  uint64_t sys; /* milliseconds */
Packit Service e08953
  uint64_t idle; /* milliseconds */
Packit Service e08953
  uint64_t irq; /* milliseconds */
Packit b5b901
};
Packit b5b901
Packit b5b901
struct uv_cpu_info_s {
Packit b5b901
  char* model;
Packit b5b901
  int speed;
Packit b5b901
  struct uv_cpu_times_s cpu_times;
Packit b5b901
};
Packit b5b901
Packit b5b901
struct uv_interface_address_s {
Packit b5b901
  char* name;
Packit b5b901
  char phys_addr[6];
Packit b5b901
  int is_internal;
Packit b5b901
  union {
Packit b5b901
    struct sockaddr_in address4;
Packit b5b901
    struct sockaddr_in6 address6;
Packit b5b901
  } address;
Packit b5b901
  union {
Packit b5b901
    struct sockaddr_in netmask4;
Packit b5b901
    struct sockaddr_in6 netmask6;
Packit b5b901
  } netmask;
Packit b5b901
};
Packit b5b901
Packit b5b901
struct uv_passwd_s {
Packit b5b901
  char* username;
Packit b5b901
  long uid;
Packit b5b901
  long gid;
Packit b5b901
  char* shell;
Packit b5b901
  char* homedir;
Packit b5b901
};
Packit b5b901
Packit Service e08953
struct uv_utsname_s {
Packit Service e08953
  char sysname[256];
Packit Service e08953
  char release[256];
Packit Service e08953
  char version[256];
Packit Service e08953
  char machine[256];
Packit Service e08953
  /* This struct does not contain the nodename and domainname fields present in
Packit Service e08953
     the utsname type. domainname is a GNU extension. Both fields are referred
Packit Service e08953
     to as meaningless in the docs. */
Packit Service e08953
};
Packit Service e08953
Packit Service e08953
struct uv_statfs_s {
Packit Service e08953
  uint64_t f_type;
Packit Service e08953
  uint64_t f_bsize;
Packit Service e08953
  uint64_t f_blocks;
Packit Service e08953
  uint64_t f_bfree;
Packit Service e08953
  uint64_t f_bavail;
Packit Service e08953
  uint64_t f_files;
Packit Service e08953
  uint64_t f_ffree;
Packit Service e08953
  uint64_t f_spare[4];
Packit Service e08953
};
Packit Service e08953
Packit b5b901
typedef enum {
Packit b5b901
  UV_DIRENT_UNKNOWN,
Packit b5b901
  UV_DIRENT_FILE,
Packit b5b901
  UV_DIRENT_DIR,
Packit b5b901
  UV_DIRENT_LINK,
Packit b5b901
  UV_DIRENT_FIFO,
Packit b5b901
  UV_DIRENT_SOCKET,
Packit b5b901
  UV_DIRENT_CHAR,
Packit b5b901
  UV_DIRENT_BLOCK
Packit b5b901
} uv_dirent_type_t;
Packit b5b901
Packit b5b901
struct uv_dirent_s {
Packit b5b901
  const char* name;
Packit b5b901
  uv_dirent_type_t type;
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN char** uv_setup_args(int argc, char** argv);
Packit b5b901
UV_EXTERN int uv_get_process_title(char* buffer, size_t size);
Packit b5b901
UV_EXTERN int uv_set_process_title(const char* title);
Packit b5b901
UV_EXTERN int uv_resident_set_memory(size_t* rss);
Packit b5b901
UV_EXTERN int uv_uptime(double* uptime);
Packit b5b901
UV_EXTERN uv_os_fd_t uv_get_osfhandle(int fd);
Packit b5b901
UV_EXTERN int uv_open_osfhandle(uv_os_fd_t os_fd);
Packit b5b901
Packit b5b901
typedef struct {
Packit b5b901
  long tv_sec;
Packit b5b901
  long tv_usec;
Packit b5b901
} uv_timeval_t;
Packit b5b901
Packit b5b901
typedef struct {
Packit Service e08953
  int64_t tv_sec;
Packit Service e08953
  int32_t tv_usec;
Packit Service e08953
} uv_timeval64_t;
Packit Service e08953
Packit Service e08953
typedef struct {
Packit b5b901
   uv_timeval_t ru_utime; /* user CPU time used */
Packit b5b901
   uv_timeval_t ru_stime; /* system CPU time used */
Packit b5b901
   uint64_t ru_maxrss;    /* maximum resident set size */
Packit b5b901
   uint64_t ru_ixrss;     /* integral shared memory size */
Packit b5b901
   uint64_t ru_idrss;     /* integral unshared data size */
Packit b5b901
   uint64_t ru_isrss;     /* integral unshared stack size */
Packit b5b901
   uint64_t ru_minflt;    /* page reclaims (soft page faults) */
Packit b5b901
   uint64_t ru_majflt;    /* page faults (hard page faults) */
Packit b5b901
   uint64_t ru_nswap;     /* swaps */
Packit b5b901
   uint64_t ru_inblock;   /* block input operations */
Packit b5b901
   uint64_t ru_oublock;   /* block output operations */
Packit b5b901
   uint64_t ru_msgsnd;    /* IPC messages sent */
Packit b5b901
   uint64_t ru_msgrcv;    /* IPC messages received */
Packit b5b901
   uint64_t ru_nsignals;  /* signals received */
Packit b5b901
   uint64_t ru_nvcsw;     /* voluntary context switches */
Packit b5b901
   uint64_t ru_nivcsw;    /* involuntary context switches */
Packit b5b901
} uv_rusage_t;
Packit b5b901
Packit b5b901
UV_EXTERN int uv_getrusage(uv_rusage_t* rusage);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_os_homedir(char* buffer, size_t* size);
Packit b5b901
UV_EXTERN int uv_os_tmpdir(char* buffer, size_t* size);
Packit b5b901
UV_EXTERN int uv_os_get_passwd(uv_passwd_t* pwd);
Packit b5b901
UV_EXTERN void uv_os_free_passwd(uv_passwd_t* pwd);
Packit b5b901
UV_EXTERN uv_pid_t uv_os_getpid(void);
Packit b5b901
UV_EXTERN uv_pid_t uv_os_getppid(void);
Packit b5b901
Packit Service e08953
#if defined(__PASE__)
Packit Service e08953
/* On IBM i PASE, the highest process priority is -10 */
Packit Service e08953
# define UV_PRIORITY_LOW 39            // RUNPTY(99)
Packit Service e08953
# define UV_PRIORITY_BELOW_NORMAL 15   // RUNPTY(50)
Packit Service e08953
# define UV_PRIORITY_NORMAL 0          // RUNPTY(20)
Packit Service e08953
# define UV_PRIORITY_ABOVE_NORMAL -4   // RUNTY(12)
Packit Service e08953
# define UV_PRIORITY_HIGH -7           // RUNPTY(6)
Packit Service e08953
# define UV_PRIORITY_HIGHEST -10       // RUNPTY(1)
Packit Service e08953
#else
Packit Service e08953
# define UV_PRIORITY_LOW 19
Packit Service e08953
# define UV_PRIORITY_BELOW_NORMAL 10
Packit Service e08953
# define UV_PRIORITY_NORMAL 0
Packit Service e08953
# define UV_PRIORITY_ABOVE_NORMAL -7
Packit Service e08953
# define UV_PRIORITY_HIGH -14
Packit Service e08953
# define UV_PRIORITY_HIGHEST -20
Packit Service e08953
#endif
Packit b5b901
Packit b5b901
UV_EXTERN int uv_os_getpriority(uv_pid_t pid, int* priority);
Packit b5b901
UV_EXTERN int uv_os_setpriority(uv_pid_t pid, int priority);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count);
Packit b5b901
UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses,
Packit b5b901
                                     int* count);
Packit b5b901
UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses,
Packit b5b901
                                           int count);
Packit b5b901
Packit Service e08953
struct uv_env_item_s {
Packit Service e08953
  char* name;
Packit Service e08953
  char* value;
Packit Service e08953
};
Packit Service e08953
Packit Service e08953
UV_EXTERN int uv_os_environ(uv_env_item_t** envitems, int* count);
Packit Service e08953
UV_EXTERN void uv_os_free_environ(uv_env_item_t* envitems, int count);
Packit b5b901
UV_EXTERN int uv_os_getenv(const char* name, char* buffer, size_t* size);
Packit b5b901
UV_EXTERN int uv_os_setenv(const char* name, const char* value);
Packit b5b901
UV_EXTERN int uv_os_unsetenv(const char* name);
Packit b5b901
Packit Service e08953
#ifdef MAXHOSTNAMELEN
Packit Service e08953
# define UV_MAXHOSTNAMESIZE (MAXHOSTNAMELEN + 1)
Packit Service e08953
#else
Packit Service e08953
  /*
Packit Service e08953
    Fallback for the maximum hostname size, including the null terminator. The
Packit Service e08953
    Windows gethostname() documentation states that 256 bytes will always be
Packit Service e08953
    large enough to hold the null-terminated hostname.
Packit Service e08953
  */
Packit Service e08953
# define UV_MAXHOSTNAMESIZE 256
Packit Service e08953
#endif
Packit Service e08953
Packit b5b901
UV_EXTERN int uv_os_gethostname(char* buffer, size_t* size);
Packit b5b901
Packit Service e08953
UV_EXTERN int uv_os_uname(uv_utsname_t* buffer);
Packit Service e08953
Packit b5b901
Packit b5b901
typedef enum {
Packit b5b901
  UV_FS_UNKNOWN = -1,
Packit b5b901
  UV_FS_CUSTOM,
Packit b5b901
  UV_FS_OPEN,
Packit b5b901
  UV_FS_CLOSE,
Packit b5b901
  UV_FS_READ,
Packit b5b901
  UV_FS_WRITE,
Packit b5b901
  UV_FS_SENDFILE,
Packit b5b901
  UV_FS_STAT,
Packit b5b901
  UV_FS_LSTAT,
Packit b5b901
  UV_FS_FSTAT,
Packit b5b901
  UV_FS_FTRUNCATE,
Packit b5b901
  UV_FS_UTIME,
Packit b5b901
  UV_FS_FUTIME,
Packit b5b901
  UV_FS_ACCESS,
Packit b5b901
  UV_FS_CHMOD,
Packit b5b901
  UV_FS_FCHMOD,
Packit b5b901
  UV_FS_FSYNC,
Packit b5b901
  UV_FS_FDATASYNC,
Packit b5b901
  UV_FS_UNLINK,
Packit b5b901
  UV_FS_RMDIR,
Packit b5b901
  UV_FS_MKDIR,
Packit b5b901
  UV_FS_MKDTEMP,
Packit b5b901
  UV_FS_RENAME,
Packit b5b901
  UV_FS_SCANDIR,
Packit b5b901
  UV_FS_LINK,
Packit b5b901
  UV_FS_SYMLINK,
Packit b5b901
  UV_FS_READLINK,
Packit b5b901
  UV_FS_CHOWN,
Packit b5b901
  UV_FS_FCHOWN,
Packit b5b901
  UV_FS_REALPATH,
Packit b5b901
  UV_FS_COPYFILE,
Packit Service e08953
  UV_FS_LCHOWN,
Packit Service e08953
  UV_FS_OPENDIR,
Packit Service e08953
  UV_FS_READDIR,
Packit Service e08953
  UV_FS_CLOSEDIR,
Packit Service e08953
  UV_FS_STATFS,
Packit Service e08953
  UV_FS_MKSTEMP,
Packit Service e08953
  UV_FS_LUTIME
Packit b5b901
} uv_fs_type;
Packit b5b901
Packit Service e08953
struct uv_dir_s {
Packit Service e08953
  uv_dirent_t* dirents;
Packit Service e08953
  size_t nentries;
Packit Service e08953
  void* reserved[4];
Packit Service e08953
  UV_DIR_PRIVATE_FIELDS
Packit Service e08953
};
Packit Service e08953
Packit b5b901
/* uv_fs_t is a subclass of uv_req_t. */
Packit b5b901
struct uv_fs_s {
Packit b5b901
  UV_REQ_FIELDS
Packit b5b901
  uv_fs_type fs_type;
Packit b5b901
  uv_loop_t* loop;
Packit b5b901
  uv_fs_cb cb;
Packit b5b901
  ssize_t result;
Packit b5b901
  void* ptr;
Packit b5b901
  const char* path;
Packit b5b901
  uv_stat_t statbuf;  /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */
Packit b5b901
  UV_FS_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN uv_fs_type uv_fs_get_type(const uv_fs_t*);
Packit b5b901
UV_EXTERN ssize_t uv_fs_get_result(const uv_fs_t*);
Packit Service e08953
UV_EXTERN int uv_fs_get_system_error(const uv_fs_t*);
Packit b5b901
UV_EXTERN void* uv_fs_get_ptr(const uv_fs_t*);
Packit b5b901
UV_EXTERN const char* uv_fs_get_path(const uv_fs_t*);
Packit b5b901
UV_EXTERN uv_stat_t* uv_fs_get_statbuf(uv_fs_t*);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req);
Packit b5b901
UV_EXTERN int uv_fs_close(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          uv_file file,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_open(uv_loop_t* loop,
Packit b5b901
                         uv_fs_t* req,
Packit b5b901
                         const char* path,
Packit b5b901
                         int flags,
Packit b5b901
                         int mode,
Packit b5b901
                         uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_read(uv_loop_t* loop,
Packit b5b901
                         uv_fs_t* req,
Packit b5b901
                         uv_file file,
Packit b5b901
                         const uv_buf_t bufs[],
Packit b5b901
                         unsigned int nbufs,
Packit b5b901
                         int64_t offset,
Packit b5b901
                         uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_unlink(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           const char* path,
Packit b5b901
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_write(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          uv_file file,
Packit b5b901
                          const uv_buf_t bufs[],
Packit b5b901
                          unsigned int nbufs,
Packit b5b901
                          int64_t offset,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
/*
Packit b5b901
 * This flag can be used with uv_fs_copyfile() to return an error if the
Packit b5b901
 * destination already exists.
Packit b5b901
 */
Packit b5b901
#define UV_FS_COPYFILE_EXCL   0x0001
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * This flag can be used with uv_fs_copyfile() to attempt to create a reflink.
Packit b5b901
 * If copy-on-write is not supported, a fallback copy mechanism is used.
Packit b5b901
 */
Packit b5b901
#define UV_FS_COPYFILE_FICLONE 0x0002
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * This flag can be used with uv_fs_copyfile() to attempt to create a reflink.
Packit b5b901
 * If copy-on-write is not supported, an error is returned.
Packit b5b901
 */
Packit b5b901
#define UV_FS_COPYFILE_FICLONE_FORCE 0x0004
Packit b5b901
Packit b5b901
UV_EXTERN int uv_fs_copyfile(uv_loop_t* loop,
Packit b5b901
                             uv_fs_t* req,
Packit b5b901
                             const char* path,
Packit b5b901
                             const char* new_path,
Packit b5b901
                             int flags,
Packit b5b901
                             uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          int mode,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_mkdtemp(uv_loop_t* loop,
Packit b5b901
                            uv_fs_t* req,
Packit b5b901
                            const char* tpl,
Packit b5b901
                            uv_fs_cb cb);
Packit Service e08953
UV_EXTERN int uv_fs_mkstemp(uv_loop_t* loop,
Packit Service e08953
                            uv_fs_t* req,
Packit Service e08953
                            const char* tpl,
Packit Service e08953
                            uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_scandir(uv_loop_t* loop,
Packit b5b901
                            uv_fs_t* req,
Packit b5b901
                            const char* path,
Packit b5b901
                            int flags,
Packit b5b901
                            uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_scandir_next(uv_fs_t* req,
Packit b5b901
                                 uv_dirent_t* ent);
Packit Service e08953
UV_EXTERN int uv_fs_opendir(uv_loop_t* loop,
Packit Service e08953
                            uv_fs_t* req,
Packit Service e08953
                            const char* path,
Packit Service e08953
                            uv_fs_cb cb);
Packit Service e08953
UV_EXTERN int uv_fs_readdir(uv_loop_t* loop,
Packit Service e08953
                            uv_fs_t* req,
Packit Service e08953
                            uv_dir_t* dir,
Packit Service e08953
                            uv_fs_cb cb);
Packit Service e08953
UV_EXTERN int uv_fs_closedir(uv_loop_t* loop,
Packit Service e08953
                             uv_fs_t* req,
Packit Service e08953
                             uv_dir_t* dir,
Packit Service e08953
                             uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_stat(uv_loop_t* loop,
Packit b5b901
                         uv_fs_t* req,
Packit b5b901
                         const char* path,
Packit b5b901
                         uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_fstat(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          uv_file file,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_rename(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           const char* path,
Packit b5b901
                           const char* new_path,
Packit b5b901
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_fsync(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          uv_file file,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop,
Packit b5b901
                              uv_fs_t* req,
Packit b5b901
                              uv_file file,
Packit b5b901
                              uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop,
Packit b5b901
                              uv_fs_t* req,
Packit b5b901
                              uv_file file,
Packit b5b901
                              int64_t offset,
Packit b5b901
                              uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop,
Packit b5b901
                             uv_fs_t* req,
Packit b5b901
                             uv_file out_fd,
Packit b5b901
                             uv_file in_fd,
Packit b5b901
                             int64_t in_offset,
Packit b5b901
                             size_t length,
Packit b5b901
                             uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_access(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           const char* path,
Packit b5b901
                           int mode,
Packit b5b901
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_chmod(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          int mode,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_utime(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          double atime,
Packit b5b901
                          double mtime,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_futime(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           uv_file file,
Packit b5b901
                           double atime,
Packit b5b901
                           double mtime,
Packit b5b901
                           uv_fs_cb cb);
Packit Service e08953
UV_EXTERN int uv_fs_lutime(uv_loop_t* loop,
Packit Service e08953
                           uv_fs_t* req,
Packit Service e08953
                           const char* path,
Packit Service e08953
                           double atime,
Packit Service e08953
                           double mtime,
Packit Service e08953
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_lstat(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_link(uv_loop_t* loop,
Packit b5b901
                         uv_fs_t* req,
Packit b5b901
                         const char* path,
Packit b5b901
                         const char* new_path,
Packit b5b901
                         uv_fs_cb cb);
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * This flag can be used with uv_fs_symlink() on Windows to specify whether
Packit b5b901
 * path argument points to a directory.
Packit b5b901
 */
Packit b5b901
#define UV_FS_SYMLINK_DIR          0x0001
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * This flag can be used with uv_fs_symlink() on Windows to specify whether
Packit b5b901
 * the symlink is to be created using junction points.
Packit b5b901
 */
Packit b5b901
#define UV_FS_SYMLINK_JUNCTION     0x0002
Packit b5b901
Packit b5b901
UV_EXTERN int uv_fs_symlink(uv_loop_t* loop,
Packit b5b901
                            uv_fs_t* req,
Packit b5b901
                            const char* path,
Packit b5b901
                            const char* new_path,
Packit b5b901
                            int flags,
Packit b5b901
                            uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_readlink(uv_loop_t* loop,
Packit b5b901
                             uv_fs_t* req,
Packit b5b901
                             const char* path,
Packit b5b901
                             uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_realpath(uv_loop_t* loop,
Packit b5b901
                             uv_fs_t* req,
Packit b5b901
                             const char* path,
Packit b5b901
                             uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           uv_file file,
Packit b5b901
                           int mode,
Packit b5b901
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_chown(uv_loop_t* loop,
Packit b5b901
                          uv_fs_t* req,
Packit b5b901
                          const char* path,
Packit b5b901
                          uv_uid_t uid,
Packit b5b901
                          uv_gid_t gid,
Packit b5b901
                          uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_fchown(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           uv_file file,
Packit b5b901
                           uv_uid_t uid,
Packit b5b901
                           uv_gid_t gid,
Packit b5b901
                           uv_fs_cb cb);
Packit b5b901
UV_EXTERN int uv_fs_lchown(uv_loop_t* loop,
Packit b5b901
                           uv_fs_t* req,
Packit b5b901
                           const char* path,
Packit b5b901
                           uv_uid_t uid,
Packit b5b901
                           uv_gid_t gid,
Packit b5b901
                           uv_fs_cb cb);
Packit Service e08953
UV_EXTERN int uv_fs_statfs(uv_loop_t* loop,
Packit Service e08953
                           uv_fs_t* req,
Packit Service e08953
                           const char* path,
Packit Service e08953
                           uv_fs_cb cb);
Packit b5b901
Packit b5b901
Packit b5b901
enum uv_fs_event {
Packit b5b901
  UV_RENAME = 1,
Packit b5b901
  UV_CHANGE = 2
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_fs_event_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  /* private */
Packit b5b901
  char* path;
Packit b5b901
  UV_FS_EVENT_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * uv_fs_stat() based polling file watcher.
Packit b5b901
 */
Packit b5b901
struct uv_fs_poll_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  /* Private, don't touch. */
Packit b5b901
  void* poll_ctx;
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle);
Packit b5b901
UV_EXTERN int uv_fs_poll_start(uv_fs_poll_t* handle,
Packit b5b901
                               uv_fs_poll_cb poll_cb,
Packit b5b901
                               const char* path,
Packit b5b901
                               unsigned int interval);
Packit b5b901
UV_EXTERN int uv_fs_poll_stop(uv_fs_poll_t* handle);
Packit b5b901
UV_EXTERN int uv_fs_poll_getpath(uv_fs_poll_t* handle,
Packit b5b901
                                 char* buffer,
Packit b5b901
                                 size_t* size);
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_signal_s {
Packit b5b901
  UV_HANDLE_FIELDS
Packit b5b901
  uv_signal_cb signal_cb;
Packit b5b901
  int signum;
Packit b5b901
  UV_SIGNAL_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle);
Packit b5b901
UV_EXTERN int uv_signal_start(uv_signal_t* handle,
Packit b5b901
                              uv_signal_cb signal_cb,
Packit b5b901
                              int signum);
Packit b5b901
UV_EXTERN int uv_signal_start_oneshot(uv_signal_t* handle,
Packit b5b901
                                      uv_signal_cb signal_cb,
Packit b5b901
                                      int signum);
Packit b5b901
UV_EXTERN int uv_signal_stop(uv_signal_t* handle);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_loadavg(double avg[3]);
Packit b5b901
Packit b5b901
Packit b5b901
/*
Packit b5b901
 * Flags to be passed to uv_fs_event_start().
Packit b5b901
 */
Packit b5b901
enum uv_fs_event_flags {
Packit b5b901
  /*
Packit b5b901
   * By default, if the fs event watcher is given a directory name, we will
Packit b5b901
   * watch for all events in that directory. This flags overrides this behavior
Packit b5b901
   * and makes fs_event report only changes to the directory entry itself. This
Packit b5b901
   * flag does not affect individual files watched.
Packit b5b901
   * This flag is currently not implemented yet on any backend.
Packit b5b901
   */
Packit b5b901
  UV_FS_EVENT_WATCH_ENTRY = 1,
Packit b5b901
Packit b5b901
  /*
Packit b5b901
   * By default uv_fs_event will try to use a kernel interface such as inotify
Packit b5b901
   * or kqueue to detect events. This may not work on remote filesystems such
Packit b5b901
   * as NFS mounts. This flag makes fs_event fall back to calling stat() on a
Packit b5b901
   * regular interval.
Packit b5b901
   * This flag is currently not implemented yet on any backend.
Packit b5b901
   */
Packit b5b901
  UV_FS_EVENT_STAT = 2,
Packit b5b901
Packit b5b901
  /*
Packit b5b901
   * By default, event watcher, when watching directory, is not registering
Packit b5b901
   * (is ignoring) changes in it's subdirectories.
Packit b5b901
   * This flag will override this behaviour on platforms that support it.
Packit b5b901
   */
Packit b5b901
  UV_FS_EVENT_RECURSIVE = 4
Packit b5b901
};
Packit b5b901
Packit b5b901
Packit b5b901
UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle);
Packit b5b901
UV_EXTERN int uv_fs_event_start(uv_fs_event_t* handle,
Packit b5b901
                                uv_fs_event_cb cb,
Packit b5b901
                                const char* path,
Packit b5b901
                                unsigned int flags);
Packit b5b901
UV_EXTERN int uv_fs_event_stop(uv_fs_event_t* handle);
Packit b5b901
UV_EXTERN int uv_fs_event_getpath(uv_fs_event_t* handle,
Packit b5b901
                                  char* buffer,
Packit b5b901
                                  size_t* size);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr);
Packit b5b901
UV_EXTERN int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size);
Packit b5b901
UV_EXTERN int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size);
Packit b5b901
UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst);
Packit b5b901
Packit Service e08953
Packit Service e08953
struct uv_random_s {
Packit Service e08953
  UV_REQ_FIELDS
Packit Service e08953
  /* read-only */
Packit Service e08953
  uv_loop_t* loop;
Packit Service e08953
  /* private */
Packit Service e08953
  int status;
Packit Service e08953
  void* buf;
Packit Service e08953
  size_t buflen;
Packit Service e08953
  uv_random_cb cb;
Packit Service e08953
  struct uv__work work_req;
Packit Service e08953
};
Packit Service e08953
Packit Service e08953
UV_EXTERN int uv_random(uv_loop_t* loop,
Packit Service e08953
                        uv_random_t* req,
Packit Service e08953
                        void *buf,
Packit Service e08953
                        size_t buflen,
Packit Service e08953
                        unsigned flags,  /* For future extension; must be 0. */
Packit Service e08953
                        uv_random_cb cb);
Packit Service e08953
Packit b5b901
#if defined(IF_NAMESIZE)
Packit b5b901
# define UV_IF_NAMESIZE (IF_NAMESIZE + 1)
Packit b5b901
#elif defined(IFNAMSIZ)
Packit b5b901
# define UV_IF_NAMESIZE (IFNAMSIZ + 1)
Packit b5b901
#else
Packit b5b901
# define UV_IF_NAMESIZE (16 + 1)
Packit b5b901
#endif
Packit b5b901
Packit b5b901
UV_EXTERN int uv_if_indextoname(unsigned int ifindex,
Packit b5b901
                                char* buffer,
Packit b5b901
                                size_t* size);
Packit b5b901
UV_EXTERN int uv_if_indextoiid(unsigned int ifindex,
Packit b5b901
                               char* buffer,
Packit b5b901
                               size_t* size);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_exepath(char* buffer, size_t* size);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_cwd(char* buffer, size_t* size);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_chdir(const char* dir);
Packit b5b901
Packit b5b901
UV_EXTERN uint64_t uv_get_free_memory(void);
Packit b5b901
UV_EXTERN uint64_t uv_get_total_memory(void);
Packit Service e08953
UV_EXTERN uint64_t uv_get_constrained_memory(void);
Packit b5b901
Packit b5b901
UV_EXTERN uint64_t uv_hrtime(void);
Packit Service e08953
UV_EXTERN void uv_sleep(unsigned int msec);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_disable_stdio_inheritance(void);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_dlopen(const char* filename, uv_lib_t* lib);
Packit b5b901
UV_EXTERN void uv_dlclose(uv_lib_t* lib);
Packit b5b901
UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr);
Packit b5b901
UV_EXTERN const char* uv_dlerror(const uv_lib_t* lib);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_mutex_init(uv_mutex_t* handle);
Packit b5b901
UV_EXTERN int uv_mutex_init_recursive(uv_mutex_t* handle);
Packit b5b901
UV_EXTERN void uv_mutex_destroy(uv_mutex_t* handle);
Packit b5b901
UV_EXTERN void uv_mutex_lock(uv_mutex_t* handle);
Packit b5b901
UV_EXTERN int uv_mutex_trylock(uv_mutex_t* handle);
Packit b5b901
UV_EXTERN void uv_mutex_unlock(uv_mutex_t* handle);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_rwlock_init(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN void uv_rwlock_destroy(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN void uv_rwlock_wrlock(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN int uv_rwlock_trywrlock(uv_rwlock_t* rwlock);
Packit b5b901
UV_EXTERN void uv_rwlock_wrunlock(uv_rwlock_t* rwlock);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_sem_init(uv_sem_t* sem, unsigned int value);
Packit b5b901
UV_EXTERN void uv_sem_destroy(uv_sem_t* sem);
Packit b5b901
UV_EXTERN void uv_sem_post(uv_sem_t* sem);
Packit b5b901
UV_EXTERN void uv_sem_wait(uv_sem_t* sem);
Packit b5b901
UV_EXTERN int uv_sem_trywait(uv_sem_t* sem);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_cond_init(uv_cond_t* cond);
Packit b5b901
UV_EXTERN void uv_cond_destroy(uv_cond_t* cond);
Packit b5b901
UV_EXTERN void uv_cond_signal(uv_cond_t* cond);
Packit b5b901
UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_barrier_init(uv_barrier_t* barrier, unsigned int count);
Packit b5b901
UV_EXTERN void uv_barrier_destroy(uv_barrier_t* barrier);
Packit b5b901
UV_EXTERN int uv_barrier_wait(uv_barrier_t* barrier);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex);
Packit b5b901
UV_EXTERN int uv_cond_timedwait(uv_cond_t* cond,
Packit b5b901
                                uv_mutex_t* mutex,
Packit b5b901
                                uint64_t timeout);
Packit b5b901
Packit b5b901
UV_EXTERN void uv_once(uv_once_t* guard, void (*callback)(void));
Packit b5b901
Packit b5b901
UV_EXTERN int uv_key_create(uv_key_t* key);
Packit b5b901
UV_EXTERN void uv_key_delete(uv_key_t* key);
Packit b5b901
UV_EXTERN void* uv_key_get(uv_key_t* key);
Packit b5b901
UV_EXTERN void uv_key_set(uv_key_t* key, void* value);
Packit b5b901
Packit Service e08953
UV_EXTERN int uv_gettimeofday(uv_timeval64_t* tv);
Packit Service e08953
Packit b5b901
typedef void (*uv_thread_cb)(void* arg);
Packit b5b901
Packit b5b901
UV_EXTERN int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg);
Packit Service e08953
Packit Service e08953
typedef enum {
Packit Service e08953
  UV_THREAD_NO_FLAGS = 0x00,
Packit Service e08953
  UV_THREAD_HAS_STACK_SIZE = 0x01
Packit Service e08953
} uv_thread_create_flags;
Packit Service e08953
Packit Service e08953
struct uv_thread_options_s {
Packit Service e08953
  unsigned int flags;
Packit Service e08953
  size_t stack_size;
Packit Service e08953
  /* More fields may be added at any time. */
Packit Service e08953
};
Packit Service e08953
Packit Service e08953
typedef struct uv_thread_options_s uv_thread_options_t;
Packit Service e08953
Packit Service e08953
UV_EXTERN int uv_thread_create_ex(uv_thread_t* tid,
Packit Service e08953
                                  const uv_thread_options_t* params,
Packit Service e08953
                                  uv_thread_cb entry,
Packit Service e08953
                                  void* arg);
Packit b5b901
UV_EXTERN uv_thread_t uv_thread_self(void);
Packit b5b901
UV_EXTERN int uv_thread_join(uv_thread_t *tid);
Packit b5b901
UV_EXTERN int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2);
Packit b5b901
Packit b5b901
/* The presence of these unions force similar struct layout. */
Packit b5b901
#define XX(_, name) uv_ ## name ## _t name;
Packit b5b901
union uv_any_handle {
Packit b5b901
  UV_HANDLE_TYPE_MAP(XX)
Packit b5b901
};
Packit b5b901
Packit b5b901
union uv_any_req {
Packit b5b901
  UV_REQ_TYPE_MAP(XX)
Packit b5b901
};
Packit b5b901
#undef XX
Packit b5b901
Packit b5b901
Packit b5b901
struct uv_loop_s {
Packit b5b901
  /* User data - use this for whatever. */
Packit b5b901
  void* data;
Packit b5b901
  /* Loop reference counting. */
Packit b5b901
  unsigned int active_handles;
Packit b5b901
  void* handle_queue[2];
Packit b5b901
  union {
Packit b5b901
    void* unused[2];
Packit b5b901
    unsigned int count;
Packit b5b901
  } active_reqs;
Packit b5b901
  /* Internal flag to signal loop stop. */
Packit b5b901
  unsigned int stop_flag;
Packit b5b901
  UV_LOOP_PRIVATE_FIELDS
Packit b5b901
};
Packit b5b901
Packit b5b901
UV_EXTERN void* uv_loop_get_data(const uv_loop_t*);
Packit b5b901
UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data);
Packit b5b901
Packit b5b901
/* Don't export the private CPP symbols. */
Packit b5b901
#undef UV_HANDLE_TYPE_PRIVATE
Packit b5b901
#undef UV_REQ_TYPE_PRIVATE
Packit b5b901
#undef UV_REQ_PRIVATE_FIELDS
Packit b5b901
#undef UV_STREAM_PRIVATE_FIELDS
Packit b5b901
#undef UV_TCP_PRIVATE_FIELDS
Packit b5b901
#undef UV_PREPARE_PRIVATE_FIELDS
Packit b5b901
#undef UV_CHECK_PRIVATE_FIELDS
Packit b5b901
#undef UV_IDLE_PRIVATE_FIELDS
Packit b5b901
#undef UV_ASYNC_PRIVATE_FIELDS
Packit b5b901
#undef UV_TIMER_PRIVATE_FIELDS
Packit b5b901
#undef UV_GETADDRINFO_PRIVATE_FIELDS
Packit b5b901
#undef UV_GETNAMEINFO_PRIVATE_FIELDS
Packit b5b901
#undef UV_FS_REQ_PRIVATE_FIELDS
Packit b5b901
#undef UV_WORK_PRIVATE_FIELDS
Packit b5b901
#undef UV_FS_EVENT_PRIVATE_FIELDS
Packit b5b901
#undef UV_SIGNAL_PRIVATE_FIELDS
Packit b5b901
#undef UV_LOOP_PRIVATE_FIELDS
Packit b5b901
#undef UV_LOOP_PRIVATE_PLATFORM_FIELDS
Packit b5b901
#undef UV__ERR
Packit b5b901
Packit b5b901
#ifdef __cplusplus
Packit b5b901
}
Packit b5b901
#endif
Packit b5b901
#endif /* UV_H */