int kr_io2_output(kr_io2_t *io) { ssize_t ret; if (!kr_io2_want_out(io)) { return 0; } ret = kr_io2_write(io); //printk("kr_io2_output wrote: %zu old len: %zu new len: %zu", // ret, io->len, io->len - ret); if (ret != io->len) { if (ret < 1) { printke("its bad we should certainly fail, ret %zu len %zu", ret, io->len); return ret; } else { io->len -= ret; io->wr_buf += ret; } return 0; } kr_io2_restart(io); return 0; }
int kr_io2_sync(kr_io2_t *io) { // FILES ONLY blocking or failing! ssize_t ret; if (!kr_io2_want_out(io)) { return 0; } ret = kr_io2_write (io); if (ret != io->len) { printk ("Could not write all we wanted to: %zd of %zu", ret, io->len); printke ("Failing here a, this should not happen as a file only func"); exit (77); } kr_io2_restart (io); return 0; }
int kr_io2_flush (kr_io2_t *io) { int ret; int len; if (!kr_io2_want_out (io)) { return 0; } len = io->len; ret = kr_io2_write (io); if (ret != len) { printk ("Could not write all we wanted to: %d of %d", ret, len); printke ("Failing here a temporary test"); exit (77); } kr_io2_restart (io); return 0; }