7
|
1 /**
|
|
2 * utils.c:
|
|
3 *
|
|
4 * Useful utilities for general use.
|
|
5 **/
|
|
6 #ifndef WIN32_LEAN_AND_MEAN
|
|
7 # define WIN32_LEAN_AND_MEAN
|
|
8 #endif
|
|
9 #include <windows.h>
|
|
10 #include <stdint.h>
|
|
11
|
|
12 uint64_t get_system_time_in_milliseconds(void) {
|
|
13 FILETIME ft;
|
|
14 GetSystemTimeAsFileTime(&ft);
|
|
15 uint64_t ul = (uint64_t) ft.dwHighDateTime << 32 | ft.dwLowDateTime;
|
|
16 return ((ul - 116444736000000000ULL)/10000000);
|
|
17 }
|
|
18
|
|
19 unsigned int crc32b(unsigned char *message) {
|
|
20 int i, j;
|
|
21 unsigned int byte, crc, mask;
|
|
22
|
|
23 i = 0;
|
|
24 crc = 0xFFFFFFFF;
|
|
25 while (message[i] != 0) {
|
|
26 byte = message[i]; // Get next byte.
|
|
27 crc = crc ^ byte;
|
|
28 for (j = 7; j >= 0; j--) { // Do eight times.
|
|
29 mask = -(crc & 1);
|
|
30 crc = (crc >> 1) ^ (0xEDB88320 & mask);
|
|
31 }
|
|
32 i = i + 1;
|
|
33 }
|
|
34 return ~crc;
|
|
35 }
|