mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
libguile.h (which #includes all the header files); the pointless recompilation was wasting my time. * Makefile.in (all .o dependency lists): Regenerated. * libguile.h: Don't try to get a definition for size_t here... * __scm.h: Do it here. * _scm.h: Since this is the internal libguile header, put things here that all (or a majority) of the libguile files will want. Don't #include <libguile.h> here; that generates dependencies on way too much. Instead, get "__scm.h", "error.h", "pairs.h", "list.h", "gc.h", "gsubr.h", "procs.h", "numbers.h", "symbols.h", "boolean.h", "strings.h", "vectors.h", "root.h", "ports.h", and "async.h". * alist.c: Get "eq.h", "list.h", "alist.h". * append.c: Get "append.h", "list.h". * arbiters.c: Get "arbiters.h", "smob.h". * async.c: Get "async.h", "smob.h", "throw.h", "eval.h". * boolean.c: Get "boolean.h". * chars.c: Get "chars.h". * continuations.c: Get "continuations.h", "dynwind.h", "debug.h", "stackchk.h". * debug.c: Get "debug.h", "feature.h", "read.h", "strports.h", "continuations.h", "alist.h", "srcprop.h", "procprop.h", "smob.h", "genio.h", "throw.h", "eval.h". * dynwind.c: Get "dynwind.h", "alist.h", "eval.h". * eq.c: Get "eq.h", "unif.h", "smob.h", "strorder.h", "stackchk.h". * error.c: Get "error.h", "throw.h", "genio.h", "pairs.h". * eval.c: Get "eval.h", "stackchk.h", "srcprop.h", "debug.h", "hashtab.h", "procprop.h", "markers.h", "smob.h", "throw.h", "continuations.h", "eq.h", "sequences.h", "alist.h", "append.h", "debug.h". * fdsocket.c: Get "fdsocket.h", "unif.h", "filesys.h". * feature.c: Get "feature.h". * files.c: Get "files.h". * filesys.c: Get "filesys.h", "smob.h", "genio.h". * fports.c: Get "fports.h", "markers.h". * gc.c: Get "async.h", "unif.h", "smob.h", "weaks.h", "genio.h", "struct.h", "stackchk.h", "stime.h". * gdbint.c: Get "gdbint.h", "chars.h", "eval.h", "print.h", "read.h", "strports.h", "tag.h". * genio.c: Get "genio.h", "chars.h". * gsubr.c: Get "gsubr.h", "genio.h". * hash.c: Get "hash.h", "chars.h". * hashtab.c: Get "hashtab.h", "eval.h", "hash.h", "alist.h". * init.c: Get everyone who has an scm_init_mumble function: "weaks.h", "vports.h", "version.h", "vectors.h", "variable.h", "unif.h", "throw.h", "tag.h", "symbols.h", "struct.h", "strports.h", "strorder.h", "strop.h", "strings.h", "stime.h", "stackchk.h", "srcprop.h", "socket.h", "simpos.h", "sequences.h", "scmsigs.h", "read.h", "ramap.h", "procs.h", "procprop.h", "print.h", "posix.h", "ports.h", "pairs.h", "options.h", "objprop.h", "numbers.h", "mbstrings.h", "mallocs.h", "load.h", "list.h", "kw.h", "ioext.h", "hashtab.h", "hash.h", "gsubr.h", "gdbint.h", "gc.h", "fports.h", "filesys.h", "files.h", "feature.h", "fdsocket.h", "eval.h", "error.h", "eq.h", "dynwind.h", "debug.h", "continuations.h", "chars.h", "boolean.h", "async.h", "arbiters.h", "append.h", "alist.h". * ioext.c: Get "ioext.h", "fports.h". * kw.c: Get "kw.h", "smob.h", "mbstrings.h", "genio.h". * list.c: Get "list.h", "eq.h". * load.c: Get "load.h", "eval.h", "read.h", "fports.h". * mallocs.c: Get "smob.h", "genio.h". * markers.c: Get "markers.h". * mbstrings.c: Get "mbstrings.h", "read.h", "genio.h", "unif.h", "chars.h". * numbers.c: Get "unif.h", "genio.h". * objprop.c: Get "objprop.h", "weaks.h", "alist.h", "hashtab.h". * options.c: Get "options.h". * ports.c: Get "ports.h", "vports.h", "strports.h", "fports.h", "markers.h", "chars.h", "genio.h". * posix.c: Get "posix.h", "sequences.h", "feature.h", "unif.h", "read.h", "scmsigs.h", "genio.h", "fports.h". * print.c: Get "print.h", "unif.h", "weaks.h", "read.h", "procprop.h", "eval.h", "smob.h", "mbstrings.h", "genio.h", "chars.h". * procprop.c: Get "procprop.h", "eval.h", "alist.h". * procs.c: Get "procs.h". * ramap.c: Get "ramap.h", "feature.h", "eval.h", "eq.h", "chars.h", "smob.h", "unif.h". * read.c: Get "alist.h", "kw.h", "mbstrings.h", "unif.h", "eval.h", "genio.h", "chars.h". * root.c: Get "root.h", "stackchk.h". * scmsigs.c: Get "scmsigs.h". * sequences.c: Get "sequences.h". * simpos.c: Get "simpos.h", "scmsigs.h". * smob.c: Get "smob.h". * socket.c: Get "socket.h", "feature.h". * srcprop.c: Get "srcprop.h", "weaks.h", "hashtab.h", "debug.h", "alist.h", "smob.h". * stackchk.c: Get "stackchk.h", "genio.h". * stime.c: Get "stime.h"."libguile/continuations.h". * strings.c: Get "strings.h", "chars.h". * strop.c: Get "strop.h", "chars.h". * strorder.c: Get "strorder.h", "chars.h". * strports.c: Get "strports.h", "print.h", "eval.h", "unif.h". * struct.c: Get "struct.h", "chars.h". * symbols.c: Get "symbols.h", "mbstrings.h", "alist.h", "variable.h", "eval.h", "chars.h". * tag.c: Get "tag.h", "struct.h", "chars.h". * throw.c: Get "throw.h", "continuations.h", "debug.h", "dynwind.h", "eval.h", "alist.h", "smob.h", "genio.h". * unif.c: Get "unif.h", "feature.h", "strop.h", "sequences.h", "smob.h", "genio.h", "eval.h", "chars.h". * variable.c: Get "variable.h", "smob.h", "genio.h". * vectors.c: Get "vectors.h", "eq.h". * version.c: Get "version.h". * vports.c: Get "vports.h", "fports.h", "chars.h", "eval.h". * weaks.c: Get "weaks.h".
505 lines
13 KiB
C
505 lines
13 KiB
C
/* Copyright (C) 1995 Free Software Foundation, Inc.
|
||
*
|
||
* This program is free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation; either version 2, or (at your option)
|
||
* any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this software; see the file COPYING. If not, write to
|
||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
*
|
||
* As a special exception, the Free Software Foundation gives permission
|
||
* for additional uses of the text contained in its release of GUILE.
|
||
*
|
||
* The exception is that, if you link the GUILE library with other files
|
||
* to produce an executable, this does not by itself cause the
|
||
* resulting executable to be covered by the GNU General Public License.
|
||
* Your use of that executable is in no way restricted on account of
|
||
* linking the GUILE library code into it.
|
||
*
|
||
* This exception does not however invalidate any other reasons why
|
||
* the executable file might be covered by the GNU General Public License.
|
||
*
|
||
* This exception applies only to the code released by the
|
||
* Free Software Foundation under the name GUILE. If you copy
|
||
* code from other Free Software Foundation releases into a copy of
|
||
* GUILE, as the General Public License permits, the exception does
|
||
* not apply to the code that you add in this way. To avoid misleading
|
||
* anyone as to the status of such modified files, you must delete
|
||
* this exception notice from them.
|
||
*
|
||
* If you write modifications of your own for GUILE, it is your choice
|
||
* whether to permit this exception to apply to your modifications.
|
||
* If you do not wish that, delete this exception notice.
|
||
*/
|
||
|
||
|
||
|
||
#include <stdio.h>
|
||
#include "fd.h"
|
||
#include "_scm.h"
|
||
#include "fports.h"
|
||
|
||
#include "ioext.h"
|
||
|
||
#ifdef HAVE_STRING_H
|
||
#include <string.h>
|
||
#endif
|
||
#ifdef HAVE_UNISTD_H
|
||
#include <unistd.h>
|
||
#endif
|
||
|
||
|
||
SCM_PROC (s_sys_ftell, "ftell", 1, 0, 0, scm_sys_ftell);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_ftell (SCM port)
|
||
#else
|
||
SCM
|
||
scm_sys_ftell (port)
|
||
SCM port;
|
||
#endif
|
||
{
|
||
long pos;
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_OPFPORTP (port), port, SCM_ARG1, s_sys_ftell);
|
||
SCM_SYSCALL (pos = ftell ((FILE *)SCM_STREAM (port)));
|
||
if (pos < 0)
|
||
SCM_SYSERROR (s_sys_ftell);
|
||
if (pos > 0 && SCM_CRDYP (port))
|
||
pos--;
|
||
return SCM_MAKINUM (pos);
|
||
}
|
||
|
||
|
||
|
||
SCM_PROC (s_sys_fseek, "fseek", 3, 0, 0, scm_sys_fseek);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_fseek (SCM port, SCM offset, SCM whence)
|
||
#else
|
||
SCM
|
||
scm_sys_fseek (port, offset, whence)
|
||
SCM port;
|
||
SCM offset;
|
||
SCM whence;
|
||
#endif
|
||
{
|
||
int rv;
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_OPFPORTP (port), port, SCM_ARG1, s_sys_fseek);
|
||
SCM_ASSERT (SCM_INUMP (offset), offset, SCM_ARG2, s_sys_fseek);
|
||
SCM_ASSERT (SCM_INUMP (whence) && (SCM_INUM (whence) < 3) && (SCM_INUM (whence) >= 0),
|
||
whence, SCM_ARG3, s_sys_fseek);
|
||
SCM_CLRDY (port); /* Clear ungetted char */
|
||
/* Values of whence are interned in scm_init_ioext. */
|
||
rv = fseek ((FILE *)SCM_STREAM (port), SCM_INUM (offset), SCM_INUM (whence));
|
||
if (rv != 0)
|
||
SCM_SYSERROR (s_sys_fseek);
|
||
return SCM_UNSPECIFIED;
|
||
}
|
||
|
||
|
||
|
||
SCM_PROC (s_sys_freopen, "freopen", 3, 0, 0, scm_sys_freopen);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_freopen (SCM filename, SCM modes, SCM port)
|
||
#else
|
||
SCM
|
||
scm_sys_freopen (filename, modes, port)
|
||
SCM filename;
|
||
SCM modes;
|
||
SCM port;
|
||
#endif
|
||
{
|
||
FILE *f;
|
||
SCM_ASSERT (SCM_NIMP (filename) && SCM_STRINGP (filename), filename, SCM_ARG1, s_sys_freopen);
|
||
SCM_ASSERT (SCM_NIMP (modes) && SCM_STRINGP (modes), modes, SCM_ARG2, s_sys_freopen);
|
||
SCM_DEFER_INTS;
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_FPORTP (port), port, SCM_ARG3, s_sys_freopen);
|
||
SCM_SYSCALL (f = freopen (SCM_CHARS (filename), SCM_CHARS (modes), (FILE *)SCM_STREAM (port)));
|
||
if (!f)
|
||
{
|
||
SCM p;
|
||
p = port;
|
||
port = SCM_MAKINUM (errno);
|
||
SCM_CAR (p) &= ~SCM_OPN;
|
||
scm_remove_from_port_table (p);
|
||
}
|
||
else
|
||
{
|
||
SCM_CAR (port) = scm_tc16_fport | scm_mode_bits (SCM_CHARS (modes));
|
||
SCM_SETSTREAM (port, (SCM)f);
|
||
if (SCM_BUF0 & (SCM_CAR (port) = scm_tc16_fport | scm_mode_bits (SCM_CHARS (modes))))
|
||
scm_setbuf0 (port);
|
||
}
|
||
SCM_ALLOW_INTS;
|
||
return port;
|
||
}
|
||
|
||
|
||
|
||
SCM_PROC (s_sys_duplicate_port, "duplicate-port", 2, 0, 0, scm_sys_duplicate_port);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_duplicate_port (SCM oldpt, SCM modes)
|
||
#else
|
||
SCM
|
||
scm_sys_duplicate_port (oldpt, modes)
|
||
SCM oldpt;
|
||
SCM modes;
|
||
#endif
|
||
{
|
||
int oldfd;
|
||
int newfd;
|
||
FILE *f;
|
||
SCM newpt;
|
||
SCM_ASSERT (SCM_NIMP (oldpt) && SCM_OPPORTP (oldpt), oldpt, SCM_ARG1, s_sys_duplicate_port);
|
||
SCM_ASSERT (SCM_NIMP (modes) && SCM_STRINGP (modes), modes, SCM_ARG2, s_sys_duplicate_port);
|
||
SCM_NEWCELL (newpt);
|
||
SCM_DEFER_INTS;
|
||
oldfd = fileno ((FILE *)SCM_STREAM (oldpt));
|
||
if (oldfd == -1)
|
||
SCM_SYSERROR (s_sys_duplicate_port);
|
||
SCM_SYSCALL (newfd = dup (oldfd));
|
||
if (newfd == -1)
|
||
SCM_SYSERROR (s_sys_duplicate_port);
|
||
f = fdopen (newfd, SCM_CHARS (modes));
|
||
if (!f)
|
||
{
|
||
SCM_SYSCALL (close (newfd));
|
||
SCM_SYSERROR (s_sys_duplicate_port);
|
||
}
|
||
{
|
||
struct scm_port_table * pt;
|
||
pt = scm_add_to_port_table (newpt);
|
||
SCM_SETPTAB_ENTRY (newpt, pt);
|
||
if (SCM_BUF0 & (SCM_CAR (newpt) = scm_tc16_fport | scm_mode_bits (SCM_CHARS (modes))))
|
||
scm_setbuf0 (newpt);
|
||
SCM_SETSTREAM (newpt, (SCM)f);
|
||
SCM_PTAB_ENTRY (newpt)->file_name = SCM_PTAB_ENTRY (oldpt)->file_name;
|
||
}
|
||
SCM_ALLOW_INTS;
|
||
return newpt;
|
||
}
|
||
|
||
|
||
|
||
SCM_PROC (s_sys_redirect_port, "redirect-port", 2, 0, 0, scm_sys_redirect_port);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_redirect_port (SCM into_pt, SCM from_pt)
|
||
#else
|
||
SCM
|
||
scm_sys_redirect_port (into_pt, from_pt)
|
||
SCM into_pt;
|
||
SCM from_pt;
|
||
#endif
|
||
{
|
||
int ans, oldfd, newfd;
|
||
SCM_DEFER_INTS;
|
||
SCM_ASSERT (SCM_NIMP (into_pt) && SCM_OPPORTP (into_pt), into_pt, SCM_ARG1, s_sys_redirect_port);
|
||
SCM_ASSERT (SCM_NIMP (from_pt) && SCM_OPPORTP (from_pt), from_pt, SCM_ARG2, s_sys_redirect_port);
|
||
oldfd = fileno ((FILE *)SCM_STREAM (into_pt));
|
||
if (oldfd == -1)
|
||
SCM_SYSERROR (s_sys_redirect_port);
|
||
newfd = fileno ((FILE *)SCM_STREAM (from_pt));
|
||
if (newfd == -1)
|
||
SCM_SYSERROR (s_sys_redirect_port);
|
||
SCM_SYSCALL (ans = dup2 (oldfd, newfd));
|
||
if (ans == -1)
|
||
SCM_SYSERROR (s_sys_redirect_port);
|
||
SCM_ALLOW_INTS;
|
||
return SCM_UNSPECIFIED;
|
||
}
|
||
|
||
SCM_PROC (s_sys_fileno, "fileno", 1, 0, 0, scm_sys_fileno);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_fileno (SCM port)
|
||
#else
|
||
SCM
|
||
scm_sys_fileno (port)
|
||
SCM port;
|
||
#endif
|
||
{
|
||
int fd;
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_OPFPORTP (port), port, SCM_ARG1, s_sys_fileno);
|
||
fd = fileno ((FILE *)SCM_STREAM (port));
|
||
if (fd == -1)
|
||
SCM_SYSERROR (s_sys_fileno);
|
||
return SCM_MAKINUM (fd);
|
||
}
|
||
|
||
SCM_PROC (s_sys_isatty, "isatty?", 1, 0, 0, scm_sys_isatty_p);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_isatty_p (SCM port)
|
||
#else
|
||
SCM
|
||
scm_sys_isatty_p (port)
|
||
SCM port;
|
||
#endif
|
||
{
|
||
int rv;
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_OPFPORTP (port), port, SCM_ARG1, s_sys_isatty);
|
||
rv = fileno ((FILE *)SCM_STREAM (port));
|
||
if (rv == -1)
|
||
SCM_SYSERROR (s_sys_isatty);
|
||
rv = isatty (rv);
|
||
return rv ? SCM_BOOL_T : SCM_BOOL_F;
|
||
}
|
||
|
||
|
||
|
||
SCM_PROC (s_sys_fdopen, "fdopen", 2, 0, 0, scm_sys_fdopen);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_fdopen (SCM fdes, SCM modes)
|
||
#else
|
||
SCM
|
||
scm_sys_fdopen (fdes, modes)
|
||
SCM fdes;
|
||
SCM modes;
|
||
#endif
|
||
{
|
||
FILE *f;
|
||
SCM port;
|
||
struct scm_port_table * pt;
|
||
|
||
SCM_ASSERT (SCM_INUMP (fdes), fdes, SCM_ARG1, s_sys_fdopen);
|
||
SCM_ASSERT (SCM_NIMP (modes) && SCM_STRINGP (modes), modes, SCM_ARG2, s_sys_fdopen);
|
||
SCM_NEWCELL (port);
|
||
SCM_DEFER_INTS;
|
||
f = fdopen (SCM_INUM (fdes), SCM_CHARS (modes));
|
||
if (f == NULL)
|
||
SCM_SYSERROR (s_sys_fdopen);
|
||
pt = scm_add_to_port_table (port);
|
||
SCM_SETPTAB_ENTRY (port, pt);
|
||
if (SCM_BUF0 & (SCM_CAR (port) = scm_tc16_fport
|
||
| scm_mode_bits (SCM_CHARS (modes))))
|
||
scm_setbuf0 (port);
|
||
SCM_SETSTREAM (port, (SCM)f);
|
||
SCM_ALLOW_INTS;
|
||
return port;
|
||
}
|
||
|
||
|
||
|
||
/* Move a port's underlying file descriptor to a given value.
|
||
* Returns #f if fdes is already the given value.
|
||
* #t if fdes moved.
|
||
* MOVE->FDES is implemented in Scheme and calls this primitive.
|
||
*/
|
||
SCM_PROC (s_sys_primitive_move_to_fdes, "primitive-move->fdes", 2, 0, 0, scm_sys_primitive_move_to_fdes);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_sys_primitive_move_to_fdes (SCM port, SCM fd)
|
||
#else
|
||
SCM
|
||
scm_sys_primitive_move_to_fdes (port, fd)
|
||
SCM port;
|
||
SCM fd;
|
||
#endif
|
||
{
|
||
FILE *stream;
|
||
int old_fd;
|
||
int new_fd;
|
||
int rv;
|
||
|
||
SCM_ASSERT (SCM_NIMP (port) && SCM_OPFPORTP (port), port, SCM_ARG1, s_sys_primitive_move_to_fdes);
|
||
SCM_ASSERT (SCM_INUMP (fd), fd, SCM_ARG2, s_sys_primitive_move_to_fdes);
|
||
SCM_DEFER_INTS;
|
||
stream = (FILE *)SCM_STREAM (port);
|
||
old_fd = fileno (stream);
|
||
new_fd = SCM_INUM (fd);
|
||
if (old_fd == new_fd)
|
||
{
|
||
SCM_ALLOW_INTS;
|
||
return SCM_BOOL_F;
|
||
}
|
||
scm_evict_ports (new_fd);
|
||
rv = dup2 (old_fd, new_fd);
|
||
if (rv == -1)
|
||
SCM_SYSERROR (s_sys_primitive_move_to_fdes);
|
||
scm_setfileno (stream, new_fd);
|
||
SCM_SYSCALL (close (old_fd));
|
||
SCM_ALLOW_INTS;
|
||
return SCM_BOOL_T;
|
||
}
|
||
|
||
#ifdef __STDC__
|
||
void
|
||
scm_setfileno (FILE *fs, int fd)
|
||
#else
|
||
void
|
||
scm_setfileno (fs, fd)
|
||
FILE *fs;
|
||
int fd;
|
||
#endif
|
||
{
|
||
#ifdef SET_FILE_FD_FIELD
|
||
SET_FILE_FD_FIELD(fs, fd);
|
||
#else
|
||
Configure could not guess the name of the correct field in a FILE *.
|
||
|
||
This function needs to be ported to your system.
|
||
|
||
SET_FILE_FD_FIELD should change the descriptor refered to by a stdio
|
||
stream, and nothing else.
|
||
|
||
The way to port this file is to add cases to configure.in. Search
|
||
that file for "SET_FILE_FD_FIELD" and follow the examples there.
|
||
#endif
|
||
}
|
||
|
||
/* Move ports with the specified file descriptor to new descriptors,
|
||
* reseting the revealed count to 0.
|
||
* Should be called with SCM_DEFER_INTS active.
|
||
*/
|
||
#ifdef __STDC__
|
||
void
|
||
scm_evict_ports (int fd)
|
||
#else
|
||
void
|
||
scm_evict_ports (fd)
|
||
int fd;
|
||
#endif
|
||
{
|
||
int i;
|
||
|
||
for (i = 0; i < scm_port_table_size; i++)
|
||
{
|
||
if (SCM_FPORTP (scm_port_table[i]->port)
|
||
&& fileno ((FILE *)SCM_STREAM (scm_port_table[i]->port)) == fd)
|
||
{
|
||
scm_setfileno ((FILE *)SCM_STREAM (scm_port_table[i]->port), dup (fd));
|
||
scm_set_port_revealed_x (scm_port_table[i]->port, SCM_MAKINUM (0));
|
||
}
|
||
}
|
||
}
|
||
|
||
/* Return a list of ports using a given file descriptor. */
|
||
SCM_PROC(s_fdes_to_ports, "fdes->ports", 1, 0, 0, scm_fdes_to_ports);
|
||
#ifdef __STDC__
|
||
SCM
|
||
scm_fdes_to_ports (SCM fd)
|
||
#else
|
||
SCM
|
||
scm_fdes_to_ports (fd)
|
||
SCM fd;
|
||
#endif
|
||
{
|
||
SCM result = SCM_EOL;
|
||
int int_fd;
|
||
int i;
|
||
|
||
SCM_ASSERT (SCM_INUMP (fd), fd, SCM_ARG1, s_fdes_to_ports);
|
||
int_fd = SCM_INUM (fd);
|
||
|
||
SCM_DEFER_INTS;
|
||
for (i = 0; i < scm_port_table_size; i++)
|
||
{
|
||
if (SCM_FPORTP (scm_port_table[i]->port)
|
||
&& fileno ((FILE *)SCM_STREAM (scm_port_table[i]->port)) == int_fd)
|
||
result = scm_cons (scm_port_table[i]->port, result);
|
||
}
|
||
SCM_ALLOW_INTS;
|
||
return result;
|
||
}
|
||
|
||
#ifdef __STDC__
|
||
void
|
||
scm_init_ioext (void)
|
||
#else
|
||
void
|
||
scm_init_ioext ()
|
||
#endif
|
||
{
|
||
/* fseek() symbols. */
|
||
scm_sysintern ("SEEK_SET", SCM_MAKINUM (SEEK_SET));
|
||
scm_sysintern ("SEEK_CUR", SCM_MAKINUM (SEEK_CUR));
|
||
scm_sysintern ("SEEK_END", SCM_MAKINUM (SEEK_END));
|
||
|
||
/* File type/permission bits. */
|
||
#ifdef S_IRUSR
|
||
scm_sysintern ("S_IRUSR", SCM_MAKINUM (S_IRUSR));
|
||
#endif
|
||
#ifdef S_IWUSR
|
||
scm_sysintern ("S_IWUSR", SCM_MAKINUM (S_IWUSR));
|
||
#endif
|
||
#ifdef S_IXUSR
|
||
scm_sysintern ("S_IXUSR", SCM_MAKINUM (S_IXUSR));
|
||
#endif
|
||
#ifdef S_IRWXU
|
||
scm_sysintern ("S_IRWXU", SCM_MAKINUM (S_IRWXU));
|
||
#endif
|
||
|
||
#ifdef S_IRGRP
|
||
scm_sysintern ("S_IRGRP", SCM_MAKINUM (S_IRGRP));
|
||
#endif
|
||
#ifdef S_IWGRP
|
||
scm_sysintern ("S_IWGRP", SCM_MAKINUM (S_IWGRP));
|
||
#endif
|
||
#ifdef S_IXGRP
|
||
scm_sysintern ("S_IXGRP", SCM_MAKINUM (S_IXGRP));
|
||
#endif
|
||
#ifdef S_IRWXG
|
||
scm_sysintern ("S_IRWXG", SCM_MAKINUM (S_IRWXG));
|
||
#endif
|
||
|
||
#ifdef S_IROTH
|
||
scm_sysintern ("S_IROTH", SCM_MAKINUM (S_IROTH));
|
||
#endif
|
||
#ifdef S_IWOTH
|
||
scm_sysintern ("S_IWOTH", SCM_MAKINUM (S_IWOTH));
|
||
#endif
|
||
#ifdef S_IXOTH
|
||
scm_sysintern ("S_IXOTH", SCM_MAKINUM (S_IXOTH));
|
||
#endif
|
||
#ifdef S_IRWXO
|
||
scm_sysintern ("S_IRWXO", SCM_MAKINUM (S_IRWXO));
|
||
#endif
|
||
|
||
#ifdef S_ISUID
|
||
scm_sysintern ("S_ISUID", SCM_MAKINUM (S_ISUID));
|
||
#endif
|
||
#ifdef S_ISGID
|
||
scm_sysintern ("S_ISGID", SCM_MAKINUM (S_ISGID));
|
||
#endif
|
||
#ifdef S_ISVTX
|
||
scm_sysintern ("S_ISVTX", SCM_MAKINUM (S_ISVTX));
|
||
#endif
|
||
|
||
#ifdef S_IFMT
|
||
scm_sysintern ("S_IFMT", SCM_MAKINUM (S_IFMT));
|
||
#endif
|
||
#ifdef S_IFDIR
|
||
scm_sysintern ("S_IFDIR", SCM_MAKINUM (S_IFDIR));
|
||
#endif
|
||
#ifdef S_IFCHR
|
||
scm_sysintern ("S_IFCHR", SCM_MAKINUM (S_IFCHR));
|
||
#endif
|
||
#ifdef S_IFBLK
|
||
scm_sysintern ("S_IFBLK", SCM_MAKINUM (S_IFBLK));
|
||
#endif
|
||
#ifdef S_IFREG
|
||
scm_sysintern ("S_IFREG", SCM_MAKINUM (S_IFREG));
|
||
#endif
|
||
#ifdef S_IFLNK
|
||
scm_sysintern ("S_IFLNK", SCM_MAKINUM (S_IFLNK));
|
||
#endif
|
||
#ifdef S_IFSOCK
|
||
scm_sysintern ("S_IFSOCK", SCM_MAKINUM (S_IFSOCK));
|
||
#endif
|
||
#ifdef S_IFIFO
|
||
scm_sysintern ("S_IFIFO", SCM_MAKINUM (S_IFIFO));
|
||
#endif
|
||
#include "ioext.x"
|
||
}
|
||
|