* syscalls.cc (_cygwin_istext_for_stdio): New, for newlib
* include/cygwin/version.h: Bump API number for detect old programs using old getc/putc macros
This commit is contained in:
parent
c4e1aa0115
commit
56cd25ee02
|
@ -1,3 +1,9 @@
|
||||||
|
2000-05-23 DJ Delorie <dj@cygnus.com>
|
||||||
|
|
||||||
|
* syscalls.cc (_cygwin_istext_for_stdio): New, for newlib
|
||||||
|
* include/cygwin/version.h: Bump API number for detect old
|
||||||
|
programs using old getc/putc macros
|
||||||
|
|
||||||
2000-05-23 DJ Delorie <dj@cygnus.com>
|
2000-05-23 DJ Delorie <dj@cygnus.com>
|
||||||
|
|
||||||
* dir.cc (writable_directory): handle root directories
|
* dir.cc (writable_directory): handle root directories
|
||||||
|
|
|
@ -70,6 +70,13 @@ details. */
|
||||||
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
||||||
CYGWIN_VERSION_DLL_OLD_TERMIOS)
|
CYGWIN_VERSION_DLL_OLD_TERMIOS)
|
||||||
|
|
||||||
|
/* Old APIs had getc/putc macros that conflict with new CR/LF
|
||||||
|
handling in the stdio buffers */
|
||||||
|
#define CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING \
|
||||||
|
(CYGWIN_VERSION_DLL_MAKE_COMBINED (user_data->api_major, user_data->api_minor) <= \
|
||||||
|
00020)
|
||||||
|
|
||||||
|
|
||||||
/* We used to use the DLL major/minor to track
|
/* We used to use the DLL major/minor to track
|
||||||
non-backward-compatible interface changes to the API. Now we
|
non-backward-compatible interface changes to the API. Now we
|
||||||
use an API major/minor number for this purpose. */
|
use an API major/minor number for this purpose. */
|
||||||
|
@ -96,10 +103,11 @@ details. */
|
||||||
18: Stop exporting _strace_wm
|
18: Stop exporting _strace_wm
|
||||||
19: Export fchown, lchown, lacl
|
19: Export fchown, lchown, lacl
|
||||||
20: regsub, inet_network
|
20: regsub, inet_network
|
||||||
|
21: incompatible change to stdio cr/lf and buffering
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CYGWIN_VERSION_API_MAJOR 0
|
#define CYGWIN_VERSION_API_MAJOR 0
|
||||||
#define CYGWIN_VERSION_API_MINOR 20
|
#define CYGWIN_VERSION_API_MINOR 21
|
||||||
|
|
||||||
/* There is also a compatibity version number associated with the
|
/* There is also a compatibity version number associated with the
|
||||||
shared memory regions. It is incremented when incompatible
|
shared memory regions. It is incremented when incompatible
|
||||||
|
|
|
@ -1431,6 +1431,42 @@ ttyname (int fd)
|
||||||
return (char *)(dtable[fd]->ttyname ());
|
return (char *)(dtable[fd]->ttyname ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tells stdio if it should do the cr/lf conversion for this file */
|
||||||
|
extern "C" int _cygwin_istext_for_stdio (int fd);
|
||||||
|
int
|
||||||
|
_cygwin_istext_for_stdio (int fd)
|
||||||
|
{
|
||||||
|
syscall_printf("_cygwin_istext_for_stdio (%d)\n", fd);
|
||||||
|
if (CYGWIN_VERSION_OLD_STDIO_CRLF_HANDLING)
|
||||||
|
{
|
||||||
|
syscall_printf(" _cifs: old API\n");
|
||||||
|
return 0; /* we do it for old apps, due to getc/putc macros */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dtable.not_open (fd))
|
||||||
|
{
|
||||||
|
syscall_printf(" _cifs: fd not open\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fhandler_base *p = dtable[fd];
|
||||||
|
|
||||||
|
if (p->get_device() != FH_DISK)
|
||||||
|
{
|
||||||
|
syscall_printf(" _cifs: fd not disk file\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->get_w_binary () || p->get_r_binary ())
|
||||||
|
{
|
||||||
|
syscall_printf(" _cifs: get_*_binary\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall_printf("_cygwin_istext_for_stdio says yes\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* internal newlib function */
|
/* internal newlib function */
|
||||||
extern "C" int _fwalk (struct _reent *ptr, int (*function)(FILE *));
|
extern "C" int _fwalk (struct _reent *ptr, int (*function)(FILE *));
|
||||||
|
|
||||||
|
@ -1442,6 +1478,9 @@ setmode_helper (FILE *f)
|
||||||
{
|
{
|
||||||
if (fileno(f) != setmode_file)
|
if (fileno(f) != setmode_file)
|
||||||
return 0;
|
return 0;
|
||||||
|
syscall_printf("setmode: file was %s now %s\n",
|
||||||
|
f->_flags & __SCLE ? "cle" : "raw",
|
||||||
|
setmode_mode & O_TEXT ? "cle" : "raw");
|
||||||
if (setmode_mode & O_TEXT)
|
if (setmode_mode & O_TEXT)
|
||||||
f->_flags |= __SCLE;
|
f->_flags |= __SCLE;
|
||||||
else
|
else
|
||||||
|
@ -1491,10 +1530,17 @@ setmode (int fd, int mode)
|
||||||
p->set_r_binary (0);
|
p->set_r_binary (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
setmode_mode = mode;
|
if (_cygwin_istext_for_stdio (fd))
|
||||||
|
setmode_mode = O_TEXT;
|
||||||
|
else
|
||||||
|
setmode_mode = O_BINARY;
|
||||||
setmode_file = fd;
|
setmode_file = fd;
|
||||||
_fwalk(_REENT, setmode_helper);
|
_fwalk(_REENT, setmode_helper);
|
||||||
|
|
||||||
|
syscall_printf ("setmode (%d, %s) returns %s\n", fd,
|
||||||
|
mode&O_TEXT ? "text" : "binary",
|
||||||
|
res&O_TEXT ? "text" : "binary");
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue