mirror of https://github.com/GOSTSec/sgminer
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
2.6 KiB
139 lines
2.6 KiB
#ifndef COMPAT_H |
|
#define COMPAT_H |
|
|
|
#ifdef WIN32 |
|
#include "config.h" |
|
#include <errno.h> |
|
#include <fcntl.h> |
|
#include <time.h> |
|
#include <pthread.h> |
|
#include <sys/time.h> |
|
|
|
#include "miner.h" // for timersub |
|
#include "util.h" |
|
|
|
#include <windows.h> |
|
|
|
|
|
#if !defined S_ISDIR && defined S_IFDIR |
|
# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) |
|
#endif |
|
#if !S_IRUSR && S_IREAD |
|
# define S_IRUSR S_IREAD |
|
#endif |
|
#if !S_IRUSR |
|
# define S_IRUSR 00400 |
|
#endif |
|
#if !S_IWUSR && S_IWRITE |
|
# define S_IWUSR S_IWRITE |
|
#endif |
|
#if !S_IWUSR |
|
# define S_IWUSR 00200 |
|
#endif |
|
#if !S_IXUSR && S_IEXEC |
|
# define S_IXUSR S_IEXEC |
|
#endif |
|
#if !S_IXUSR |
|
# define S_IXUSR 00100 |
|
#endif |
|
|
|
#ifndef HAVE_LIBWINPTHREAD |
|
static inline int nanosleep(const struct timespec *req, struct timespec *rem) |
|
{ |
|
struct timeval tstart; |
|
DWORD msecs; |
|
|
|
cgtime(&tstart); |
|
msecs = (req->tv_sec * 1000) + ((999999 + req->tv_nsec) / 1000000); |
|
|
|
if (SleepEx(msecs, true) == WAIT_IO_COMPLETION) { |
|
if (rem) { |
|
struct timeval tdone, tnow, tleft; |
|
tdone.tv_sec = tstart.tv_sec + req->tv_sec; |
|
tdone.tv_usec = tstart.tv_usec + ((999 + req->tv_nsec) / 1000); |
|
if (tdone.tv_usec > 1000000) { |
|
tdone.tv_usec -= 1000000; |
|
++tdone.tv_sec; |
|
} |
|
|
|
cgtime(&tnow); |
|
if (timercmp(&tnow, &tdone, >)) |
|
return 0; |
|
timersub(&tdone, &tnow, &tleft); |
|
|
|
rem->tv_sec = tleft.tv_sec; |
|
rem->tv_nsec = tleft.tv_usec * 1000; |
|
} |
|
errno = EINTR; |
|
return -1; |
|
} |
|
return 0; |
|
} |
|
#endif |
|
|
|
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) |
|
// Reported unneded in https://github.com/veox/sgminer/issues/37 */ |
|
static inline int sleep(unsigned int secs) |
|
{ |
|
struct timespec req, rem; |
|
req.tv_sec = secs; |
|
req.tv_nsec = 0; |
|
if (!nanosleep(&req, &rem)) |
|
return 0; |
|
return rem.tv_sec + (rem.tv_nsec ? 1 : 0); |
|
} |
|
#endif |
|
|
|
enum { |
|
PRIO_PROCESS = 0, |
|
}; |
|
|
|
static inline int setpriority(__maybe_unused int which, __maybe_unused int who, __maybe_unused int prio) |
|
{ |
|
/* FIXME - actually do something */ |
|
return 0; |
|
} |
|
|
|
#ifndef HAVE_STRSEP |
|
static inline char *strsep(char **stringp, const char *delim) |
|
{ |
|
char *res; |
|
|
|
if (!stringp || !*stringp || !**stringp) { |
|
return NULL; |
|
} |
|
|
|
res = *stringp; |
|
while(**stringp && !strchr(delim, **stringp)) { |
|
++(*stringp); |
|
} |
|
|
|
if (**stringp) { |
|
**stringp = '\0'; |
|
++(*stringp); |
|
} |
|
|
|
return res; |
|
} |
|
#endif |
|
|
|
|
|
typedef unsigned long int ulong; |
|
typedef unsigned short int ushort; |
|
typedef unsigned int uint; |
|
|
|
#ifndef __SUSECONDS_T_TYPE |
|
typedef long suseconds_t; |
|
#endif |
|
|
|
#ifdef HAVE_LIBWINPTHREAD |
|
#define PTH(thr) ((thr)->pth) |
|
#else |
|
#define PTH(thr) ((thr)->pth.p) |
|
#endif |
|
|
|
#else |
|
#define PTH(thr) ((thr)->pth) |
|
#endif /* WIN32 */ |
|
|
|
#endif /* COMPAT_H */
|
|
|