char_ready can be defined in terms of select, stream_char_ready is no longer needed, so there is nothing machine-specific left.
Therefore removed arch/stdio_dep.c/h and defined char_ready in syscalls.
This commit is contained in:
parent
00dbd6868f
commit
e4e0ba1e31
|
@ -1,85 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
** AIX version by Chipsy Sperber
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
#include <sys/select.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,83 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_r > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_r);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_r <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_w <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,90 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1999 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_r > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fs->_file = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_r);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_r <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_w <= 0;}
|
||||
|
||||
|
||||
/* Cygwin doesn't yet implement these system calls */
|
||||
struct netent *getnetbyaddr (long x, int y) {return NULL;}
|
||||
struct netent *getnetbyname (const char *x) {return NULL;}
|
||||
int fchown(int x, uid_t y, gid_t z) {return 0;}
|
||||
int mkfifo(char *__path, mode_t __mode) {return 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,84 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fs->__fileL = (fd & 0xFF);
|
||||
fs->__fileH = ((fd>>8) & 0xFF);
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,83 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,80 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return (f->_IO_read_ptr < f->_IO_read_end) ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fs->_fileno = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE *fs)
|
||||
{
|
||||
return((fs->_IO_read_end)-(fs->_IO_read_ptr));
|
||||
}
|
||||
|
||||
int ibuf_empty(FILE *fs)
|
||||
{
|
||||
return((fs->_IO_read_end)-(fs->_IO_read_ptr) <= 0);
|
||||
}
|
||||
|
||||
int obuf_full(FILE *fs)
|
||||
{
|
||||
return((fs->_IO_write_end)-(fs->_IO_write_ptr) <= 0);
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,91 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return fs->_cnt;
|
||||
}
|
||||
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs)
|
||||
{
|
||||
return fs->_cnt <= 0;
|
||||
}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs)
|
||||
{
|
||||
return (fs->_flag & _IOLBF) ? (- fs->_cnt >= fs->_bufsiz-1)
|
||||
: (fs->_cnt <= 0);
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,88 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
/* somewhere around solaris 2.5 this changed to a function */
|
||||
#ifndef fileno
|
||||
#define fileno(p) ((p)->_file)
|
||||
#endif
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -1,83 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
|
@ -88,7 +88,7 @@
|
|||
((errno packet)
|
||||
((errno/intr) (display "eintr")(loop)))
|
||||
(apply syscall/eintr args)))))))
|
||||
|
||||
|
||||
;;; Process
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; we can't algin env here, because exec-path/env calls
|
||||
|
@ -440,15 +440,8 @@
|
|||
(let ((fd (if (integer? fd/port) fd/port (port->fdes fd/port))))
|
||||
(%fd-seek fd 0 seek/delta)))
|
||||
|
||||
(define-foreign %char-ready-fdes?/errno
|
||||
(char_ready_fdes (fixnum fd))
|
||||
desc) ; errno, #t, or #f
|
||||
|
||||
(define (%char-ready-fdes? fd)
|
||||
(let ((retval (%char-ready-fdes?/errno fd)))
|
||||
(if (integer? retval) (errno-error retval %char-ready-fdes? fd)
|
||||
retval)))
|
||||
|
||||
(define-stubless-foreign %char-ready-fdes?/eintr (fd) "char_ready_fdes")
|
||||
(define-retrying-syscall %char-ready-fdes? %char-ready-fdes?/eintr)
|
||||
|
||||
(define-stubless-foreign %open/eintr (path flags mode) "scsh_open")
|
||||
(define-retrying-syscall %open %open/eintr)
|
||||
|
|
|
@ -606,6 +606,26 @@ s48_value scsh_open(s48_value sch_path, s48_value sch_flags, s48_value sch_mode)
|
|||
return s48_enter_fixnum (retval);
|
||||
}
|
||||
|
||||
s48_value char_ready_fdes(s48_value sch_fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
int fd = s48_extract_fixnum sch_fd;
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd, &readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
s48_raise_os_error_1(errno, sch_fd);
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* Supplementary groups access
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
/* Copyright (c) 1994 by Olin Shivers.
|
||||
** Copyright (c) 1994-1995 by Brian D. Carlstrom.
|
||||
**
|
||||
** This file implements the char-ready? procedure for file descriptors
|
||||
** and Scsh's fdports. It is not Posix, so it must be implemented for
|
||||
** each OS to which scsh is ported.
|
||||
**
|
||||
** This version assumes two things:
|
||||
** - the existence of select to tell if there is data
|
||||
** available for the file descriptor.
|
||||
** - the existence of the _cnt field in the stdio FILE struct, telling
|
||||
** if there is any buffered input in the struct.
|
||||
**
|
||||
** Most Unixes have these things, so this file should work for them.
|
||||
** However, Your Mileage May Vary.
|
||||
**
|
||||
** You could also replace the select() with a iotctl(FIONREAD) call, if you
|
||||
** had one but not the other.
|
||||
** -Olin&Brian
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "libcig.h"
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdio_dep.h" /* Make sure the .h interface agrees with the code. */
|
||||
|
||||
/* These two procs return #t if data ready, #f data not ready,
|
||||
** and errno if error.
|
||||
*/
|
||||
|
||||
s48_value char_ready_fdes(int fd)
|
||||
{
|
||||
fd_set readfds;
|
||||
struct timeval timeout;
|
||||
int result;
|
||||
|
||||
FD_ZERO(&readfds);
|
||||
FD_SET(fd,&readfds);
|
||||
|
||||
timeout.tv_sec=0;
|
||||
timeout.tv_usec=0;
|
||||
|
||||
result=select(fd+1, &readfds, NULL, NULL, &timeout);
|
||||
|
||||
if(result == -1 )
|
||||
return(s48_enter_fixnum(errno));
|
||||
if(result)
|
||||
return(S48_TRUE);
|
||||
return(S48_FALSE);
|
||||
}
|
||||
|
||||
s48_value stream_char_readyp(FILE *f)
|
||||
{
|
||||
int fd = fileno(f);
|
||||
return f->_cnt > 0 ? S48_TRUE : char_ready_fdes(fd);
|
||||
}
|
||||
|
||||
void setfileno(FILE *fs, int fd)
|
||||
{
|
||||
fileno(fs) = fd;
|
||||
}
|
||||
|
||||
int fbufcount(FILE* fs)
|
||||
{
|
||||
return(fs->_cnt);
|
||||
}
|
||||
|
||||
/* Returns true if there is no buffered data in stream FS
|
||||
** (or there is no buffering, period.)
|
||||
*/
|
||||
|
||||
int ibuf_empty(FILE *fs) {return fs->_cnt <= 0;}
|
||||
|
||||
|
||||
/* Returns true if the buffer in stream FS is full
|
||||
** (or there is no buffering, period).
|
||||
*/
|
||||
|
||||
int obuf_full(FILE *fs) {return fs->_cnt <= 0;}
|
|
@ -1,13 +0,0 @@
|
|||
/* Exports from stdio_dep.h. */
|
||||
|
||||
s48_value char_ready_fdes(int fd);
|
||||
|
||||
s48_value stream_char_readyp(FILE *f);
|
||||
|
||||
void setfileno(FILE *fs, int fd);
|
||||
|
||||
int fbufcount(FILE* fs);
|
||||
|
||||
int ibuf_empty(FILE *fs);
|
||||
|
||||
int obuf_full(FILE *fs);
|
Loading…
Reference in New Issue