public.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /* SPDX-License-Identifier: MPL-1.1 OR GPL-2.0-or-later */
  2. /*
  3. * The contents of this file are subject to the Mozilla Public
  4. * License Version 1.1 (the "License"); you may not use this file
  5. * except in compliance with the License. You may obtain a copy of
  6. * the License at http://www.mozilla.org/MPL/
  7. *
  8. * Software distributed under the License is distributed on an "AS
  9. * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10. * implied. See the License for the specific language governing
  11. * rights and limitations under the License.
  12. *
  13. * The Original Code is the Netscape Portable Runtime library.
  14. *
  15. * The Initial Developer of the Original Code is Netscape
  16. * Communications Corporation. Portions created by Netscape are
  17. * Copyright (C) 1994-2000 Netscape Communications Corporation. All
  18. * Rights Reserved.
  19. *
  20. * Contributor(s): Silicon Graphics, Inc.
  21. *
  22. * Portions created by SGI are Copyright (C) 2000-2001 Silicon
  23. * Graphics, Inc. All Rights Reserved.
  24. *
  25. * Alternatively, the contents of this file may be used under the
  26. * terms of the GNU General Public License Version 2 or later (the
  27. * "GPL"), in which case the provisions of the GPL are applicable
  28. * instead of those above. If you wish to allow use of your
  29. * version of this file only under the terms of the GPL and not to
  30. * allow others to use your version of this file under the MPL,
  31. * indicate your decision by deleting the provisions above and
  32. * replace them with the notice and other provisions required by
  33. * the GPL. If you do not delete the provisions above, a recipient
  34. * may use your version of this file under either the MPL or the
  35. * GPL.
  36. */
  37. #ifndef __ST_THREAD_H__
  38. #define __ST_THREAD_H__
  39. #include <unistd.h>
  40. #include <sys/types.h>
  41. #include <sys/socket.h>
  42. #include <sys/uio.h>
  43. #include <time.h>
  44. #include <errno.h>
  45. #include <poll.h>
  46. #define ST_VERSION "1.9"
  47. #define ST_VERSION_MAJOR 1
  48. #define ST_VERSION_MINOR 9
  49. /* Undefine this to remove the context switch callback feature. */
  50. #define ST_SWITCH_CB
  51. #ifndef ETIME
  52. #define ETIME ETIMEDOUT
  53. #endif
  54. #ifndef ST_UTIME_NO_TIMEOUT
  55. #define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL)
  56. #endif
  57. #ifndef ST_UTIME_NO_WAIT
  58. #define ST_UTIME_NO_WAIT 0
  59. #endif
  60. #define ST_EVENTSYS_DEFAULT 0
  61. #define ST_EVENTSYS_SELECT 1
  62. #define ST_EVENTSYS_ALT 3
  63. #ifdef __cplusplus
  64. extern "C" {
  65. #endif
  66. typedef unsigned long long st_utime_t;
  67. typedef struct _st_thread * st_thread_t;
  68. typedef struct _st_cond * st_cond_t;
  69. typedef struct _st_mutex * st_mutex_t;
  70. typedef struct _st_netfd * st_netfd_t;
  71. #ifdef ST_SWITCH_CB
  72. typedef void (*st_switch_cb_t)(void);
  73. #endif
  74. extern int st_init(void);
  75. extern int st_getfdlimit(void);
  76. extern int st_set_eventsys(int eventsys);
  77. extern int st_get_eventsys(void);
  78. extern const char *st_get_eventsys_name(void);
  79. #ifdef ST_SWITCH_CB
  80. extern st_switch_cb_t st_set_switch_in_cb(st_switch_cb_t cb);
  81. extern st_switch_cb_t st_set_switch_out_cb(st_switch_cb_t cb);
  82. #endif
  83. extern st_thread_t st_thread_self(void);
  84. extern void st_thread_exit(void *retval);
  85. extern int st_thread_join(st_thread_t thread, void **retvalp);
  86. extern void st_thread_interrupt(st_thread_t thread);
  87. extern void st_thread_yield();
  88. extern st_thread_t st_thread_create(void *(*start)(void *arg), void *arg, int joinable, int stack_size);
  89. extern int st_randomize_stacks(int on);
  90. extern int st_set_utime_function(st_utime_t (*func)(void));
  91. extern st_utime_t st_utime(void);
  92. extern st_utime_t st_utime_last_clock(void);
  93. extern int st_timecache_set(int on);
  94. extern time_t st_time(void);
  95. extern int st_usleep(st_utime_t usecs);
  96. extern int st_sleep(int secs);
  97. extern st_cond_t st_cond_new(void);
  98. extern int st_cond_destroy(st_cond_t cvar);
  99. extern int st_cond_timedwait(st_cond_t cvar, st_utime_t timeout);
  100. extern int st_cond_wait(st_cond_t cvar);
  101. extern int st_cond_signal(st_cond_t cvar);
  102. extern int st_cond_broadcast(st_cond_t cvar);
  103. extern st_mutex_t st_mutex_new(void);
  104. extern int st_mutex_destroy(st_mutex_t lock);
  105. extern int st_mutex_lock(st_mutex_t lock);
  106. extern int st_mutex_unlock(st_mutex_t lock);
  107. extern int st_mutex_trylock(st_mutex_t lock);
  108. extern int st_key_create(int *keyp, void (*destructor)(void *));
  109. extern int st_key_getlimit(void);
  110. extern int st_thread_setspecific(int key, void *value);
  111. extern void *st_thread_getspecific(int key);
  112. extern st_netfd_t st_netfd_open(int osfd);
  113. extern st_netfd_t st_netfd_open_socket(int osfd);
  114. extern void st_netfd_free(st_netfd_t fd);
  115. extern int st_netfd_close(st_netfd_t fd);
  116. extern int st_netfd_fileno(st_netfd_t fd);
  117. extern void st_netfd_setspecific(st_netfd_t fd, void *value, void (*destructor)(void *));
  118. extern void *st_netfd_getspecific(st_netfd_t fd);
  119. extern int st_netfd_serialize_accept(st_netfd_t fd);
  120. extern int st_netfd_poll(st_netfd_t fd, int how, st_utime_t timeout);
  121. extern int st_poll(struct pollfd *pds, int npds, st_utime_t timeout);
  122. extern st_netfd_t st_accept(st_netfd_t fd, struct sockaddr *addr, int *addrlen, st_utime_t timeout);
  123. extern int st_connect(st_netfd_t fd, const struct sockaddr *addr, int addrlen, st_utime_t timeout);
  124. extern ssize_t st_read(st_netfd_t fd, void *buf, size_t nbyte, st_utime_t timeout);
  125. extern ssize_t st_read_fully(st_netfd_t fd, void *buf, size_t nbyte, st_utime_t timeout);
  126. extern int st_read_resid(st_netfd_t fd, void *buf, size_t *resid, st_utime_t timeout);
  127. extern ssize_t st_readv(st_netfd_t fd, const struct iovec *iov, int iov_size, st_utime_t timeout);
  128. extern int st_readv_resid(st_netfd_t fd, struct iovec **iov, int *iov_size, st_utime_t timeout);
  129. extern ssize_t st_write(st_netfd_t fd, const void *buf, size_t nbyte, st_utime_t timeout);
  130. extern int st_write_resid(st_netfd_t fd, const void *buf, size_t *resid, st_utime_t timeout);
  131. extern ssize_t st_writev(st_netfd_t fd, const struct iovec *iov, int iov_size, st_utime_t timeout);
  132. extern int st_writev_resid(st_netfd_t fd, struct iovec **iov, int *iov_size, st_utime_t timeout);
  133. extern int st_recvfrom(st_netfd_t fd, void *buf, int len, struct sockaddr *from, int *fromlen, st_utime_t timeout);
  134. extern int st_sendto(st_netfd_t fd, const void *msg, int len, const struct sockaddr *to, int tolen, st_utime_t timeout);
  135. extern int st_recvmsg(st_netfd_t fd, struct msghdr *msg, int flags, st_utime_t timeout);
  136. extern int st_sendmsg(st_netfd_t fd, const struct msghdr *msg, int flags, st_utime_t timeout);
  137. extern st_netfd_t st_open(const char *path, int oflags, mode_t mode);
  138. extern void st_destroy(void);
  139. extern int st_thread_setspecific2(st_thread_t thread, int key, void *value);
  140. #ifdef DEBUG
  141. extern void _st_show_thread_stack(st_thread_t thread, const char *messg);
  142. extern void _st_iterate_threads(void);
  143. #endif
  144. #ifdef __cplusplus
  145. }
  146. #endif
  147. #endif /* !__ST_THREAD_H__ */