OpenBSD support.

This commit is contained in:
rsc 2005-05-01 18:40:01 +00:00
parent cea10000c5
commit 52e6164443
7 changed files with 35 additions and 33 deletions

2
bin/9l
View file

@ -169,7 +169,7 @@ case "$tag" in
*OpenBSD*)
ld=gcc
userpath=true
extralibs="$extralibs -lutil -lpthread"
extralibs="$extralibs -lutil"
;;
*FreeBSD*)
ld=gcc

View file

@ -638,7 +638,7 @@ extern void freenetconninfo(NetConnInfo*);
#define DMWRITE 0x2 /* mode bit for write permission */
#define DMEXEC 0x1 /* mode bit for execute permission */
#if defined(__FreeBSD__)
#ifdef RFMEM /* FreeBSD, OpenBSD */
#undef RFFDG
#undef RFNOTEG
#undef RFPROC
@ -832,6 +832,10 @@ extern int post9pservice(int, char*);
# endif
#endif
#ifdef __OpenBSD__
#define sched_yield() syscall(302) /* what is this? */
#endif
/* command line */
extern char *argv0;
extern void __fixargv0(void);

View file

@ -81,7 +81,10 @@ typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)];
# undef _NEEDUSHORT
# undef _NEEDUINT
# undef _NEEDULONG
# undef PLAN9PORT_USING_PTHREADS
#elif defined(__OpenBSD__)
# undef _NEEDUSHORT
# undef _NEEDUINT
# undef _NEEDULONG
#else
/* No idea what system this is -- try some defaults */
# include <pthread.h>

View file

@ -1,6 +1,6 @@
../bin/mk: mkmk.sh
SYSNAME=`uname` export SYSNAME; \
OBJTYPE=`uname -m | sed 's;i.86;386;; s;amd64;x86_64;; s;/.*;;; s; ;;g; s/PowerMacintosh/power/; s/ppc64/power/g; s/ppc/power/g'` export OBJTYPE; \
OBJTYPE=`uname -m | sed 's;i.86;386;; s;amd64;x86_64;; s;/.*;;; s; ;;g; s/PowerMacintosh/power/; s/macppc/power/g; s/ppc64/power/g; s/ppc/power/g'` export OBJTYPE; \
PATH=`pwd`/../bin:$$PATH export PATH; \
PLAN9=`pwd`/.. export PLAN9; \
sh -x mkmk.sh

View file

@ -6,21 +6,16 @@
#include <unistd.h>
#include <errno.h>
typedef struct Sendfd Sendfd;
struct Sendfd {
struct cmsghdr cmsg;
int fd;
};
int
sendfd(int s, int fd)
{
char buf[1];
struct iovec iov;
struct msghdr msg;
struct cmsghdr *cmsg;
int n;
Sendfd sfd;
char cms[CMSG_SPACE(sizeof(int))];
buf[0] = 0;
iov.iov_base = buf;
iov.iov_len = 1;
@ -28,14 +23,14 @@ sendfd(int s, int fd)
memset(&msg, 0, sizeof msg);
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = (caddr_t)cms;
msg.msg_controllen = CMSG_LEN(sizeof(int));
sfd.cmsg.cmsg_len = sizeof sfd;
sfd.cmsg.cmsg_level = SOL_SOCKET;
sfd.cmsg.cmsg_type = SCM_RIGHTS;
sfd.fd = fd;
msg.msg_control = (caddr_t)&sfd;
msg.msg_controllen = sizeof sfd;
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
*(int*)CMSG_DATA(cmsg) = fd;
if((n=sendmsg(s, &msg, 0)) != iov.iov_len)
return -1;
@ -46,10 +41,12 @@ int
recvfd(int s)
{
int n;
int fd;
char buf[1];
struct iovec iov;
struct msghdr msg;
Sendfd sfd;
struct cmsghdr *cmsg;
char cms[CMSG_SPACE(sizeof(int))];
iov.iov_base = buf;
iov.iov_len = 1;
@ -60,20 +57,13 @@ recvfd(int s)
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
memset(&sfd, 0, sizeof sfd);
sfd.fd = -1;
sfd.cmsg.cmsg_len = sizeof sfd;
sfd.cmsg.cmsg_level = SOL_SOCKET;
sfd.cmsg.cmsg_type = SCM_RIGHTS;
msg.msg_control = (caddr_t)&sfd;
msg.msg_controllen = sizeof sfd;
msg.msg_control = (caddr_t)cms;
msg.msg_controllen = sizeof cms;
if((n=recvmsg(s, &msg, 0)) < 0)
return -1;
if(n==0 && sfd.fd==-1){
werrstr("eof in recvfd");
return -1;
}
return sfd.fd;
cmsg = CMSG_FIRSTHDR(&msg);
fd = *(int*)CMSG_DATA(cmsg);
return fd;
}

View file

@ -9,6 +9,10 @@
%.$O: %.s
$AS $AFLAGS $stem.s
# OpenBSD needs this; sigh
%.$O: %.S
$CC $CFLAGS $stem.S
y.tab.h y.tab.c: $YFILES
$YACC $YFLAGS $prereq

View file

@ -5,6 +5,7 @@ OBJTYPE=`uname -m | sed '
s;/.*;;;
s; ;;g;
s;PowerMacintosh;power;g;
s;macppc;power;g;
s;ppc64;power;g;
s;ppc;power;g'`