Lots of third party programs declare
authorSimon Schubert <corecode@dragonflybsd.org>
Sat, 2 Jul 2005 18:13:52 +0000 (18:13 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Sat, 2 Jul 2005 18:13:52 +0000 (18:13 +0000)
extern int errno;

This breaks when errno is declared as
extern __thread int errno;

Fix the breakage by using a hack as we had before:
Define errno as (*__error()), but this time also
define a static inline __error(void) so that ABI
doesn't break (and we're saving a call as well).

sys/sys/errno.h

index 28949b1..35282e6 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)errno.h     8.5 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/sys/errno.h,v 1.14.2.2 2002/01/22 10:46:56 keramida Exp $
- * $DragonFly: src/sys/sys/errno.h,v 1.6 2005/05/03 07:29:04 joerg Exp $
+ * $DragonFly: src/sys/sys/errno.h,v 1.7 2005/07/02 18:13:52 corecode Exp $
  */
 
 #ifndef _SYS_ERRNO_H_
 
 #ifndef _KERNEL
 extern __thread int    errno;
-/*
- * A lot of programs want to define errno as normal int, if
- * it isn't a macro. Work around this to prevent even more breakage.
- */
-#define        errno   errno
+
+#include <sys/cdefs.h>
+static inline int *__error(void)
+{
+       return (&errno);
+}
+
+#define        errno           (* __error())
 #endif
 
 #define        EPERM           1               /* Operation not permitted */