Jeff King <peff@xxxxxxxx> writes: >> #ifndef EUNDERFLOW >> # ifdef ENODATA >> # define EUNDERFLOW ENODATA >> # else >> # define EUNDERFLOW ESPIPE >> # endif >> #endif > > Right, I think our mails just crossed but I'm leaning in this direction. Hmph, I may be slow (or may be skimming the exchanges too fast), but what exactly is wrong with "0"? As long as we do not have to tell two or more "not exactly an error from syscall in errno" cases, I would think "0" is the best value to use. If the syserror message _is_ the issue, then we'd need to either pick an existing errno that is available everywhere (with possibly suboptimal message), or pick something and prepare a fallback for platforms that lack the errno, so picking "0" as the value and use whatever logic we would have used for the "fallback" would not sound too bad. I.e. if (read_in_full(..., size) != size) if (errno) die_errno("oops"); else die("short read"); If the callsite were too numerous, #define die_errno_or(msg1, msg2) if (errno) die_errno(msg1); else die(msg2) perhaps?