ref: f4e7db8080c78e41d659538a86a43d59fc9eaddd
dir: /sys/src/ape/lib/bsd/ioctl.c/
/* posix */
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
/* bsd extensions */
#include <sys/uio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
int
ioctl(int fd, unsigned long request, void* arg)
{
struct stat d;
if(request == FIONREAD) {
if(fstat(fd, &d) < 0) {
errno = EBADF;
return -1;
}
/* this works if the file is buffered somehow */
*(long*)arg = d.st_size;
return 0;
} else {
errno = EINVAL;
return -1;
}
}