I'm compiling code using gcc that comes from Visual C++ 2008. The code is using errno_t, but in some versions of gcc headers including <errno.h>
doesn't define the type. How do I detect if the type is defined? Is there a define that signals that the type was defined? In the case it isn't defined I'd like to provide the typedef to let the code compile correctly on all platforms.
Microsoft's errno_t
is redundant. errno
is defined by the ISO C standard to be a modifiable lvalue of type int
. If your code needs to store errno
values, then you should put them into an int
.
Do a global search and replace s/errno_t/int/
and you're done.
Edit: Also, you shouldn't be providing a typedef int errno_t
in your code, because all names that end with _t
are reserved.
You can't check for a typedef the way you can for a macro, so this is a bit on the tricky side. If you're using autoconf
, this patch shows the minimum changes that you need to have autoconf check for the presence of errno_t
and define it if it's missing (the typedef would be placed in a file that includes your generated config.h
and is included by all files that need errno_t
). If you're not using autoconf
you need to come up with some way to do the same thing within your build system, or a very clever set of tests against compiler version macros.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With