From 235f93a9fd58ff66835ab278b40a303e49cdea4f Mon Sep 17 00:00:00 2001 From: slguan Date: Fri, 11 Oct 2019 18:08:10 +0800 Subject: [PATCH] add some tool functions --- src/os/windows/inc/os.h | 9 ++++++ src/os/windows/src/twindows.c | 61 +++++++++++++++++++++++++++++++++++ src/util/CMakeLists.txt | 2 ++ 3 files changed, 72 insertions(+) diff --git a/src/os/windows/inc/os.h b/src/os/windows/inc/os.h index 4f724d9133..cb2fd2e034 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 86cdd82f51..f2aa4d2c50 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 16494f259d..70e4fd3aa5 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)