diff --git a/src/os/windows/inc/os.h b/src/os/windows/inc/os.h index 4f724d91338c936546e12e72d1e2b2ae4e21e95b..cb2fd2e0347bd64fa520ce245ccdf15668afdb12 100644 --- a/src/os/windows/inc/os.h +++ b/src/os/windows/inc/os.h @@ -125,6 +125,11 @@ void taosGetSystemInfo(); void taosKillSystem(); +int32_t BUILDIN_CLZL(uint64_t val); +int32_t BUILDIN_CLZ(uint32_t val); +int32_t BUILDIN_CTZL(uint64_t val); +int32_t BUILDIN_CTZ(uint32_t val); + //for signal, not dispose #define SIGALRM 1234 typedef int sigset_t; @@ -158,6 +163,10 @@ void sleep(int mseconds); bool taosSkipSocketCheck(); +int fsendfile(FILE* out_file, FILE* in_file, int64_t* offset, int32_t count); + +#define ssize_t int + #ifdef __cplusplus } #endif diff --git a/src/os/windows/src/twindows.c b/src/os/windows/src/twindows.c index 86cdd82f51b3c016d17c4ac608385717a13728ac..f2aa4d2c50f53b0f41b33dfbe9cb175f8efba094 100644 --- a/src/os/windows/src/twindows.c +++ b/src/os/windows/src/twindows.c @@ -198,3 +198,64 @@ bool taosSkipSocketCheck() { return false; } +#define _SEND_FILE_STEP_ 1000 + +int fsendfile(FILE* out_file, FILE* in_file, int64_t* offset, int32_t count) { + fseek(in_file, (int32_t)(*offset), 0); + int writeLen = 0; + uint8_t buffer[_SEND_FILE_STEP_] = { 0 }; + + for (int len = 0; len < (count - _SEND_FILE_STEP_); len += _SEND_FILE_STEP_) { + size_t rlen = fread(buffer, 1, _SEND_FILE_STEP_, in_file); + if (rlen <= 0) { + return writeLen; + } + else if (rlen < _SEND_FILE_STEP_) { + fwrite(buffer, 1, rlen, out_file); + return (int)(writeLen + rlen); + } + else { + fwrite(buffer, 1, _SEND_FILE_STEP_, in_file); + writeLen += _SEND_FILE_STEP_; + } + } + + int remain = count - writeLen; + if (remain > 0) { + size_t rlen = fread(buffer, 1, remain, in_file); + if (rlen <= 0) { + return writeLen; + } + else { + fwrite(buffer, 1, remain, out_file); + writeLen += remain; + } + } + + return writeLen; +} + +int32_t BUILDIN_CLZL(uint64_t val) { + unsigned long r = 0; + _BitScanReverse64(&r, val); + return (int)(r >> 3); +} + +int32_t BUILDIN_CLZ(uint32_t val) { + unsigned long r = 0; + _BitScanReverse(&r, val); + return (int)(r >> 3); +} + +int32_t BUILDIN_CTZL(uint64_t val) { + unsigned long r = 0; + _BitScanForward64(&r, val); + return (int)(r >> 3); +} + +int32_t BUILDIN_CTZ(uint32_t val) { + unsigned long r = 0; + _BitScanForward(&r, val); + return (int)(r >> 3); +} + diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 16494f259d4b4185bc216457ffae38b0dd64c082..70e4fd3aa58d65a906113ba8ec1690a46078a172 100755 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -32,9 +32,11 @@ ELSEIF (${CMAKE_SYSTEM_NAME} MATCHES "Windows") INCLUDE_DIRECTORIES(${TD_ROOT_DIR}/src/inc) INCLUDE_DIRECTORIES(${TD_OS_DIR}/inc) LIST(APPEND SRC ./src/ihash.c) + LIST(APPEND SRC ./src/lz4.c) LIST(APPEND SRC ./src/shash.c) LIST(APPEND SRC ./src/sql.c) LIST(APPEND SRC ./src/tbase64.c) + LIST(APPEND SRC ./src/tcompression.c) LIST(APPEND SRC ./src/tcache.c) LIST(APPEND SRC ./src/textbuffer.c) LIST(APPEND SRC ./src/tglobalcfg.c)