ack/plat/pc86/libsys/_sys_read.c

50 lines
682 B
C
Raw Normal View History

#include <stdlib.h>
#include <errno.h>
#include <sgtty.h>
#include "libsys.h"
extern struct
{
int fd;
char* buffer;
size_t count;
} _sys_params_in;
extern struct
{
size_t bytesread;
} _sys_params_out;
#define P _sys_params_in
int _sys_read(void)
{
char i;
/* We're only allowed to read from fd 0, 1 or 2. */
if ((P.fd < 0) || (P.fd > 2))
return EBADF;
/* Empty buffer? */
if (P.count == 0)
{
_sys_params_out.bytesread = 0;
return 0;
}
/* Read one byte. */
i = _sys_rawread();
if ((i == '\r') && !(_sys_ttyflags & RAW))
i = '\n';
if (_sys_ttyflags & ECHO)
_sys_write_tty(i);
*P.buffer = i;
_sys_params_out.bytesread = 1;
return 0;
}