static size_t read_file_to_memory(const char * filename, char ** buffer) { size_t len; char * buf; int fd; if(!filename || !buffer) return 0; if(sandbox_file_exist(filename) != 0) return 0; fd = sandbox_file_open(filename); if(fd <= 0) return 0; len = sandbox_file_length(fd); if(len <= 0) return 0; buf = malloc(len + 1); if(!buf) return 0; memset(buf, 0, len + 1); sandbox_file_seek(fd, 0); sandbox_file_read(fd, buf, len); sandbox_file_close(fd); *buffer = buf; return len; }
ssize_t sandbox_file_read_nonblock(int fd, void * buf, size_t count) { ssize_t ret; int flags; flags = fcntl(fd, F_GETFL); if(flags == -1) return 0; if(fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) return 0; ret = sandbox_file_read(fd, buf, count); if(fcntl(fd, F_SETFL, flags) == -1) return 0; return ret; }