From 1ac6d1a1443d8347f3fcbdab7792619dd9ad33ef Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 28 Mar 2001 03:42:58 +0000 Subject: [PATCH] * lib/_cygwin_S_IEXEC.c: Remove "const" from globals or they never seem to be defined. Wrap definitions in extern "C". Include winsup.h to assure proper definitions. * dcrt0.cc (dll_crt0_1): Call stdio_init after premain run so that binmode.o, etc., will control default stdio settings. * dtable.cc (dtable::init_std_file_from_handle): Allow __fmode to force binmode/textmode settings. Default pipes to binmode. --- winsup/cygwin/ChangeLog | 11 +++++++++++ winsup/cygwin/dcrt0.cc | 6 +++--- winsup/cygwin/dtable.cc | 13 ++++++++++++- winsup/cygwin/lib/_cygwin_S_IEXEC.cc | 18 ++++++++---------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 5eb727c1d..7f053fb29 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +Tue Mar 27 22:38:42 2001 Christopher Faylor + + * lib/_cygwin_S_IEXEC.c: Remove "const" from globals or they never seem + to be defined. Wrap definitions in extern "C". Include winsup.h to + assure proper definitions. + + * dcrt0.cc (dll_crt0_1): Call stdio_init after premain run so that + binmode.o, etc., will control default stdio settings. + * dtable.cc (dtable::init_std_file_from_handle): Allow __fmode to force + binmode/textmode settings. Default pipes to binmode. + Tue Mar 27 11:31:00 2001 Corinna Vinschen * mmap.cc (mmap): Fix conditional for previous patch. diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index a76e9e5ca..fb5a31e99 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -784,9 +784,6 @@ dll_crt0_1 () /* Connect to tty. */ tty_init (); - /* Set up standard fds in file descriptor table. */ - stdio_init (); - if (!__argc) { char *line = GetCommandLineA (); @@ -817,6 +814,9 @@ dll_crt0_1 () for (unsigned int i = 0; i < PREMAIN_LEN / 2; i++) user_data->premain[i] (__argc, __argv, user_data); + /* Set up standard fds in file descriptor table. */ + stdio_init (); + /* Set up __progname for getopt error call. */ __progname = __argv[0]; diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 31cdf4ab7..4c39035f9 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -165,7 +165,13 @@ void dtable::init_std_file_from_handle (int fd, HANDLE handle, DWORD myaccess, const char *name) { - int bin = binmode ? O_BINARY : 0; + int bin; + + if (__fmode) + bin = __fmode; + else + bin = binmode ?: 0; + /* Check to see if we're being redirected - if not then we open then as consoles */ if (fd == 0 || fd == 1 || fd == 2) @@ -190,6 +196,11 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle, else name = "/dev/conin"; } + else if (GetFileType (handle) == FILE_TYPE_PIPE) + { + if (bin == 0) + bin = O_BINARY; + } } build_fhandler (fd, name, handle)->init (handle, myaccess, bin); diff --git a/winsup/cygwin/lib/_cygwin_S_IEXEC.cc b/winsup/cygwin/lib/_cygwin_S_IEXEC.cc index eeb12f4a2..5f57c94d3 100644 --- a/winsup/cygwin/lib/_cygwin_S_IEXEC.cc +++ b/winsup/cygwin/lib/_cygwin_S_IEXEC.cc @@ -8,19 +8,17 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ -#if 0 -#include "windows.h" -#include -#include "perprocess.h" -#endif +extern "C" { +#include "winsup.h" #include #include -const unsigned _cygwin_S_IEXEC = S_IEXEC; -const unsigned _cygwin_S_IXUSR = S_IXUSR; -const unsigned _cygwin_S_IXGRP = S_IXGRP; -const unsigned _cygwin_S_IXOTH = S_IXOTH; -const unsigned _cygwin_X_OK = X_OK; +unsigned _cygwin_S_IEXEC = S_IEXEC; +unsigned _cygwin_S_IXUSR = S_IXUSR; +unsigned _cygwin_S_IXGRP = S_IXGRP; +unsigned _cygwin_S_IXOTH = S_IXOTH; +unsigned _cygwin_X_OK = X_OK; +}; extern int __declspec (dllimport) _check_for_executable; struct _cygwin_bob__