mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Add 'set-port-binary/text-mode!' procedure for MinGW.
* libguile/ports.c (scm_init_ports)[O_BINARY]: Define 'O_BINARY'. [O_TEXT]: Define 'O_TEXT'. (scm_c_set_port_binary_text_mode_x): New function. * libguile/ports.h (scm_set_binary_text_mode_x): Declare it. * module/ice-9/ports.scm (ice-9): Export it as 'set-port-binary/text-mode!'. * doc/ref/api-io.texi (File Ports): Document it.
This commit is contained in:
parent
2d82b49cf3
commit
d58c9411ae
4 changed files with 57 additions and 0 deletions
|
@ -1150,6 +1150,19 @@ source of data, but only the value that is returned by
|
||||||
Determine whether @var{obj} is a port that is related to a file.
|
Determine whether @var{obj} is a port that is related to a file.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Scheme Procedure} set-port-binary/text-mode! port mode
|
||||||
|
On MinGW, set the binary/text mode for @var{port}. @var{mode} can be one
|
||||||
|
of the following:
|
||||||
|
@table @code
|
||||||
|
@item O_BINARY
|
||||||
|
binary mode
|
||||||
|
@item O_TEXT
|
||||||
|
text mode
|
||||||
|
@end table
|
||||||
|
|
||||||
|
Only open file ports are supported. On POSIX, this is a no-op.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
@node Bytevector Ports
|
@node Bytevector Ports
|
||||||
@subsubsection Bytevector Ports
|
@subsubsection Bytevector Ports
|
||||||
|
|
|
@ -4134,6 +4134,41 @@ SCM_DEFINE (scm_sys_make_void_port, "%make-void-port", 1, 0, 0,
|
||||||
}
|
}
|
||||||
#undef FUNC_NAME
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
SCM_DEFINE (scm_set_port_binary_text_mode_x, "set-port-binary/text-mode!", 2, 0, 0,
|
||||||
|
(SCM port, SCM mode),
|
||||||
|
"On MinGW, set the binary/text mode for @var{port}. @var{mode} can be one\n"
|
||||||
|
"of the following:\n"
|
||||||
|
"@table @code\n"
|
||||||
|
"@item O_BINARY\n"
|
||||||
|
"binary mode\n"
|
||||||
|
"@item O_TEXT\n"
|
||||||
|
"text mode\n"
|
||||||
|
"@end table\n\n"
|
||||||
|
"Only open file ports are supported. On POSIX, this is a no-op.")
|
||||||
|
#define FUNC_NAME s_scm_set_port_binary_text_mode_x
|
||||||
|
{
|
||||||
|
int cmode = 0;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (scm_is_integer (port))
|
||||||
|
fd = scm_to_int (port);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SCM_VALIDATE_OPFPORT (1, port);
|
||||||
|
fd = SCM_FPORT_FDES (port);
|
||||||
|
}
|
||||||
|
|
||||||
|
SCM_VALIDATE_NUMBER (2, mode);
|
||||||
|
cmode = scm_to_int (mode);
|
||||||
|
|
||||||
|
#if __MINGW32__
|
||||||
|
_setmode (fd, cmode);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return SCM_UNSPECIFIED;
|
||||||
|
}
|
||||||
|
#undef FUNC_NAME
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -4173,6 +4208,13 @@ scm_init_ports (void)
|
||||||
sym_escape = scm_from_latin1_symbol ("escape");
|
sym_escape = scm_from_latin1_symbol ("escape");
|
||||||
sym_error = scm_from_latin1_symbol ("error");
|
sym_error = scm_from_latin1_symbol ("error");
|
||||||
|
|
||||||
|
#ifdef O_BINARY
|
||||||
|
scm_c_define ("O_BINARY", scm_from_int (O_BINARY));
|
||||||
|
#endif
|
||||||
|
#ifdef O_TEXT
|
||||||
|
scm_c_define ("O_TEXT", scm_from_int (O_TEXT));
|
||||||
|
#endif
|
||||||
|
|
||||||
trampoline_to_c_read_subr =
|
trampoline_to_c_read_subr =
|
||||||
scm_c_make_gsubr ("port-read", 4, 0, 0,
|
scm_c_make_gsubr ("port-read", 4, 0, 0,
|
||||||
(scm_t_subr) trampoline_to_c_read);
|
(scm_t_subr) trampoline_to_c_read);
|
||||||
|
|
|
@ -218,6 +218,7 @@ SCM_API SCM scm_drain_input (SCM port);
|
||||||
SCM_API void scm_end_input (SCM port);
|
SCM_API void scm_end_input (SCM port);
|
||||||
SCM_API SCM scm_force_output (SCM port);
|
SCM_API SCM scm_force_output (SCM port);
|
||||||
SCM_API void scm_flush (SCM port);
|
SCM_API void scm_flush (SCM port);
|
||||||
|
SCM_API SCM scm_set_binary_text_mode_x (SCM port, SCM mode);
|
||||||
|
|
||||||
SCM_INTERNAL SCM scm_port_random_access_p (SCM port);
|
SCM_INTERNAL SCM scm_port_random_access_p (SCM port);
|
||||||
SCM_INTERNAL SCM scm_port_read_buffering (SCM port);
|
SCM_INTERNAL SCM scm_port_read_buffering (SCM port);
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
port-for-each
|
port-for-each
|
||||||
flush-all-ports
|
flush-all-ports
|
||||||
%make-void-port
|
%make-void-port
|
||||||
|
set-port-binary/text-mode!
|
||||||
|
|
||||||
;; Definitions from fports.c.
|
;; Definitions from fports.c.
|
||||||
open-file
|
open-file
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue