Reputation: 92966
I'm writing a C library for a software project. I need to do some error reporting, but I'm a little bit too lazy to implement my own complex set of error-codes, variables and functions. Is it acceptable to use the errno facility provided by the libc for custom error reporting? All my errors fit into the categories given by the E...
macros.
For instance, let's say my code includes a function that reads a SHA256 hash in hexdecimal notation and converts it into some sort of internal format. I want to use errno
to report errors:
#include <errno.h>
int hash_fromstr(hash_t *out, const char *in) {
/* ... */
if (strlen(in) != 65) {
errno = EINVAL;
return -1;
}
/* ... */
}
Of course this example is ridiculously simplified, in reality much more errors may happen in other functions.
Upvotes: 14
Views: 7370
Reputation: 2967
Yes, you can modify it and it has thread scope, which is very desirable in that kind of error handling.
Using errno error family (E...
) and maybe extending it can be a very powerful yet simple error handling pattern. It may be considered bad tasted approach by others, but IMHO it produces cleaner code and a standardized pattern for error handling.
Upvotes: 1
Reputation: 6018
You can modify the value of errno as you please, just be sure that your library code checks that errno isn't set before doing so to ensure your library code can still properly detect internal standard failures that cause errno to be set. You might also check out "should I set errno" for more information.
Upvotes: 8