summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST2
-rw-r--r--beos/beos.c16
-rw-r--r--beos/beosish.h13
-rw-r--r--hints/beos.sh2
-rw-r--r--perl.h5
5 files changed, 38 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST
index 5501dbf28b..843d2f5b9f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -3,6 +3,8 @@ Artistic The "Artistic License"
AUTHORS Contact info for contributors
av.c Array value code
av.h Array value header
+beos/beosish.h BeOS port
+beos/beos.c BeOS port
beos/nm.c BeOS port
bytecode.pl Produces ext/ByteLoader/byterun.h, ext/ByteLoader/byterun.c and ext/B/Asmdata.pm
cc_runtime.h Macros need by runtime of compiler-generated code
diff --git a/beos/beos.c b/beos/beos.c
new file mode 100644
index 0000000000..f0e8147109
--- /dev/null
+++ b/beos/beos.c
@@ -0,0 +1,16 @@
+#undef waitpid
+
+#include <sys/wait.h>
+
+/* In BeOS 5.0 the waitpid() seems to misbehave in that the status
+ * is _not_ shifted left by eight (multiplied by 256), as it is in
+ * POSIX/UNIX. To undo the surpise effect to the rest of Perl we
+ * need this wrapper. (The rest of BeOS might be surprised because
+ * of this, though.) */
+
+pid_t beos_waitpid(pid_t process_id, int *status_location, int options) {
+ pid_t got = waitpid(procedd_is, status_location, options);
+ if (status_localtion)
+ *status_location <<= 8;
+ return got;
+}
diff --git a/beos/beosish.h b/beos/beosish.h
new file mode 100644
index 0000000000..4c999daa0d
--- /dev/null
+++ b/beos/beosish.h
@@ -0,0 +1,13 @@
+#ifndef PERL_BEOS_BEOSISH_H
+#define PERL_BEOS_BEOSISH_H
+
+#include "unixish.h"
+
+#undef waitpid
+#define waitpid beos_waitpid
+
+/* This seems to be protoless. */
+char *gcvt(double value, int num_digits, char *buffer);
+
+#endif
+
diff --git a/hints/beos.sh b/hints/beos.sh
index c106775ed5..bfe2ee89f5 100644
--- a/hints/beos.sh
+++ b/hints/beos.sh
@@ -55,3 +55,5 @@ case "$ldlibpthname" in
'') ldlibpthname=LIBRARY_PATH ;;
esac
+# the waitpid() wrapper
+archobjs="beos/beos.o"
diff --git a/perl.h b/perl.h
index ace2aac382..dbfadc8bb3 100644
--- a/perl.h
+++ b/perl.h
@@ -1800,6 +1800,11 @@ typedef struct clone_params CLONE_PARAMS;
# define ISHISH "macos classic"
#endif
+#if defined(__BEOS__)
+# include "beos/beosish.h"
+# define ISHISH "beos"
+#endif
+
#ifndef ISHISH
# include "unixish.h"
# define ISHISH "unix"