usamir
9 years ago
37 changed files with 2634 additions and 32 deletions
@ -1,6 +1,6 @@ |
|||||
include crypto777.sources |
include crypto777.sources |
||||
|
|
||||
all: |
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)/bin/$(MINGW) -w -D __MINGW -c $(CRYPTO777_SRCS) -I$(TOOL_DIR)/include -I$(APP)/includes/openssl -I$(APP)/crypto777 |
||||
$(TOOL_DIR)/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o |
$(TOOL_DIR)/bin/$(MINGW)-ar rcu ../agents/win32/libcrypto777.a *.o |
||||
rm *.o |
rm *.o |
||||
|
@ -1,6 +1,6 @@ |
|||||
include iguana.sources |
include iguana.sources |
||||
|
|
||||
all: |
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)/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)/$(MINGW)-strip --strip-all ../agents/win32/iguana.exe |
$(TOOL_DIR)/bin/strip --strip-all ../agents/win32/iguana.exe |
||||
|
|
||||
|
@ -1,4 +1,4 @@ |
|||||
include ../mingw.path |
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 |
include mingw |
||||
|
@ -1,3 +1,3 @@ |
|||||
include ../mingw.path64 |
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 |
include mingw64_inc |
||||
|
@ -1,6 +1,6 @@ |
|||||
include iguana.sources |
include iguana.sources |
||||
|
|
||||
all: |
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)/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)/$(MINGW)-strip --strip-all ../agents/win64/iguana.exe |
$(TOOL_DIR)/bin/strip --strip-all ../agents/win64/iguana.exe |
||||
|
|
||||
|
@ -1,2 +1,3 @@ |
|||||
TOOL_DIR := /usr/bin |
TOOL_DIR := /D/MinGW |
||||
MINGW := i586-mingw32msvc |
MINGW := mingw32-gcc |
||||
|
APP := /C/Users/usamir/Documents/GitHub/SuperNET |
||||
|
@ -1,2 +1,3 @@ |
|||||
TOOL_DIR := /usr/bin |
TOOL_DIR := /D/MinGW |
||||
MINGW := i686-w64-mingw32 |
MINGW := mingw32-gcc |
||||
|
APP := /C/Users/usamir/Documents/GitHub/SuperNET |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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 |
||||
|
|
||||
|
|
@ -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 |
||||
|
|
@ -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 |
File diff suppressed because it is too large
Binary file not shown.
Binary file not shown.
@ -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 */ |
||||
|
|
@ -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…
Reference in new issue