1*219b2ee8SDavid du Colombier /* posix */ 2*219b2ee8SDavid du Colombier #include <sys/types.h> 3*219b2ee8SDavid du Colombier #include <unistd.h> 4*219b2ee8SDavid du Colombier #include <stdlib.h> 5*219b2ee8SDavid du Colombier #include <stdio.h> 6*219b2ee8SDavid du Colombier #include <errno.h> 7*219b2ee8SDavid du Colombier #include <string.h> 8*219b2ee8SDavid du Colombier #include <fcntl.h> 9*219b2ee8SDavid du Colombier #include <sys/stat.h> 10*219b2ee8SDavid du Colombier 11*219b2ee8SDavid du Colombier /* bsd extensions */ 12*219b2ee8SDavid du Colombier #include <sys/uio.h> 13*219b2ee8SDavid du Colombier #include <sys/socket.h> 14*219b2ee8SDavid du Colombier #include <sys/ioctl.h> 15*219b2ee8SDavid du Colombier 16*219b2ee8SDavid du Colombier int ioctl(int fd,unsigned long request,void * arg)17*219b2ee8SDavid du Colombierioctl(int fd, unsigned long request, void* arg) 18*219b2ee8SDavid du Colombier { 19*219b2ee8SDavid du Colombier struct stat d; 20*219b2ee8SDavid du Colombier 21*219b2ee8SDavid du Colombier if(request == FIONREAD) { 22*219b2ee8SDavid du Colombier if(fstat(fd, &d) < 0) { 23*219b2ee8SDavid du Colombier errno = EBADF; 24*219b2ee8SDavid du Colombier return -1; 25*219b2ee8SDavid du Colombier } 26*219b2ee8SDavid du Colombier /* this works if the file is buffered somehow */ 27*219b2ee8SDavid du Colombier *(long*)arg = d.st_size; 28*219b2ee8SDavid du Colombier return 0; 29*219b2ee8SDavid du Colombier } else { 30*219b2ee8SDavid du Colombier errno = EINVAL; 31*219b2ee8SDavid du Colombier return -1; 32*219b2ee8SDavid du Colombier } 33*219b2ee8SDavid du Colombier } 34