#include <k/io.h>
#include <k/core.h>
#include <k/def.h>
/* send.c - kiosend()
* ~ lexi hale <lexi@hale.su>
* kiosend() writes to a channel with an open out stream
*/
// we define all platform functions here,
// whether or not they're for the correct
// platform - only the ones actually called
// by the generated code will be linked
extern sz kio_posix_fd_write(int fd, const char* buf, sz len);
kiocond kiosend(kiochan target, ksraw string, sz* len) {
# ifdef KFenv_posix
sz size = kio_posix_fd_write(target.out.platform_fd, string.ptr, string.size);
if (size == -1) return kiocond_fail; //TODO: retrieve errno and offer more specific errors
# else
# if KVos == win
# error windows IO send function not yet defined
# else
Knoimpl(kiosend,KVos);
# error missing implementation // boring error for plebs
# endif
# endif
if (len != null) *len = size;
return kiocond_ok;
}