ドライバでは、32 ビットのサイズの構造体には収まらないネイティブな量のコピー出力が必要になる場合があります。この場合、ドライバは、呼び出し元に EOVERFLOW を返します。次の例に示すように、EOVERFLOW は、返される値を保持するにはインタフェース内のデータ型が小さすぎることを示すものとして機能します。
使用例 15-15 copyout(9F) のオーバーフローの処理int xxioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *cr, int *rval_p) { struct resdata res; /* body of driver */ switch (ddi_model_convert_from(mode & FMODELS)) { case DDI_MODEL_ILP32: { struct resdata32 res32; if (res.size > UINT_MAX) return (EOVERFLOW); res32.size = (size32_t)res.size; res32.flag = res.flag; if (ddi_copyout(&res32, (void *)arg, sizeof (res32), mode)) return (EFAULT); } break; case DDI_MODEL_NONE: if (ddi_copyout(&res, (void *)arg, sizeof (res), mode)) return (EFAULT); break; } return (0); }