/* unistd.h: replaces *nix header of same name // Windows emulation of common *nix functions // Copyright Nov 10, 2002, Robin.Rowe@CinePaint.org // License MIT (http://opensource.org/licenses/mit-license.php) */ #include "unistd.h" #include "sys/sys_types.h" pid_t getpgrp() /* POSIX.1 version */ { STUB_0(getpgrp); } pid_t getpgrp(pid_t pid) /* BSD version */ { (void)pid; STUB_0(getpgrp); } int setpgrp() /* System V version */ { STUB_0(setpgrp); } int setpgrp(pid_t pid, pid_t pgid) /* BSD version */ { (void)pid; (void)pgid; STUB_0(setpgrp); } #pragma warning(disable : 4996) int read(int fh, void* buf, unsigned count) { return _read(fh,buf,count); } int pipe(int pipes[2]) { return _pipe((pipes), 8*1024, _O_BINARY); } int snprintb(char *buf, size_t buflen, const char *fmt, uint64_t val) { (void)buf; (void)buflen; (void)fmt; (void)val; STUB_0(snprintb); } int snprintb_m(char *buf, size_t buflen, const char *fmt, uint64_t val,size_t max) { (void)buf; (void)buflen; (void)fmt; (void)val; (void)max; STUB_0(snprintb_m); } int uni_open(const char* filename,unsigned oflag,int mode) { return _open(filename,oflag,mode); } int mkdir2(const char* path, int mask) { (void) mask; return _mkdir(path); } int uni_open(const char* filename, unsigned oflag,...) { return _open(filename, oflag, 0); } int fcntl(int handle, int mode,...) { (void)handle; (void)mode; STUB_0(fcntl); } #if 0 int fcntl(int handle,int mode,int mode2) { (void)handle; (void)mode; (void)mode2; STUB_0(fcntl); } #endif size_t unistd_safe_strlen(const char* s) { if(!s) { puts("ERROR: strlen(null)"); return 0; } return (s ? strlen(s):0); } int uni_sscanf(char* input,const char* format,...) { if(!input || !*input || !format) { return 0; } const size_t length = strlen(input); va_list argList; va_start(argList,format);// BUG/BROKEN: should be count of args, not format #pragma warning(disable:4996) const int retval = _snscanf(input,length,format,argList); va_end(argList); input[length-1]=0; return retval; } #undef MAX_PRIORITY /* remove winspool.h warning */ #if 0 int strncasecmp(const char *s1, const char *s2, size_t n) { for(unsigned i=0;i 1.0? 1.0:r; } /*double srand48(time_t);*/ void srand48(long int seedval) { srand(seedval); } long int random() { return rand(); } void srandom(unsigned int seed) { srand(seed); } #if 0 int sleep(useconds_t seconds) { Sleep((DWORD)(1000*seconds)); return 0; } int usleep(useconds_t usec) { LARGE_INTEGER time1; LARGE_INTEGER time2; LARGE_INTEGER freq; time1.QuadPart = 0; time2.QuadPart = 0; freq.QuadPart = 0; QueryPerformanceCounter(&time1); QueryPerformanceFrequency(&freq); do { QueryPerformanceCounter(&time2); } while((time2.QuadPart-time1.QuadPart) < usec); return 0; } #endif int ftruncate(int fd, off_t length) { return _chsize(fd,length); } int fseeko(FILE *stream, off_t offset, int whence) { return fseek(stream,offset,whence); } off_t ftello(FILE *stream) { return ftell(stream); } ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset) { if (nbyte == 0) { return 0; } OVERLAPPED overlapped; memset(&overlapped, 0, sizeof(overlapped)); overlapped.Offset = static_cast(offset); overlapped.OffsetHigh = offset >> 32; DWORD written; if (!WriteFile((HANDLE)_get_osfhandle(fildes), buf, static_cast(nbyte), &written, &overlapped)) { return -1; } return written; } int setlinebuf(FILE *stream) { return setvbuf(stream, NULL, _IONBF, 0); } int vasprintf(char **ptr, const char *format, va_list arg) { int n = _vscprintf(format, arg); if (n < 0) return -1; char *p = (char *)malloc(n+1); if (p == NULL) return -1; int rv = vsprintf_s(p, n+1, format, arg); if (rv < 0) { free(p); return -1; } *ptr = p; return rv; }