extern unsigned int sleep(unsigned int);
extern int pipe(int pipefd[2]);
+extern ssize_t read(int, void*, size_t);
+extern ssize_t write(int, const void*, size_t);
#endif /* _UNISTD_H */
return(ret_val);
}
+
+ssize_t read(int fd, void *buf, size_t count)
+{
+ struct cxmsg msg;
+ struct cxio_read *data;
+ ssize_t ret_val;
+
+ data = (struct cxio_read*)msg.cm_data;
+ data->fd = fd;
+ data->n = count;
+
+ msg.cm_len = sizeof(*data);
+ msg.cm_type = CXIO_READ;
+
+ ret_val = cxsendrecv(PID_IO, &msg);
+
+ if(!ret_val) {
+ struct cxio_response *resp;
+
+ resp = (struct cxio_response*)msg.cm_data;
+
+ ret_val = resp->retval;
+ errno = resp->error;
+
+ if(ret_val >= 0) {
+ memcpy(buf, resp->extradata, resp->extralen);
+ ret_val = resp->extralen;
+ }
+ } else {
+ errno = -ret_val;
+ ret_val = -1;
+ }
+
+ return(ret_val);
+}
+
+ssize_t write(int fd, const void *buf, size_t count)
+{
+ struct cxmsg msg;
+ struct cxio_write *data;
+ ssize_t ret_val;
+
+ data = (struct cxio_write*)msg.cm_data;
+ data->fd = fd;
+
+ if(count > CXIO_EXTRADATA_MAX) {
+ data->datalen = CXIO_EXTRADATA_MAX;
+ } else {
+ data->datalen = count;
+ }
+
+ memcpy(data->data, buf, data->datalen);
+ msg.cm_len = sizeof(*data) + data->datalen;
+ msg.cm_type = CXIO_WRITE;
+
+ ret_val = cxsendrecv(PID_IO, &msg);
+
+ if(!ret_val) {
+ struct cxio_response *resp;
+
+ resp = (struct cxio_response*)msg.cm_data;
+
+ ret_val = resp->retval;
+ errno = resp->error;
+ } else {
+ errno = -ret_val;
+ ret_val = -1;
+ }
+
+ return(ret_val);
+}