summaryrefslogtreecommitdiff
path: root/mint/errno.h
diff options
context:
space:
mode:
Diffstat (limited to 'mint/errno.h')
-rw-r--r--mint/errno.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/mint/errno.h b/mint/errno.h
new file mode 100644
index 0000000000..5c19d0efa7
--- /dev/null
+++ b/mint/errno.h
@@ -0,0 +1,32 @@
+/* Wrapper around broken system errno.h. */
+
+#ifndef _PERL_WRAPPER_AROUND_ERRNO_H
+# define _PERL_WRAPPER_AROUND_ERRNO_H 1
+
+/* First include the system file. */
+#include_next <errno.h>
+
+/* Now add the missing stuff.
+#ifndef EAGAIN
+# define EAGAIN EWOULDBLOCK
+#endif
+
+/* This one is problematic. If you open() a directory with the
+ MiNTLib you can't detect from errno if it is really a directory
+ or if the file simply doesn't exist. You'll get ENOENT
+ ("file not found") in either case.
+
+ Defining EISDIR as ENOENT is actually a bad idea but works fine
+ in general. In praxi, if code checks for errno == EISDIR it
+ will attempt an opendir() call on the file in question and this
+ call will also file if the file really can't be found. But
+ you may get compile-time errors if the errno checking is embedded
+ in a switch statement ("duplicate case value in switch").
+
+ Anyway, here the define works alright. */
+#ifndef EISDIR
+# define EISDIR ENOENT
+#endif
+
+#endif
+