Browse Source

Merge pull request #30 from usamir/master

building on win fix
release/v0.1
jl777 8 years ago
committed by GitHub
parent
commit
47e3239ce6
  1. 6
      .gitignore
  2. 2
      crypto777/OS_portable.h
  3. 6
      crypto777/OS_time.c
  4. 4
      crypto777/hmac/tomcrypt_custom.h
  5. 4
      crypto777/make_win32
  6. 4
      crypto777/make_win64
  7. 4
      crypto777/mingw
  8. 1
      crypto777/nanosrc/core/global.c
  9. 2
      crypto777/nanosrc/utils/glock.c
  10. 1
      crypto777/nanosrc/utils/mutex.h
  11. 2
      crypto777/nanosrc/utils/sem.h
  12. 2
      crypto777/nanosrc/utils/thread_posix.h
  13. 4
      iguana/iguana_peers.c
  14. 2
      iguana/main.c
  15. 4
      iguana/make_win32
  16. 6
      iguana/make_win64
  17. 4
      iguana/mingw
  18. 2
      iguana/mingw32
  19. 2
      iguana/mingw64
  20. 4
      iguana/mingw64_inc
  21. 5
      mingw.path
  22. 5
      mingw.path64
  23. BIN
      win/libcrypto.a
  24. BIN
      win/libcurl.a
  25. BIN
      win/libcurldll.a
  26. BIN
      win/libpthreadGC2.a
  27. BIN
      win/libpthreadGC2_64.a
  28. BIN
      win/libsecp256k1.a
  29. BIN
      win/libssl.a
  30. 743
      win/mingw.c
  31. 76
      win/mingw.h
  32. 51
      win/mman.h
  33. 1368
      win/pthread.h
  34. BIN
      win/pthreadGC2.dll
  35. BIN
      win/pthreadGC2_64.dll
  36. 183
      win/sched.h
  37. 169
      win/semaphore.h

6
.gitignore

@ -28,3 +28,9 @@ iguana/tests/.priv2wif.swp
agents/libiguana.a
iguana/iguana_rpc.o-2ed461a0
agents/win32/iguana.exe
agents/win32/libcrypto777.a
agents/win32/confs/.tmpmarker
agents/win32/DB/.tmpmarker
agents/win32/DB/purgeable/.tmpmarker
agents/*

2
crypto777/OS_portable.h

@ -20,6 +20,7 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define HAVE_STRUCT_TIMESPEC
#include <unistd.h>
#include <ctype.h>
#include <fcntl.h>
@ -42,6 +43,7 @@
#include <time.h>
#include <poll.h>
#include <netdb.h>
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
//#include <netinet/in.h>
//#include "in.h"

6
crypto777/OS_time.c

@ -45,9 +45,9 @@ struct tm *gmtime_r(const time_t *timep,struct tm *result)
return(p);
}
struct tm *_gmtime32(const time_t *timep,struct tm *result) { return(gmtime_r(timep,result)); }
time_t _time32(struct tm *tm) { return(time(NULL)); }
time_t _localtime32(struct tm *tm) { return(time(NULL)); }
//struct tm *_gmtime32(const time_t *timep,struct tm *result) { return(gmtime_r(timep,result)); }
//time_t _time32(struct tm *tm) { return(time(NULL)); }
//time_t _localtime32(struct tm *tm) { return(time(NULL)); }
#include <windows.h>
#include <stdint.h> // portable: uint64_t MSVC: __int64

4
crypto777/hmac/tomcrypt_custom.h

@ -371,8 +371,8 @@
/* THREAD management */
#ifdef LTC_PTHREAD
//#include <pthread.h>
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
#define LTC_MUTEX_GLOBAL(x) pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER;
#define LTC_MUTEX_PROTO(x) extern pthread_mutex_t x;

4
crypto777/make_win32

