int32_t _dirreadall(int fd, Dir **d) { char *buf, *nbuf; int32_t n, ts; buf = nil; ts = 0; for(;;) { nbuf = realloc(buf, ts+DIRMAX); if(nbuf == nil) { free(buf); return -1; } buf = nbuf; n = __sys_read(fd, buf+ts, DIRMAX); if(n <= 0) break; ts += n; } if(ts >= 0) ts = _dirpackage(buf, ts, d); free(buf); return ts; }
int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) { #ifdef STDIO if (fh == STDIN) { /* Standard Input device. */ int sz ; while((buf[0] = getkey()) == 0) ; ; for (sz = 0 ; sz <= len ; sz ++ ) { if(buf[sz] == 0) break ; else sz++ ; buf[sz] = getkey (); } return (sz); } #endif if (fh > 0x8000) { return (-1); } #ifndef NO_FILESYSTEM return (__sys_read (fh, buf, len)); #else return(0) ; #endif }
ssize_t __read(int fd, void *buf, size_t nbytes) { struct pthread *curthread = _get_curthread(); ssize_t ret; _thr_cancel_enter(curthread); ret = __sys_read(fd, buf, nbytes); _thr_cancel_leave(curthread, 1); return ret; }
int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) { #ifdef STDIO if (fh == STDIN) { /* Standard Input device. */ for ( ; len; len--) { *buf++ = getkey (); } return (0); } #endif if (fh > 0x8000) { return (-1); } return (__sys_read (fh, buf, len)); }
int32_t _dirread(int fd, Dir **d) { char *buf; int32_t ts; buf = malloc(DIRMAX); if(buf == nil) return -1; ts = __sys_read(fd, buf, DIRMAX); if(ts >= 0) ts = _dirpackage(buf, ts, d); free(buf); return ts; }
pid_t getpid(void) { int n, f; char pidbuf[15]; f = __sys_open("#c/pid", 0); n = __sys_read(f, pidbuf, sizeof pidbuf); if(n < 0) _syserrno(); else n = atoi(pidbuf); __sys_close(f); return n; }
int tcgetattr(int fd, struct termios *t) { int n; char buf[60]; if(!isptty(fd)) { if(isatty(fd)) { /* If there is no emulation return sensible defaults */ t->c_iflag = ISTRIP|ICRNL|IXON|IXOFF; t->c_oflag = OPOST|TAB3|ONLCR; t->c_cflag = B9600; t->c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK; t->c_cc[VINTR] = CINTR; t->c_cc[VQUIT] = CQUIT; t->c_cc[VERASE] = CERASE; t->c_cc[VKILL] = CKILL; t->c_cc[VEOF] = CEOF; t->c_cc[VEOL] = CEOL; t->c_cc[VSTART] = CSTART; t->c_cc[VSTOP] = CSTOP; return 0; } else { errno = ENOTTY; return -1; } } if(seek(fd, -2, 0) != -2) { _syserrno(); return -1; } n = __sys_read(fd, buf, 57); if(n < 0) { _syserrno(); return -1; } t->c_iflag = strtoul(buf+4, 0, 16); t->c_oflag = strtoul(buf+9, 0, 16); t->c_cflag = strtoul(buf+14, 0, 16); t->c_lflag = strtoul(buf+19, 0, 16); for(n = 0; n < NCCS; n++) t->c_cc[n] = strtoul(buf+24+(n*3), 0, 16); return 0; }
pid_t tcgetpgrp(int fd) { int n; pid_t pgrp; char buf[100]; if(!isptty(fd)) { errno = ENOTTY; return -1; } if(seek(fd, -2, 0) != -2) { _syserrno(); return -1; } n = __sys_read(fd, buf, sizeof(buf)); if(n < 0) { _syserrno(); return -1; } pgrp = atoi(buf+24+(NCCS*3)); return pgrp; }
char *_debug_getstr(int *len) { volatile int n = 0;; #if CONFIG_DRIVER_PRINTF_REDLIBV2!=1 _debug_printf_flush(); #endif for(n=0;n<DEBUG_INPUT_BUFFER_SIZE;n++) debug_read_buf[n] = 0; if(ISDEBUGACTIVE()) { #if CONFIG_DRIVER_PRINTF_REDLIBV2!=1 __read(0, debug_read_buf, DEBUG_INPUT_BUFFER_SIZE-1); #else __sys_read(0, debug_read_buf, DEBUG_INPUT_BUFFER_SIZE-1); #endif } if(len) *len = small_strlen(debug_read_buf); return debug_read_buf; }