@@ -10,8 +10,9 @@ * whether or not they're for the correct * platform - only the ones actually called * by the generated code will be linked */ #include +#include kiocond kiosend(kiochan target, ksraw string, sz* len) { if (target.out.kind == kiostream_closed) return kiocond_fail_closed_stream; @@ -25,9 +26,22 @@ struct k_platform_syscall_answer a = k_platform_syscall (k_platform_syscall_write,3,args); sz size = a.ret; - if (size == -1) return kiocond_fail; //TODO: retrieve errno and offer more specific errors + if (size == -1) switch(a.error) { + case k_platform_error_EPERM: return kiocond_fail_forbidden; + case k_platform_error_EINVAL: return kiocond_fail_invalid; + case k_platform_error_EBADF: return kiocond_fail_invalid; + case k_platform_error_EFAULT: return kiocond_fail_pfault; + case k_platform_error_ENOSPC: return kiocond_fail_no_space; + case k_platform_error_EDQUOT: return kiocond_fail_over_quota; + case k_platform_error_EIO: return kiocond_fail_io; + case k_platform_error_EAGAIN: return kiocond_poll; + case k_platform_error_EFBIG: return kiocond_fail_too_big; + case k_platform_error_EINTR: return kiocond_interrupt; + case k_platform_error_EDESTADDRREQ: return kiocond_fail_no_peer; + default: return kiocond_fail; + } # else # if KVos == win # error windows IO send function not yet defined # else