Merge pull request #22870 from taosdata/fix/xsren/TS-3957/readLineOnWindows_main
Fix/xsren/ts 3957/read line on windows main
This commit is contained in:
commit
4f6f953018
|
@ -176,6 +176,14 @@ IF(APPLE)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
IF(TD_WINDOWS)
|
||||||
|
IF(MSVC)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:8388608")
|
||||||
|
ELSEIF(MINGW)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,8388608")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
MESSAGE(STATUS "Platform arch:" ${PLATFORM_ARCH_STR})
|
MESSAGE(STATUS "Platform arch:" ${PLATFORM_ARCH_STR})
|
||||||
|
|
||||||
set(TD_DEPS_DIR "x86")
|
set(TD_DEPS_DIR "x86")
|
||||||
|
|
|
@ -112,6 +112,8 @@ int32_t taosGetErrorFile(TdFilePtr pFile);
|
||||||
|
|
||||||
int32_t taosCompressFile(char *srcFileName, char *destFileName);
|
int32_t taosCompressFile(char *srcFileName, char *destFileName);
|
||||||
|
|
||||||
|
int32_t taosSetFileHandlesLimit();
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1598,6 +1598,7 @@ int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile
|
||||||
if (taosSetS3Cfg(tsCfg) != 0) return -1;
|
if (taosSetS3Cfg(tsCfg) != 0) return -1;
|
||||||
}
|
}
|
||||||
taosSetSystemCfg(tsCfg);
|
taosSetSystemCfg(tsCfg);
|
||||||
|
if (taosSetFileHandlesLimit() != 0) return -1;
|
||||||
|
|
||||||
cfgDumpCfg(tsCfg, tsc, false);
|
cfgDumpCfg(tsCfg, tsc, false);
|
||||||
|
|
||||||
|
|
|
@ -819,14 +819,38 @@ int64_t taosGetLineFile(TdFilePtr pFile, char **__restrict ptrBuf) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
*ptrBuf = taosMemoryMalloc(1024);
|
size_t bufferSize = 512;
|
||||||
|
*ptrBuf = taosMemoryMalloc(bufferSize);
|
||||||
if (*ptrBuf == NULL) return -1;
|
if (*ptrBuf == NULL) return -1;
|
||||||
if (fgets(*ptrBuf, 1023, pFile->fp) == NULL) {
|
|
||||||
taosMemoryFreeClear(*ptrBuf);
|
size_t bytesRead = 0;
|
||||||
return -1;
|
size_t totalBytesRead = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
char *result = fgets(*ptrBuf + totalBytesRead, bufferSize - totalBytesRead, pFile->fp);
|
||||||
|
if (result == NULL) {
|
||||||
|
taosMemoryFreeClear(*ptrBuf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
bytesRead = strlen(*ptrBuf + totalBytesRead);
|
||||||
|
totalBytesRead += bytesRead;
|
||||||
|
|
||||||
|
if (totalBytesRead < bufferSize - 1 || (*ptrBuf)[totalBytesRead - 1] == '\n') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
bufferSize += 512;
|
||||||
|
void* newBuf = taosMemoryRealloc(*ptrBuf, bufferSize);
|
||||||
|
if (newBuf == NULL) {
|
||||||
|
taosMemoryFreeClear(*ptrBuf);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptrBuf = newBuf;
|
||||||
}
|
}
|
||||||
(*ptrBuf)[1023] = 0;
|
|
||||||
return strlen(*ptrBuf);
|
(*ptrBuf)[totalBytesRead] = '\0';
|
||||||
|
return totalBytesRead;
|
||||||
#else
|
#else
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
return getline(ptrBuf, &len, pFile->fp);
|
return getline(ptrBuf, &len, pFile->fp);
|
||||||
|
@ -904,10 +928,16 @@ int32_t taosCompressFile(char *srcFileName, char *destFileName) {
|
||||||
goto cmp_end;
|
goto cmp_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
dstFp = gzdopen(pFile->fd, "wb6f");
|
// Both gzclose() and fclose() will close the associated fd, so they need to have different fds.
|
||||||
|
FileFd gzFd = dup(pFile->fd);
|
||||||
|
if (gzFd < 0) {
|
||||||
|
ret = -4;
|
||||||
|
goto cmp_end;
|
||||||
|
}
|
||||||
|
dstFp = gzdopen(gzFd, "wb6f");
|
||||||
if (dstFp == NULL) {
|
if (dstFp == NULL) {
|
||||||
ret = -3;
|
ret = -3;
|
||||||
taosCloseFile(&pFile);
|
close(gzFd);
|
||||||
goto cmp_end;
|
goto cmp_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -932,3 +962,12 @@ cmp_end:
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t taosSetFileHandlesLimit() {
|
||||||
|
#ifdef WINDOWS
|
||||||
|
const int max_handles = 8192;
|
||||||
|
int res = _setmaxstdio(max_handles);
|
||||||
|
return res == max_handles ? 0 : -1;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue