8 #define O_BINARY _O_BINARY
9 #define O_CREAT _O_CREAT
10 #define O_EXCL _O_EXCL
11 #define S_IREAD _S_IREAD
12 #define S_IWRITE _S_IWRITE
15 #include <arpa/inet.h>
30 #include <endianness_config.h>
35 std::function<void()>* f =
reinterpret_cast<std::function<void()>*
>(hint);
41 uint32_t temp = htobe32(value);
42 memcpy(buffer, &temp,
sizeof(uint32_t));
46 uint64_t temp = htobe64(value);
47 memcpy(buffer, &temp,
sizeof(uint64_t));
52 memcpy(&temp, buffer,
sizeof(uint32_t));
58 memcpy(&temp, buffer,
sizeof(uint64_t));
64 HANDLE h_th = (HANDLE)th.native_handle();
68 case REALTIME : (void) SetThreadPriority(h_th, THREAD_PRIORITY_TIME_CRITICAL);
break;
69 case HIGH : (void) SetThreadPriority(h_th, THREAD_PRIORITY_HIGHEST);
break;
70 case ABOVE_NORMAL : (void) SetThreadPriority(h_th, THREAD_PRIORITY_ABOVE_NORMAL);
break;
71 case NORMAL : (void) SetThreadPriority(h_th, THREAD_PRIORITY_NORMAL);
break;
72 case BELOW_NORMAL : (void) SetThreadPriority(h_th, THREAD_PRIORITY_BELOW_NORMAL);
break;
73 case IDLE : (void) SetThreadPriority(h_th, THREAD_PRIORITY_LOWEST);
break;
77 pthread_t thId = (pthread_t)th.native_handle();
78 pthread_attr_t thAttr;
84 pthread_attr_init(&thAttr);
85 pthread_attr_getschedpolicy(&thAttr, &policy);
86 minPrio = sched_get_priority_min(policy);
87 maxPrio = sched_get_priority_max(policy);
94 iprio = (3 * maxPrio + minPrio) / 4;
97 iprio = (2 * maxPrio + minPrio) / 3;
100 iprio = (maxPrio + 2 * minPrio) / 3;
107 iprio = (maxPrio + minPrio) / 2;
110 pthread_setschedprio(thId, iprio);
111 pthread_attr_destroy(&thAttr);
117 return fwrite(str.c_str(), 1, str.size(), stream);
129 static const char letters[] =
130 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
136 int mkstemp (
char *tmpl) {
139 static unsigned long long value;
140 unsigned long long random_time_bits;
143 int save_errno = errno;
151 #define ATTEMPTS_MIN (62 * 62 * 62)
155 #if ATTEMPTS_MIN < TMP_MAX
156 unsigned int attempts = TMP_MAX;
158 unsigned int attempts = ATTEMPTS_MIN;
162 if (len < 6 || strcmp (&tmpl[len - 6],
"XXXXXX"))
169 XXXXXX = &tmpl[len - 6];
177 GetSystemTime(&stNow);
178 stNow.wMilliseconds = 500;
179 if (!SystemTimeToFileTime(&stNow, &ftNow))
185 random_time_bits = (((
unsigned long long)ftNow.dwHighDateTime << 32)
186 | (
unsigned long long)ftNow.dwLowDateTime);
188 value += random_time_bits ^ (
unsigned long long)GetCurrentThreadId ();
190 for (count = 0; count < attempts; value += 7777, ++count)
192 unsigned long long v = value;
195 XXXXXX[0] = letters[v % 62];
197 XXXXXX[1] = letters[v % 62];
199 XXXXXX[2] = letters[v % 62];
201 XXXXXX[3] = letters[v % 62];
203 XXXXXX[4] = letters[v % 62];
205 XXXXXX[5] = letters[v % 62];
208 _sopen_s(&fd, tmpl, _O_RDWR | _O_BINARY | _O_CREAT | _O_EXCL, _SH_DENYRW, _S_IREAD | _S_IWRITE);
210 fd = open (tmpl, O_RDWR | O_BINARY | O_CREAT | O_EXCL, S_IREAD | S_IWRITE);
217 else if (errno != EEXIST)
228 std::stringstream home;
232 _dupenv_s(&temp, &size,
"HOMEDRIVE");
235 _dupenv_s(&temp, &size,
"HOMEPATH");
239 home << getenv(
"HOME");
void insertNetworkUInt32(void *buffer, uint32_t value)
uint64_t readNetworkUInt64(void *buffer)
size_t fwriteString(FILE *stream, const std::string &str)
void cbWrapper(void *data, void *hint)
void insertNetworkUInt64(void *buffer, uint64_t value)
void setThreadPriority(std::thread &th, thread_priority_t prio)
uint32_t readNetworkUInt32(void *buffer)