-#if __STDC__ || c_plusplus
-int sigsetjmp(sigjmp_buf, int);
-void siglongjmp(sigjmp_buf, int);
-#ifndef _POSIX_SOURCE
-extern int setjmp(jmp_buf);
-extern int _setjmp(jmp_buf);
-extern void longjmp(jmp_buf, int);
-extern void _longjmp(jmp_buf, int);
-#endif
-#else
-int sigsetjmp();
-void siglongjmp();
-#ifndef _POSIX_SOURCE
-extern int setjmp();
-extern int _setjmp();
-extern void longjmp();
-extern void _longjmp();
-#endif
-#endif
-#endif
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int setjmp __P((jmp_buf));
+void longjmp __P((jmp_buf, int));
+
+#ifndef _ANSI_SOURCE
+/*
+ * WARNING: sigsetjmp() isn't supported yet, this is a placeholder.
+ */
+int sigsetjmp __P((sigjmp_buf, int));
+void siglongjmp __P((sigjmp_buf, int));
+#endif /* not ANSI */
+
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
+int _setjmp __P((jmp_buf));
+void _longjmp __P((jmp_buf, int));
+void longjmperror __P((void));
+#endif /* neither ANSI nor POSIX */
+__END_DECLS
+
+#endif /* !_SETJMP_H_ */