5 * Created by Arno Bakker, Victor Grishchenko
6 * Copyright 2009 Delft University of Technology. All rights reserved.
17 #include <sys/timeb.h>
28 static HANDLE map_handles[1024];
31 size_t file_size (int fd) {
37 int file_seek (int fd, size_t offset) {
39 return lseek(fd,offset,SEEK_SET);
41 return _lseek(fd,offset,SEEK_SET);
45 int file_resize (int fd, size_t new_size) {
47 return ftruncate(fd, new_size);
49 return _chsize(fd,new_size);
53 void print_error(const char* msg) {
56 int e = WSAGetLastError();
58 fprintf(stderr,"network error #%u\n",e);
62 void* memory_map (int fd, size_t size) {
67 mapping = mmap (NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
68 if (mapping==MAP_FAILED)
72 HANDLE fhandle = (HANDLE)_get_osfhandle(fd);
74 HANDLE maphandle = CreateFileMapping( fhandle,
80 if (maphandle == NULL)
82 map_handles[fd] = maphandle;
84 mapping = MapViewOfFile ( maphandle,
94 void memory_unmap (int fd, void* mapping, size_t size) {
99 UnmapViewOfFile(mapping);
100 CloseHandle(map_handles[fd]);
106 size_t pread(int fildes, void *buf, size_t nbyte, long offset)
108 _lseek(fildes,offset,SEEK_SET);
109 return read(fildes,buf,nbyte);
112 size_t pwrite(int fildes, const void *buf, size_t nbyte, long offset)
114 _lseek(fildes,offset,SEEK_SET);
115 return write(fildes,buf,nbyte);
119 int inet_aton(const char *cp, struct in_addr *inp)
121 inp->S_un.S_addr = inet_addr(cp);
129 LARGE_INTEGER get_freq() {
130 LARGE_INTEGER proc_freq;
131 if (!::QueryPerformanceFrequency(&proc_freq))
132 print_error("HiResTimeOfDay: QueryPerformanceFrequency() failed");
138 static LARGE_INTEGER last_time;
139 LARGE_INTEGER cur_time;
140 QueryPerformanceCounter(&cur_time);
141 if (cur_time.QuadPart<last_time.QuadPart)
142 print_error("QueryPerformanceCounter wrapped"); // does this happen?
143 last_time = cur_time;
144 static float freq = 1000000.0/get_freq().QuadPart;
145 tint usec = cur_time.QuadPart * freq;
155 gettimeofday(&t,NULL);
165 void LibraryInit(void)
168 static WSADATA _WSAData;
169 // win32 requires you to initialize the Winsock DLL with the desired
170 // specification version
171 WORD wVersionRequested;
172 wVersionRequested = MAKEWORD(2, 2);
173 WSAStartup(wVersionRequested, &_WSAData);
178 std::string gettmpdir(void)
181 DWORD result = ::GetTempPath(0, _T(""));
183 throw std::runtime_error("Could not get system temp path");
185 std::vector<TCHAR> tempPath(result + 1);
186 result = ::GetTempPath(static_cast<DWORD>(tempPath.size()), &tempPath[0]);
187 if((result == 0) || (result >= tempPath.size()))
188 throw std::runtime_error("Could not get system temp path");
190 return std::string(tempPath.begin(), tempPath.begin() + static_cast<std::size_t>(result));
192 return std::string("/tmp/");
196 bool make_socket_nonblocking(SOCKET fd) {
199 return 0==ioctlsocket(fd, FIONBIO, &enable);
202 return 0==fcntl(fd, F_SETFL, O_NONBLOCK);
206 bool close_socket (SOCKET sock) {
208 return 0==closesocket(sock);
210 return 0==::close(sock);