Skip to content

Commit 7ce2e5e

Browse files
author
Vincent Blondeau
committed
Change isFileDescriptorATTY(int fdNum) to isFileDescriptorATTY(HANDLE fdHandle) (and the other functions that goes with it)
1 parent 88546ed commit 7ce2e5e

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

platforms/win32/plugins/FilePlugin/sqWin32FilePrims.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,21 +303,21 @@ sqFileStdioHandlesInto(SQFile files[3])
303303
files[0].file = GetStdHandle(STD_INPUT_HANDLE);
304304
files[0].writable = false;
305305
files[0].lastOp = 0; /* unused on win32 */
306-
files[0].isStdioStream = sqIsFileDescriptorATTY(0);
306+
files[0].isStdioStream = isFileDescriptorATTY(STD_INPUT_HANDLE);
307307
AddHandleToTable(win32Files, files[0].file);
308308

309309
files[1].sessionID = thisSession;
310310
files[1].file = GetStdHandle(STD_OUTPUT_HANDLE);
311311
files[1].writable = true;
312312
files[1].lastOp = 0; /* unused on win32 */
313-
files[1].isStdioStream = sqIsFileDescriptorATTY(1);
313+
files[1].isStdioStream = isFileDescriptorATTY(STD_OUTPUT_HANDLE);
314314
AddHandleToTable(win32Files, files[1].file);
315315

316316
files[2].sessionID = thisSession;
317317
files[2].file = GetStdHandle(STD_ERROR_HANDLE);
318318
files[2].writable = true;
319319
files[2].lastOp = 0; /* unused on win32 */
320-
files[2].isStdioStream = sqIsFileDescriptorATTY(2);
320+
files[2].isStdioStream = isFileDescriptorATTY(STD_ERROR_HANDLE);
321321
AddHandleToTable(win32Files, files[2].file);
322322

323323
return 7;
@@ -328,7 +328,7 @@ sqFileStdioHandlesInto(SQFile files[3])
328328
* 1 if stdio is redirected to a console pipe, else 0 (and in this case, a file should be created)
329329
*/
330330
sqInt sqIsFileDescriptorATTY(int fdNum) {
331-
return isFileDescriptorATTY(fdNum);
331+
return isFileDescriptorATTY(_get_osfhandle(fdNum));
332332
}
333333

334334
size_t sqFileReadIntoAt(SQFile *f, size_t count, char* byteArrayIndex, size_t startIndex) {

platforms/win32/vm/sqWin32Main.c

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -875,15 +875,14 @@ getVersionInfo(int verbose)
875875
* 1 if stdio is redirected to a console pipe, else 0 (and in this case, a file should be created)
876876
* Inspired of: https://fossies.org/linux/misc/vim-8.0.tar.bz2/vim80/src/iscygpty.c?m=t
877877
*/
878-
sqInt isFileDescriptorATTY(int fdNum) {
878+
sqInt isFileDescriptorATTY(HANDLE fdHandle) {
879879
//In case of Windows Shell case
880-
int res = _isatty(fdNum);
880+
int res = _isatty(_fileno(fdHandle));
881881
if (res != 0)
882882
return res < 0;
883883
if (errno == EBADF)
884884
return 0;
885885
//In case of Unix emulator, we parse the name of the pipe
886-
HANDLE h;
887886
int size = sizeof(FILE_NAME_INFO) + sizeof(WCHAR) * MAX_PATH;
888887
FILE_NAME_INFO *nameinfo;
889888
WCHAR *p = NULL;
@@ -901,20 +900,19 @@ sqInt isFileDescriptorATTY(int fdNum) {
901900
if (!pGetFileInformationByHandleEx)
902901
return 0;
903902
}
904-
h = (HANDLE)_get_osfhandle(fdNum);
905-
if (h == INVALID_HANDLE_VALUE) {
903+
if (fdHandle == INVALID_HANDLE_VALUE) {
906904
return 0;
907905
}
908906
/* Cygwin/msys's pty is a pipe. */
909-
if (GetFileType(h) != FILE_TYPE_PIPE) {
907+
if (GetFileType(fdHandle) != FILE_TYPE_PIPE) {
910908
return 0;
911909
}
912910
nameinfo = malloc(size);
913911
if (nameinfo == NULL) {
914912
return 0;
915913
}
916914
/* Check the name of the pipe: '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master' */
917-
if (pGetFileInformationByHandleEx(h, FileNameInfo, nameinfo, size)) {
915+
if (pGetFileInformationByHandleEx(fdHandle, FileNameInfo, nameinfo, size)) {
918916
nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0';
919917
p = nameinfo->FileName;
920918
//Check that the pipe name contains msys or cygwin
@@ -934,11 +932,7 @@ sqInt isFileDescriptorATTY(int fdNum) {
934932
* 1 if one of the stdio is redirected to a console pipe, else 0 (and in this case, a file should be created)
935933
*/
936934
sqInt isOneStdioDescriptorATTY() {
937-
int ret = 0;
938-
for (int fd = 0; fd < 3; fd++) {
939-
ret |= isFileDescriptorATTY(fd);
940-
}
941-
return ret;
935+
return isFileDescriptorATTY(STD_INPUT_HANDLE) || isFileDescriptorATTY(STD_OUTPUT_HANDLE) || isFileDescriptorATTY(STD_ERROR_HANDLE)
942936
}
943937

944938
static void

0 commit comments

Comments
 (0)