@ -6,9 +6,9 @@ all: clean build
build :
mkdir -p ../agents/win32 || true
@echo "\nBuilding crypto777....."
$(TOOL_DIR)/$(MINGW)-gcc -w -D __MINGW -c $(CRYPTO777_SRCS) -I/usr/mingw32/include -I/usr/mingw32/include/sys -I/home/user/SuperNET/includes/openssl -I/home/user/SuperNET/crypto777 || (echo -e "\033[4mERROR: Compilation failed for win32 \033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW) -w -D __MINGW -DHAVE_STRUCT_TIMESPEC -c $(CRYPTO777_SRCS) -I$(TOOL_DIR)/include -I$(APP)/includes/openssl -I$(APP)/crypto777 || (echo -e "\033[4mERROR: Compilation failed for win32 \033[0m"; exit 1; )
$(TOOL_DIR)/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o || (echo -e "\033[4mERROR: Failed to create libcrypto777.a\033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o || (echo -e "\033[4mERROR: Failed to create libcrypto777.a\033[0m"; exit 1; )
@echo "\Build Successful......"

4
crypto777/make_win64

@ -6,9 +6,9 @@ all: clean build
build:
mkdir -p ../agents/win64 || true
@echo "\nBuilding crypto......"
$(TOOL_DIR)/$(MINGW)-gcc -w -D __MINGW -c $(CRYPTO777_SRCS) -I/usr/share/mingw-w64/include -I /usr/share/mingw-w64/include/sys -I/home/user/SuperNET/includes/openssl || (echo "\033[4m ERROR: Compilation failed for win64\033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW) -w -D __MINGW -DHAVE_STRUCT_TIMESPEC -c $(CRYPTO777_SRCS) -I$(TOOL_DIR)/include -I$(APP)/includes/openssl || (echo "\033[4m ERROR: Compilation failed for win64\033[0m"; exit 1; )
$(TOOL_DIR)/$(MINGW)-ar rcu ../agents/win64/libcrypto777.a *.o || (echo "\033[4mERROR: Failed to create libcrypto777.a\033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW)-ar rcu ../agents/win64/libcrypto777.a *.o || (echo "\033[4mERROR: Failed to create libcrypto777.a\033[0m"; exit 1; )
clean:

4
crypto777/mingw

@ -1,6 +1,6 @@
include crypto777.sources
all:
$(TOOL_DIR)/$(MINGW)-gcc -w -D __MINGW -c $(CRYPTO777_SRCS) -I/usr/mingw32/include -I/usr/mingw32/include/sys -I/home/user/SuperNET/includes/openssl -I/home/user/SuperNET/crypto777
$(TOOL_DIR)/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o
$(TOOL_DIR)/bin/$(MINGW) -w -D __MINGW -c $(CRYPTO777_SRCS) -I$(TOOL_DIR)/include -I$(APP)/includes/openssl -I$(APP)/crypto777
$(TOOL_DIR)/bin/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o
rm *.o

1
crypto777/nanosrc/core/global.c

@ -79,6 +79,7 @@
#include <time.h>
#if defined NN_HAVE_MINGW
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
#elif defined NN_HAVE_WINDOWS
#define gmtime_r(ptr_numtime, ptr_strtime) gmtime_s(ptr_strtime, ptr_numtime)

2
crypto777/nanosrc/utils/glock.c

@ -51,7 +51,7 @@ void nn_glock_unlock (void)
#else
#include "err.h"
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
static pthread_mutex_t nn_glock_mutex = PTHREAD_MUTEX_INITIALIZER;

1
crypto777/nanosrc/utils/mutex.h

@ -26,6 +26,7 @@
#ifdef NN_HAVE_WINDOWS
#include "win.h"
#else
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
#endif

2
crypto777/nanosrc/utils/sem.h

@ -40,7 +40,7 @@ void nn_sem_post (struct nn_sem *self);
int nn_sem_wait (struct nn_sem *self);
#if defined __APPLE__ || defined __PNACL
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
struct nn_sem {

2
crypto777/nanosrc/utils/thread_posix.h

@ -19,7 +19,7 @@
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
*/
#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
struct nn_thread

4
iguana/iguana_peers.c

@ -408,7 +408,7 @@ int32_t iguana_socket(int32_t bindflag,char *hostname,uint16_t port)
{
while ( (result= bind(sock,(struct sockaddr*)&saddr,addrlen)) != 0 )
{
if ( errno == EADDRINUSE )
/* if ( errno == EADDRINUSE )
{
sleep(1);
printf("ERROR BINDING PORT.%d. this is normal tcp timeout, unless another process is using port\n",port);
@ -421,7 +421,7 @@ int32_t iguana_socket(int32_t bindflag,char *hostname,uint16_t port)
}
sleep(13);
//continue;
}
} */
if ( errno != ECONNRESET && errno != ENOTCONN && errno != ECONNREFUSED && errno != ETIMEDOUT && errno != EHOSTUNREACH )
{
printf("%s(%s) port.%d failed: %s sock.%d. errno.%d\n",bindflag!=0?"bind":"connect",hostname,port,strerror(errno),sock,errno);

2
iguana/main.c

@ -20,7 +20,7 @@
#define CHROMEAPP_JSON iguana_JSON
#define CHROMEAPP_HANDLER Handler_iguana
#define ACTIVELY_DECLARE
#define HAVE_STRUCT_TIMESPEC
#include "../pnacl_main.h"
#include "iguana777.h"

4
iguana/make_win32

@ -6,10 +6,10 @@ all: clean check build
build:
@echo "\nBuilding iguana......"
$(TOOL_DIR)/$(MINGW)-gcc -w -o ../agents/win32/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) || (echo -e "\033[4mERROR: Failed to build iguana\033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW) -w -o ../agents/win32/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) -lws2_32 -lpthread -DHAVE_STRUCT_TIMESPEC || (echo -e "\033[4mERROR: Failed to build iguana\033[0m"; exit 1; )
$(TOOL_DIR)/$(MINGW)-strip --strip-all ../agents/win32/iguana.exe
$(TOOL_DIR)/bin/strip --strip-all ../agents/win32/iguana.exe
@echo "\nBuild successfully......"
check:

6
iguana/make_win64

@ -1,16 +1,16 @@
include iguana.sources
include ../mingw.path64
LIBS := ../win/libsecp256k1.a ../win/libcrypto.a ../win/libssl.a ../win/libpthreadGC2_64.a ../agents/win64/libcrypto777.a ../win/libcurldll.a /usr/share/mingw-w64/lib/libws2_32.a /usr/share/mingw-w64/lib/libgdi32.a -I/usr/share/mingw-w64/include -I/usr/i386/include -I/usr/i386/include/curl -I/home/user/SuperNET/iguana -I/home/user/SuperNET/includes -I/home/user/SuperNET/crypto777
LIBS := ../win/libsecp256k1.a ../win/libcrypto.a ../win/libssl.a ../win/libpthreadGC2_64.a ../agents/win64/libcrypto777.a ../win/libcurldll.a $(TOOL_DIR)/lib/libws2_32.a $(TOOL_DIR)/lib/libgdi32.a -I$(TOOL_DIR)/include -I/usr/i386/include -I/usr/i386/include/curl -I$(APP)/iguana -I$(APP)/includes -I$(APP)/crypto777
include mingw64_inc
all: check build
build:
$(TOOL_DIR)/$(MINGW)-gcc -w -o ../agents/win64/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) || (echo -e "\033[4mERROR: Failed to build iguana\033[0m"; exit 1; )
$(TOOL_DIR)/bin/$(MINGW) -w -o ../agents/win64/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) -lws2_32 -lpthread -DHAVE_STRUCT_TIMESPEC || (echo -e "\033[4mERROR: Failed to build iguana\033[0m"; exit 1; )
$(TOOL_DIR)/$(MINGW)-strip --strip-all ../agents/win64/iguana.exe || (echo -e "\033[4mERROR: Failed to strip iguana\033[0m"; exit 1; )
$(TOOL_DIR)/bin/strip --strip-all ../agents/win64/iguana.exe || (echo -e "\033[4mERROR: Failed to strip iguana\033[0m"; exit 1; )
check:

4
iguana/mingw

@ -1,6 +1,6 @@
include iguana.sources
all:
$(TOOL_DIR)/$(MINGW)-gcc -w -o ../agents/win32/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS)
$(TOOL_DIR)/$(MINGW)-strip --strip-all ../agents/win32/iguana.exe
$(TOOL_DIR)/bin/$(MINGW) -w -o ../agents/win32/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) -lws2_32 -lpthread
$(TOOL_DIR)/bin/strip --strip-all ../agents/win32/iguana.exe

2
iguana/mingw32

@ -1,4 +1,4 @@
include ../mingw.path
LIBS := /usr/share/mingw-w64/lib/libpthread.a ../agents/win32/libcrypto777.a /usr/i586-mingw32msvc/lib/libws2_32.a /usr/i586-mingw32msvc/lib/libgdi32.a -I/usr/mingw32/include -I/usr/i386/include -I/home/user/SuperNET/iguana -I/home/user/SuperNET/includes -I/home/user/SuperNET/crypto777
LIBS := $(TOOL_DIR)/lib/libpthread.a ../agents/win32/libcrypto777.a $(TOOL_DIR)/lib/libws2_32.a $(TOOL_DIR)/lib/libgdi32.a -I$(TOOL_DIR)/include -I$(APP)/iguana -I$(APP)/includes -I$(APP)/crypto777
include mingw

2
iguana/mingw64

@ -1,3 +1,3 @@
include ../mingw.path64
LIBS := ../win/libsecp256k1.a ../win/libcrypto.a ../win/libssl.a ../win/libpthreadGC2_64.a ../agents/win64/libcrypto777.a ../win/libcurldll.a /usr/share/mingw-w64/lib/libws2_32.a /usr/share/mingw-w64/lib/libgdi32.a -I/usr/share/mingw-w64/include -I/usr/i386/include -I/usr/i386/include/curl -I/home/user/SuperNET/iguana -I/home/user/SuperNET/includes -I/home/user/SuperNET/crypto777
LIBS := ../win/libsecp256k1.a ../win/libcrypto.a ../win/libssl.a ../win/libpthreadGC2_64.a ../agents/win64/libcrypto777.a ../win/libcurldll.a $(TOOL_DIR)/lib/libws2_32.a $(TOOL_DIR)/lib/libgdi32.a -I$(TOOL_DIR)/include -I/usr/i386/include -I/usr/i386/include/curl -I$(APP)/iguana -I$(APP)/includes -I$(APP)/crypto777
include mingw64_inc

4
iguana/mingw64_inc

@ -1,6 +1,6 @@
include iguana.sources
all:
$(TOOL_DIR)/$(MINGW)-gcc -w -o ../agents/win64/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS)
$(TOOL_DIR)/$(MINGW)-strip --strip-all ../agents/win64/iguana.exe
$(TOOL_DIR)/bin/$(MINGW) -w -o ../agents/win64/iguana.exe -D __MINGW -D __CURL_CURLBUILD_H -D __CURL_CURL_H -D __CURL_EASY_H $(SOURCES) $(LIBS) -lws2_32 -lpthread
$(TOOL_DIR)/bin/strip --strip-all ../agents/win64/iguana.exe

5
mingw.path

@ -1,2 +1,3 @@
TOOL_DIR := /usr/bin
MINGW := i586-mingw32msvc
TOOL_DIR := /D/MinGW
MINGW := mingw32-gcc
APP := /C/Users/usamir/Documents/GitHub/SuperNET

5
mingw.path64

@ -1,2 +1,3 @@
TOOL_DIR := /usr/bin
MINGW := i686-w64-mingw32
TOOL_DIR := /D/MinGW
MINGW := mingw32-gcc
APP := /C/Users/usamir/Documents/GitHub/SuperNET

BIN
win/libcrypto.a

Binary file not shown.

BIN
win/libcurl.a

Binary file not shown.

BIN
win/libcurldll.a

Binary file not shown.

BIN
win/libpthreadGC2.a

Binary file not shown.

BIN
win/libpthreadGC2_64.a

Binary file not shown.

BIN
win/libsecp256k1.a

Binary file not shown.

BIN
win/libssl.a

Binary file not shown.

743
win/mingw.c

@ -0,0 +1,743 @@
#ifdef __MINGW32__
#include "mingw.h"
#undef socket
#undef connect
#undef accept
#undef shutdown
#include <string.h>
#include <errno.h>
#include <assert.h>
int win32_poll(struct pollfd *fds, unsigned int nfds, int timo)
{
struct timeval timeout, *toptr;
fd_set ifds, ofds, efds, *ip, *op;
unsigned int i, rc;
/* Set up the file-descriptor sets in ifds, ofds and efds. */
FD_ZERO(&ifds);
FD_ZERO(&ofds);
FD_ZERO(&efds);
for (i = 0, op = ip = 0; i < nfds; ++i) {
fds[i].revents = 0;
if(fds[i].events & (POLLIN|POLLPRI)) {
ip = &ifds;
FD_SET(fds[i].fd, ip);
}
if(fds[i].events & POLLOUT) {
op = &ofds;
FD_SET(fds[i].fd, op);
}
FD_SET(fds[i].fd, &efds);
}
/* Set up the timeval structure for the timeout parameter */
if(timo < 0) {
toptr = 0;
} else {
toptr = &timeout;
timeout.tv_sec = timo / 1000;
timeout.tv_usec = (timo - timeout.tv_sec * 1000) * 1000;
}
#ifdef DEBUG_POLL
printf("Entering select() sec=%ld usec=%ld ip=%lx op=%lx\n",
(long)timeout.tv_sec, (long)timeout.tv_usec, (long)ip, (long)op);
#endif
rc = select(0, ip, op, &efds, toptr);
#ifdef DEBUG_POLL
printf("Exiting select rc=%d\n", rc);
#endif
if(rc <= 0)
return rc;
if(rc > 0) {
for ( i = 0; i < nfds; ++i) {
int fd = fds[i].fd;
if(fds[i].events & (POLLIN|POLLPRI) && FD_ISSET(fd, &ifds))
fds[i].revents |= POLLIN;
if(fds[i].events & POLLOUT && FD_ISSET(fd, &ofds))
fds[i].revents |= POLLOUT;
if(FD_ISSET(fd, &efds))
/* Some error was detected ... should be some way to know. */
fds[i].revents |= POLLHUP;
#ifdef DEBUG_POLL
printf("%d %d %d revent = %x\n",
FD_ISSET(fd, &ifds), FD_ISSET(fd, &ofds), FD_ISSET(fd, &efds),
fds[i].revents
);
#endif
}
}
return rc;
}
static void
set_connect_errno(int winsock_err)
{
switch(winsock_err) {
case WSAEINVAL:
case WSAEALREADY:
case WSAEWOULDBLOCK:
errno = EINPROGRESS;
break;
default:
errno = winsock_err;
break;
}
}
static void
set_socket_errno(int winsock_err)
{
switch(winsock_err) {
case WSAEWOULDBLOCK:
errno = EAGAIN;
break;
default:
errno = winsock_err;
break;
}
}
/*
* A wrapper around the socket() function. The purpose of this wrapper
* is to ensure that the global errno symbol is set if an error occurs,
* even if we are using winsock.
*/
SOCKET
win32_socket(int domain, int type, int protocol)
{
SOCKET fd = socket(domain, type, protocol);
if(fd == INVALID_SOCKET) {
set_socket_errno(WSAGetLastError());
}
return fd;
}
/*
* A wrapper around the connect() function. The purpose of this wrapper
* is to ensure that the global errno symbol is set if an error occurs,
* even if we are using winsock.
*/
int
win32_connect(SOCKET fd, struct sockaddr *addr, socklen_t addr_len)
{
int rc = connect(fd, addr, addr_len);
assert(rc == 0 || rc == SOCKET_ERROR);
if(rc == SOCKET_ERROR) {
set_connect_errno(WSAGetLastError());
}
return rc;
}
/*
* A wrapper around the accept() function. The purpose of this wrapper
* is to ensure that the global errno symbol is set if an error occurs,
* even if we are using winsock.
*/
SOCKET
win32_accept(SOCKET fd, struct sockaddr *addr, socklen_t *addr_len)
{
SOCKET newfd = accept(fd, addr, addr_len);
if(newfd == INVALID_SOCKET) {
set_socket_errno(WSAGetLastError());
newfd = -1;
}
return newfd;
}
/*
* A wrapper around the shutdown() function. The purpose of this wrapper
* is to ensure that the global errno symbol is set if an error occurs,
* even if we are using winsock.
*/
int
win32_shutdown(SOCKET fd, int mode)
{
int rc = shutdown(fd, mode);
assert(rc == 0 || rc == SOCKET_ERROR);
if(rc == SOCKET_ERROR) {
set_socket_errno(WSAGetLastError());
}
return rc;
}
int win32_close_socket(SOCKET fd)
{
int rc = closesocket(fd);
if(rc == SOCKET_ERROR) {
set_socket_errno(WSAGetLastError());
}
return rc;
}
ssize_t win32_write_socket(SOCKET fd, void *buf, int n)
{
int rc = send(fd, buf, n, 0);
if(rc == SOCKET_ERROR) {
set_socket_errno(WSAGetLastError());
}
return rc;
}
ssize_t win32_read_socket(SOCKET fd, void *buf, int n)
{
int rc = recv(fd, buf, n, 0);
if(rc == SOCKET_ERROR) {
set_socket_errno(WSAGetLastError());
}
return rc;
}
char * win32_strtok_r(char *s, const char *delim, char **lasts)
{
register char *spanp;
register int c, sc;
char *tok;
if (s == NULL && (s = *lasts) == NULL)
return (NULL);
/*
* Skip (span) leading delimiters (s += strspn(s, delim), sort of).
*/
cont:
c = *s++;
for (spanp = (char *)delim; (sc = *spanp++) != 0;) {
if (c == sc)
goto cont;
}
if (c == 0) { /* no non-delimiter characters */
*lasts = NULL;
return (NULL);
}
tok = s - 1;
/*
* Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
* Note that delim must have one NUL; we stop if we see that, too.
*/
for (;;) {
c = *s++;
spanp = (char *)delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*lasts = s;
return (tok);
}
} while (sc != 0);
}
/* NOTREACHED */
}
char *win32_strsep (char **stringp, const char *delim)
{
register char *s;
register const char *spanp;
register int c, sc;
char *tok;
if ((s = *stringp) == NULL)
return (NULL);
for (tok = s;;) {
c = *s++;
spanp = delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*stringp = s;
return (tok);
}
} while (sc != 0);
}
/* NOTREACHED */
}
#ifdef noneed
/******************************************************************************
time32.c -- extended time functions that use all 32 bits
Author: Mark Baranowski
Email: requestXXX@els-software.org (remove XXX)
Download: http://els-software.org
Last significant change: May 6, 2015
These functions are provided "as is" in the hopes that they might serve some
higher purpose. If you want these functions to serve some lower purpose,
then that too is all right. So as to keep these hopes alive you may
freely distribute these functions so long as this header remains intact.
You may also freely distribute modified versions of these functions so long
as you indicate that such versions are modified and so long as you
provide access to the unmodified original copy.
Note: The most recent version of these functions may be obtained from
http://els-software.org
The following functions support Unix time beyond Jan 19 03:14:08 2038 GMT,
assuming that the future standard will treat the 32-bits used by Unix's
present-day file system as unsigned.
These functions work by mapping years within the region 2038-2106 down
into the region of 2010-2037. All fields of the "tm" structure,
including those fields dealing with day-of-week and daylight savings time
are correct! Bear in mind, however, that the definition of daylight
savings time changes with the whims of man, thus the notion of daylight
savings held during 2010-2037 may not be the same as the notion held
thereafter.
See also: time(3)
****************************************************************************/
#include "sysdefs.h"
#include "defs.h"
#include "time32.h"
#include "sysInfo.h"
/*****************************************************************************/
#if defined(HAVE_LONG_LONG_TIME)
struct tm *localtime32_r(const time_t *clock, struct tm *res)
{return localtime_r(clock, res);}
struct tm *gmtime32_r(const time_t *clock, struct tm *res)
{return gmtime_r(clock, res);}
#ifdef USE_POSIX_TIME_R
char *asctime32_r(const struct tm *tm, char *buf)
{return asctime_r(tm, buf);}
char *ctime32_r(const time_t *clock, char *buf)
{return ctime_r(clock, buf);}
#else
char *asctime32_r(const struct tm *tm, char *buf, int buflen)
{return asctime_r(tm, buf, buflen);}
char *ctime32_r(const time_t *clock, char *buf, int buflen)
{return ctime_r(clock, buf, buflen);}
#endif
struct tm *localtime32(const time_t *clock)
{return localtime(clock);}
struct tm *gmtime32(const time_t *clock)
{return gmtime(clock);}
size_t strftime32(char *str, size_t max,
const char *format, const struct tm *tm)
{return strftime(str, max, format, tm);}
char *asctime32(const struct tm *tm)
{return asctime(tm);}
char *ctime32(const time_t *clock)
{return ctime(clock);}
#ifdef HAVE_MKTIME
time_t mktime32(const struct tm *tm)
{return mktime(tm);}
#endif
#ifdef HAVE_TIMELOCAL
/* FreeBSD/Darwin do NOT declare these args as "const": */
time_t timelocal32(struct tm *tm)
{return timelocal(tm);}
time_t timegm32(struct tm *tm)
{return timegm(tm);}
#endif
/*****************************************************************************/
#else
Local void mapclock32(time_t *clock, int *years);
Local void mapyears32(int *years, time_t *clock);
#if !defined(HAVE_TIME_R)
struct tm *localtime_r(const time_t *clock, struct tm *xtime);
struct tm *gmtime_r(const time_t *clock, struct tm *xtime);
# ifdef USE_POSIX_TIME_R
char *asctime_r(const struct tm *tm, char *buf);
char *ctime_r(const time_t *clock, char *buf);
# else
char *asctime_r(const struct tm *tm, char *buf, int buflen);
char *ctime_r(const time_t *clock, char *buf, int buflen);
# endif
#endif /* !defined(HAVE_TIME_R) */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
struct tm *localtime32_r(const time_t *clock, struct tm *xtime)
{
time_t xclock = *clock;
int xyears;
mapclock32(&xclock, &xyears);
localtime_r(&xclock, xtime);
xtime->tm_year += xyears;
return(xtime);
}
struct tm *localtime32(const time_t *clock)
{
static struct tm xtime; /* return value must be static */
return(localtime32_r(clock, &xtime));
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
struct tm *gmtime32_r(const time_t *clock, struct tm *xtime)
{
time_t xclock = *clock;
int xyears;
mapclock32(&xclock, &xyears);
gmtime_r(&xclock, xtime);
xtime->tm_year += xyears;
return(xtime);
}
struct tm *gmtime32(const time_t *clock)
{
static struct tm xtime; /* return value must be static */
return(gmtime32_r(clock, &xtime));
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* NB: strftime32 will work correctly for all years > 2038 IF and only
IF the "tm" parameter given it was generated using one of the
time32 functions: localtime32(), localtime32_r(), gmtime32(), or
gmtime32_r(). */
/* NB: strftime() is known to be in SunOS4/5, HPUX10/11, Linux2.2/4/6;
So far Only SunOS5 is known to have cftime() and ascftime() */
size_t strftime32(char *str, size_t max,
const char *format, const struct tm *tm)
{
#if defined(SUNOS)
/* SunOS 5.8, 5.9, 5.10 has a quirk where "strftime(..., ..., "%a", tm)"
corrupts tzname[0] and tzname[1] for certain values of tm_year, e.g.
"edate -C 0xd0700000" currupts tzname[], but "edate -C 0xd0800000"
doesn't. Setting tm_year within spec fixes this problem, but creates
a different problem if asked to print the year. All other OSes
including SunOS5.7 appear to take tm_year at face value. */
if (osVersion == 0) osVersion = get_osVersion();
if (osVersion >= 50800)
{
struct tm xtime = *tm;
time_t xclock = 0;
mapyears32(&xtime.tm_year, &xclock);
return(strftime(str, max, format, &xtime));
}
#endif
/* Fall through for OS versions that take tm_year at face value: */
return(strftime(str, max, format, tm));
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* NB: asctime32() and asctime32_r() will work correctly for all years > 2038
IF and only IF the "tm" parameter given it was generated using one of the
time32 functions: localtime32(), localtime32_r(), gmtime32(), or
gmtime32_r(). */
#ifdef USE_POSIX_TIME_R
char *asctime32_r(const struct tm *tm, char *buf)
{
return(asctime_r(tm, buf));
}
#else
char *asctime32_r(const struct tm *tm, char *buf, int buflen)
{
return(asctime_r(tm, buf, buflen));
}
#endif
char *asctime32(const struct tm *tm)
{
# define BUF_SIZE (26+8) /* 8 bytes of slack */
static char buf[BUF_SIZE]; /* return value must be static */
#ifdef USE_POSIX_TIME_R
return(asctime32_r(tm, buf));
#else
return(asctime32_r(tm, buf, BUF_SIZE));
#endif
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifdef USE_POSIX_TIME_R
char *ctime32_r(const time_t *clock, char *buf)
{
struct tm xtime;
return(asctime32_r(localtime32_r(clock, &xtime), buf));
}
#else
char *ctime32_r(const time_t *clock, char *buf, int buflen)
{
struct tm xtime;
return(asctime32_r(localtime32_r(clock, &xtime), buf, buflen));
}
#endif
char *ctime32(const time_t *clock)
{
# define BUF_SIZE (26+8) /* 8 bytes of slack */
static char buf[BUF_SIZE]; /* return value must be static */
#ifdef USE_POSIX_TIME_R
return(ctime32_r(clock, buf));
#else
return(ctime32_r(clock, buf, BUF_SIZE));
#endif
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* mktime is known to be supported by: HPUX 10+, SunOS5+, Linux2.2+, OSF1
mktime is known to NOT be supported by: SunOS4 */
#ifdef HAVE_MKTIME
time_t mktime32(const struct tm *tm)
{
struct tm xtime = *tm;
time_t xclock;
mapyears32(&xtime.tm_year, &xclock);
return(mktime(&xtime) + xclock);
}
#endif /*HAVE_MKTIME*/
/* timelocal and timegm are only known to be supported by SunOS4. Perhaps
older BSD-based OSes also support them, but POSIX based UNIXes do not. */
#ifdef HAVE_TIMELOCAL
time_t timelocal32(struct tm *tm)
{
struct tm xtime = *tm;
time_t xclock;
mapyears32(&xtime.tm_year, &xclock);
return(timelocal(&xtime) + xclock);
}
time_t timegm32(struct tm *tm)
{
struct tm xtime = *tm;
time_t xclock;
mapyears32(&xtime.tm_year, &xclock);
return(timegm(&xtime) + xclock);
}
#endif /*HAVE_TIMELOCAL*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#define _28_YEARS ( 28 * SECS_PER_YEAR)
#define _68_YEARS ( 68 * SECS_PER_YEAR)
#define _90_YEARS ( 88 * SECS_PER_YEAR + 2*365*SECS_PER_DAY)
#define _96_YEARS ( 96 * SECS_PER_YEAR)
#define JAN_1_2100 (128 * SECS_PER_YEAR + 2*365*SECS_PER_DAY)
#define JAN_1_2102 (JAN_1_2100 + 2*365*SECS_PER_DAY) /* leap year missing */
#define JAN_1_2106 (JAN_1_2102 + 4*SECS_PER_YEAR)
#define TIME32 ((Ulong)0x80000000)
Local void mapclock32(time_t *clock, int *years)
{
Ulong xclock = (Ulong)*clock;
int xyears = 0;
/* Prevent certain processors (e.g. DEC_ALPHA) from sign extending: */
if (sizeof(Ulong) > 4) xclock &= 0xffffffff;
/* Years from 1970 up until Jan 19 03:14:08 2038 GMT need no mapping. */
if (xclock >= TIME32)
{
/* Map years beyond Jan 19 03:14:08 2038 GMT: */
if (xclock >= JAN_1_2100)
{
if (xclock < JAN_1_2102)
{
/* Map years 2100 and 2101:
(These two years must be contiguously mapped in order for
localtime(JAN_1_2101) to return the correct "tm_yday" value.
Hint: think about how Jan 1 2101, 00:00 GMT maps into
Dec 31 2100 LOCAL TIME). */
xclock -= _90_YEARS;
xyears = 90;
}
else if (xclock < JAN_1_2106)
{
/* Map years from 2102 up until 2106: */
xclock -= _68_YEARS;
xclock += SECS_PER_DAY; /* Compensate for missing leap year in 2100! */
xyears = 68;
}
else
{
/* Map years from Jan 1 2106 up until Feb 7 04:28:14 2106 GMT: */
xclock -= _96_YEARS;
xclock += SECS_PER_DAY; /* Compensate for missing leap year in 2100! */
xyears = 96;
}
}
else
{
/* Map years from 2038 up until 2100: */
while (xclock >= TIME32)
{
xclock -= _28_YEARS;
xyears += 28;
}
}
}
*clock = xclock;
*years = xyears;
return;
}
#define _1970 ( 70)
#define _2038 ( 68 + _1970)
#define _2100 (130 + _1970)
#define _2102 (132 + _1970)
#define _2106 (136 + _1970)
Local void mapyears32(int *years, time_t *clock)
{
Ulong xclock = 0;
int xyears = *years;
/* Years from 1970 up until Jan 19 03:14:08 2038 GMT need no mapping. */
if (xyears >= _2038)
{
/* Map years beyond Jan 19 03:14:08 2038 GMT: */
if (xyears >= _2100)
{
if (xyears < _2102)
{
/* Map years 2100 and 2101:
(These two years must be contiguously mapped in order for
localtime(JAN_1_2101) to return the correct "tm_yday" value.
Hint: think about how Jan 1 2101, 00:00 GMT maps into
Dec 31 2100 LOCAL TIME). */
xyears -= 90;
xclock = _90_YEARS;
}
else if (xyears < _2106)
{
/* Map years from 2102 up until 2106: */
xyears -= 68;
xclock = _68_YEARS;
xclock -= SECS_PER_DAY; /* Compensate for missing leap year in 2100! */
}
else
{
/* Map years from Jan 1 2106 up until Feb 7 04:28:14 2106 GMT: */
xyears -= 96;
xclock = _96_YEARS;
xclock -= SECS_PER_DAY; /* Compensate for missing leap year in 2100! */
}
}
else
{
/* Map years from 2038 up until 2100: */
while (xyears >= _2038)
{
xyears -= 28;
xclock += _28_YEARS;
}
}
}
*years = xyears;
*clock = xclock;
return;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* The following ERSATZ *time_r() routines localtime_r(), gmtime_r(),
asctime_r(), and ctime_r() are provided here as cheap substitutes to be
used ONLY by those Unixes that are lacking these functions. Moreover,
when building on a Unix that has NATIVE support for the following ERSATZ
functions be sure to define HAVE_TIME_R so that the compiler will instead
make use of its NATIVE *time_r() routines.
NOTE: If you must resort to using the following ERSATZ *time_r() routines
then as a consequence the *time32_r() functions in the previous section
will not be fully reentrant. HOWEVER, if you can AVOID using the
following routines and instead make use of your Unix's NATIVE *time_r()
routines then as a result the *time32_r() in the previous section will
also be reentrant! */
#if !defined(HAVE_TIME_R)
struct tm *localtime_r(const time_t *clock, struct tm *xtime)
{
*xtime = *localtime(clock);
return(xtime);
}
struct tm *gmtime_r(const time_t *clock, struct tm *xtime)
{
*xtime = *gmtime(clock);
return(xtime);
}
#include <string.h>
# ifdef USE_POSIX_TIME_R
char *asctime_r(const struct tm *tm, char *buf)
{
strcpy(buf, asctime(tm));
return(buf);
}
char *ctime_r(const time_t *clock, char *buf)
{
strcpy(buf, ctime(clock));
return(buf);
}
# else
char *asctime_r(const struct tm *tm, char *buf, int buflen)
{
strncpy(buf, asctime(tm), buflen);
return(buf);
}
char *ctime_r(const time_t *clock, char *buf, int buflen)
{
strncpy(buf, ctime(clock), buflen);
return(buf);
}
# endif
#endif /* !defined(HAVE_TIME_R) */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*****************************************************************************/
#endif /* !defined(HAVE_LONG_LONG_TIME) */
#endif
#endif

76
win/mingw.h

@ -0,0 +1,76 @@
#ifndef MINGW_H
#define MINGW_H
#include <io.h>
#define _USE_W32_SOCKETS 1
#include <windows.h>
#include "pthread.h"
#define ENOTCONN WSAENOTCONN
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOBUFS WSAENOBUFS
#define ECONNRESET WSAECONNRESET
#define ESHUTDOWN WSAESHUTDOWN
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define EINPROGRESS WSAEINPROGRESS
#define EISCONN WSAEISCONN
#define ECONNREFUSED WSAECONNREFUSED
#define EHOSTUNREACH WSAEHOSTUNREACH
/* winsock doesn't feature poll(), so there is a version implemented
* in terms of select() in mingw.c. The following definitions
* are copied from linux man pages. A poll() macro is defined to
* call the version in mingw.c.
*/
#define POLLIN 0x0001 /* There is data to read */
#define POLLPRI 0x0002 /* There is urgent data to read */
#define POLLOUT 0x0004 /* Writing now will not block */
#define POLLERR 0x0008 /* Error condition */
#define POLLHUP 0x0010 /* Hung up */
#define POLLNVAL 0x0020 /* Invalid request: fd not open */
struct pollfd {
SOCKET fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
#define poll(x, y, z) win32_poll(x, y, z)
/* These wrappers do nothing special except set the global errno variable if
* an error occurs (winsock doesn't do this by default). They set errno
* to unix-like values (i.e. WSAEWOULDBLOCK is mapped to EAGAIN), so code
* outside of this file "shouldn't" have to worry about winsock specific error
* handling.
*/
//#define socket(x, y, z) win32_socket(x, y, z)
//#define connect(x, y, z) win32_connect(x, y, z)
//#define accept(x, y, z) win32_accept(x, y, z)
//#define shutdown(x, y) win32_shutdown(x, y)
//#define read(x, y, z) win32_read_socket(x, y, z)
//#define write(x, y, z) win32_write_socket(x, y, z)
/* Winsock uses int instead of the usual socklen_t */
typedef int socklen_t;
int win32_poll(struct pollfd *, unsigned int, int);
//SOCKET win32_socket(int, int, int);
//int win32_connect(SOCKET, struct sockaddr*, socklen_t);
//SOCKET win32_accept(SOCKET, struct sockaddr*, socklen_t *);
//int win32_shutdown(SOCKET, int);
//int win32_close_socket(SOCKET fd);
//#define strtok_r(x, y, z) win32_strtok_r(x, y, z)
//#define strsep(x,y) win32_strsep(x,y)
char *win32_strtok_r(char *s, const char *delim, char **lasts);
char *win32_strsep(char **stringp, const char *delim);
ssize_t win32_read_socket(SOCKET fd, void *buf, int n);
ssize_t win32_write_socket(SOCKET fd, void *buf, int n);
//static inline void sleep(unsigned ms) { Sleep(ms*1000); }
#endif

51
win/mman.h

@ -0,0 +1,51 @@
#ifndef _SYS_MMAN_H_
#define _SYS_MMAN_H_
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
/* All the headers include this file. */
#ifndef _MSC_VER
#include <_mingw.h>
#endif
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PROT_NONE 0
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
#define MAP_FILE 0
#define MAP_SHARED 1
#define MAP_PRIVATE 2
#define MAP_TYPE 0xf
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FAILED ((void *)-1)
/* Flags for msync. */
#define MS_ASYNC 1
#define MS_SYNC 2
#define MS_INVALIDATE 4
void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
int munmap(void *addr, size_t len);
int _mprotect(void *addr, size_t len, int prot);
int msync(void *addr, size_t len, int flags);
int mlock(const void *addr, size_t len);
int munlock(const void *addr, size_t len);
#ifdef __cplusplus
};
#endif
#endif

1368
win/pthread.h

File diff suppressed because it is too large

BIN
win/pthreadGC2.dll

Binary file not shown.

BIN
win/pthreadGC2_64.dll

Binary file not shown.

183
win/sched.h

@ -0,0 +1,183 @@
/*
* Module: sched.h
*
* Purpose:
* Provides an implementation of POSIX realtime extensions
* as defined in
*
* POSIX 1003.1b-1993 (POSIX.1b)
*
* --------------------------------------------------------------------------
*
* Pthreads-win32 - POSIX Threads Library for Win32
* Copyright(C) 1998 John E. Bossom
* Copyright(C) 1999,2005 Pthreads-win32 contributors
*
* Contact Email: rpj@callisto.canberra.edu.au
*
* The current list of contributors is contained
* in the file CONTRIBUTORS included with the source
* code distribution. The list can also be seen at the
* following World Wide Web location:
* http://sources.redhat.com/pthreads-win32/contributors.html
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library in the file COPYING.LIB;
* if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(_SCHED_H)
#define _SCHED_H
#undef PTW32_SCHED_LEVEL
#if defined(_POSIX_SOURCE)
#define PTW32_SCHED_LEVEL 0
/* Early POSIX */
#endif
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
#undef PTW32_SCHED_LEVEL
#define PTW32_SCHED_LEVEL 1
/* Include 1b, 1c and 1d */
#endif
#if defined(INCLUDE_NP)
#undef PTW32_SCHED_LEVEL
#define PTW32_SCHED_LEVEL 2
/* Include Non-Portable extensions */
#endif
#define PTW32_SCHED_LEVEL_MAX 3
#if ( defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112 ) || !defined(PTW32_SCHED_LEVEL)
#define PTW32_SCHED_LEVEL PTW32_SCHED_LEVEL_MAX
/* Include everything */
#endif
#if defined(__GNUC__) && !defined(__declspec)
# error Please upgrade your GNU compiler to one that supports __declspec.
#endif
/*
* When building the library, you should define PTW32_BUILD so that
* the variables/functions are exported correctly. When using the library,
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
#if !defined(PTW32_STATIC_LIB)
# if defined(PTW32_BUILD)
# define PTW32_DLLPORT __declspec (dllexport)
# else
# define PTW32_DLLPORT __declspec (dllimport)
# endif
#else
# define PTW32_DLLPORT
#endif
/*
* This is a duplicate of what is in the autoconf config.h,
* which is only used when building the pthread-win32 libraries.
*/
#if !defined(PTW32_CONFIG_H)
# if defined(WINCE)
# define NEED_ERRNO
# define NEED_SEM
# endif
# if defined(__MINGW64__)
# define HAVE_STRUCT_TIMESPEC
# define HAVE_MODE_T
# elif defined(_UWIN) || defined(__MINGW32__)
# define HAVE_MODE_T
# endif
#endif
/*
*
*/
#if PTW32_SCHED_LEVEL >= PTW32_SCHED_LEVEL_MAX
#if defined(NEED_ERRNO)
#include "need_errno.h"
#else
#include <errno.h>
#endif
#endif /* PTW32_SCHED_LEVEL >= PTW32_SCHED_LEVEL_MAX */
#if (defined(__MINGW64__) || defined(__MINGW32__)) || defined(_UWIN)
# if PTW32_SCHED_LEVEL >= PTW32_SCHED_LEVEL_MAX
/* For pid_t */
# include <sys/types.h>
/* Required by Unix 98 */
# include <time.h>
# else
typedef int pid_t;
# endif
#else
typedef int pid_t;
#endif
/* Thread scheduling policies */
enum {
SCHED_OTHER = 0,
SCHED_FIFO,
SCHED_RR,
SCHED_MIN = SCHED_OTHER,
SCHED_MAX = SCHED_RR
};
struct sched_param {
int sched_priority;
};
#if defined(__cplusplus)
extern "C"
{
#endif /* __cplusplus */
PTW32_DLLPORT int __cdecl sched_yield (void);
PTW32_DLLPORT int __cdecl sched_get_priority_min (int policy);
PTW32_DLLPORT int __cdecl sched_get_priority_max (int policy);
PTW32_DLLPORT int __cdecl sched_setscheduler (pid_t pid, int policy);
PTW32_DLLPORT int __cdecl sched_getscheduler (pid_t pid);
/*
* Note that this macro returns ENOTSUP rather than
* ENOSYS as might be expected. However, returning ENOSYS
* should mean that sched_get_priority_{min,max} are
* not implemented as well as sched_rr_get_interval.
* This is not the case, since we just don't support
* round-robin scheduling. Therefore I have chosen to
* return the same value as sched_setscheduler when
* SCHED_RR is passed to it.
*/
#define sched_rr_get_interval(_pid, _interval) \
( errno = ENOTSUP, (int) -1 )
#if defined(__cplusplus)
} /* End of extern "C" */
#endif /* __cplusplus */
#undef PTW32_SCHED_LEVEL
#undef PTW32_SCHED_LEVEL_MAX
#endif /* !_SCHED_H */

169
win/semaphore.h

@ -0,0 +1,169 @@
/*
* Module: semaphore.h
*
* Purpose:
* Semaphores aren't actually part of the PThreads standard.
* They are defined by the POSIX Standard:
*
* POSIX 1003.1b-1993 (POSIX.1b)
*
* --------------------------------------------------------------------------
*
* Pthreads-win32 - POSIX Threads Library for Win32
* Copyright(C) 1998 John E. Bossom
* Copyright(C) 1999,2005 Pthreads-win32 contributors
*
* Contact Email: rpj@callisto.canberra.edu.au
*
* The current list of contributors is contained
* in the file CONTRIBUTORS included with the source
* code distribution. The list can also be seen at the
* following World Wide Web location:
* http://sources.redhat.com/pthreads-win32/contributors.html
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library in the file COPYING.LIB;
* if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined( SEMAPHORE_H )
#define SEMAPHORE_H
#undef PTW32_SEMAPHORE_LEVEL
#if defined(_POSIX_SOURCE)
#define PTW32_SEMAPHORE_LEVEL 0
/* Early POSIX */
#endif
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
#undef PTW32_SEMAPHORE_LEVEL
#define PTW32_SEMAPHORE_LEVEL 1
/* Include 1b, 1c and 1d */
#endif
#if defined(INCLUDE_NP)
#undef PTW32_SEMAPHORE_LEVEL
#define PTW32_SEMAPHORE_LEVEL 2
/* Include Non-Portable extensions */
#endif
#define PTW32_SEMAPHORE_LEVEL_MAX 3
#if !defined(PTW32_SEMAPHORE_LEVEL)
#define PTW32_SEMAPHORE_LEVEL PTW32_SEMAPHORE_LEVEL_MAX
/* Include everything */
#endif
#if defined(__GNUC__) && ! defined (__declspec)
# error Please upgrade your GNU compiler to one that supports __declspec.
#endif
/*
* When building the library, you should define PTW32_BUILD so that
* the variables/functions are exported correctly. When using the library,
* do NOT define PTW32_BUILD, and then the variables/functions will
* be imported correctly.
*/
#if !defined(PTW32_STATIC_LIB)
# if defined(PTW32_BUILD)
# define PTW32_DLLPORT __declspec (dllexport)
# else
# define PTW32_DLLPORT __declspec (dllimport)
# endif
#else
# define PTW32_DLLPORT
#endif
/*
* This is a duplicate of what is in the autoconf config.h,
* which is only used when building the pthread-win32 libraries.
*/
#if !defined(PTW32_CONFIG_H)
# if defined(WINCE)
# define NEED_ERRNO
# define NEED_SEM
# endif
# if defined(__MINGW64__)
# define HAVE_STRUCT_TIMESPEC
# define HAVE_MODE_T
# elif defined(_UWIN) || defined(__MINGW32__)
# define HAVE_MODE_T
# endif
#endif
/*
*
*/
#if PTW32_SEMAPHORE_LEVEL >= PTW32_SEMAPHORE_LEVEL_MAX
#if defined(NEED_ERRNO)
#include "need_errno.h"
#else
#include <errno.h>
#endif
#endif /* PTW32_SEMAPHORE_LEVEL >= PTW32_SEMAPHORE_LEVEL_MAX */
#define _POSIX_SEMAPHORES
#if defined(__cplusplus)
extern "C"
{
#endif /* __cplusplus */
#if !defined(HAVE_MODE_T)
typedef unsigned int mode_t;
#endif
typedef struct sem_t_ * sem_t;
PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
int pshared,
unsigned int value);
PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
const struct timespec * abstime);
PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
int count);
PTW32_DLLPORT int __cdecl sem_open (const char * name,
int oflag,
mode_t mode,
unsigned int value);
PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
int * sval);
#if defined(__cplusplus)
} /* End of extern "C" */
#endif /* __cplusplus */
#undef PTW32_SEMAPHORE_LEVEL
#undef PTW32_SEMAPHORE_LEVEL_MAX
#endif /* !SEMAPHORE_H */
Loading…
Cancel
Save