- Correctly initialize the standard handles for console-less applications.

- Simplify _isatty and fix it to not set the errno for "invalid" handles.

svn path=/trunk/; revision=14171
This commit is contained in:
Filip Navara 2005-03-18 02:10:50 +00:00
parent b4e1db6c92
commit e52a450d86
2 changed files with 11 additions and 9 deletions

View file

@ -1,5 +1,4 @@
#include <io.h>
#include <sys/stat.h>
#include <internal/file.h>
#define NDEBUG
#include <internal/debug.h>
@ -7,13 +6,10 @@
/*
* @implemented
*/
int _isatty( int fd )
int _isatty(int fd)
{
struct _stat buf;
DPRINT("_isatty(fd %d)\n", fd);
if (_fstat (fd, &buf) < 0)
HANDLE hFile = fdinfo(fd)->hFile;
if (hFile == INVALID_HANDLE_VALUE)
return 0;
if (S_ISCHR (buf.st_mode))
return 1;
return 0;
return GetFileType(hFile) == FILE_TYPE_CHAR ? 1 : 0;
}

View file

@ -608,14 +608,20 @@ BOOL __fileno_init(void)
if (fdinfo(0)->hFile == INVALID_HANDLE_VALUE || !(fdinfo(0)->fdflags & FOPEN)) {
fdinfo(0)->hFile = GetStdHandle(STD_INPUT_HANDLE);
if (fdinfo(0)->hFile == NULL)
fdinfo(0)->hFile = INVALID_HANDLE_VALUE;
fdinfo(0)->fdflags = FOPEN|FTEXT;
}
if (fdinfo(1)->hFile == INVALID_HANDLE_VALUE || !(fdinfo(1)->fdflags & FOPEN)) {
fdinfo(1)->hFile = GetStdHandle(STD_OUTPUT_HANDLE);
if (fdinfo(1)->hFile == NULL)
fdinfo(1)->hFile = INVALID_HANDLE_VALUE;
fdinfo(1)->fdflags = FOPEN|FTEXT;
}
if (fdinfo(2)->hFile == INVALID_HANDLE_VALUE || !(fdinfo(2)->fdflags & FOPEN)) {
fdinfo(2)->hFile = GetStdHandle(STD_ERROR_HANDLE);
if (fdinfo(2)->hFile == NULL)
fdinfo(2)->hFile = INVALID_HANDLE_VALUE;
fdinfo(2)->fdflags = FOPEN|FTEXT;
}