diff --git a/configure.in b/configure.in index 798f6728a62..51230d9e220 100644 --- a/configure.in +++ b/configure.in @@ -660,7 +660,7 @@ fi ## Header files ## dnl sys/socket.h and sys/types.h are required by AC_FUNC_ACCEPT_ARGTYPES -AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h netinet/tcp.h pwd.h sys/ipc.h sys/pstat.h sys/select.h sys/socket.h sys/types.h sys/un.h termios.h]) +AC_CHECK_HEADERS([crypt.h dld.h endian.h fp_class.h getopt.h ieeefp.h netinet/tcp.h pwd.h sys/pstat.h sys/select.h sys/socket.h sys/types.h sys/un.h termios.h]) AC_CHECK_HEADERS([readline/readline.h readline.h], [break]) AC_CHECK_HEADERS([readline/history.h history.h], [break]) diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index 94eb1bb1224..6611f134727 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.69 2000/10/02 19:42:45 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.70 2000/10/03 03:11:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -496,7 +496,6 @@ AtCommit_Notify() */ if (kill(listenerPID, SIGUSR2) < 0) { - /* * Get rid of pg_listener entry if it refers to a PID * that no longer exists. Presumably, that backend diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 8417cd475ab..68ee5a03bde 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -29,7 +29,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pqcomm.c,v 1.103 2000/10/02 21:45:31 petere Exp $ + * $Id: pqcomm.c,v 1.104 2000/10/03 03:11:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -208,11 +208,16 @@ StreamServerPort(int family, unsigned short portName, int *fdP) MemSet((char *) &saddr, 0, sizeof(saddr)); saddr.sa.sa_family = family; + +/* I know this isn't a good way of testing, but until we have a + * define for this it'll do! + * we have Unix sockets... + */ +#ifdef HAVE_SYS_UN_H if (family == AF_UNIX) { len = UNIXSOCK_PATH(saddr.un, portName); strcpy(sock_path, saddr.un.sun_path); - /* * If the socket exists but nobody has an advisory lock on it we * can safely delete the file. @@ -231,13 +236,16 @@ StreamServerPort(int family, unsigned short portName, int *fdP) } #endif /* HAVE_FCNTL_SETLK */ } - else - { +#endif /* HAVE_SYS_UN_H */ + + if (family == AF_INET) + { saddr.in.sin_addr.s_addr = htonl(INADDR_ANY); saddr.in.sin_port = htons(portName); len = sizeof(struct sockaddr_in); } - err = bind(fd, &saddr.sa, len); + + err = bind(fd, (struct sockaddr *)&saddr.sa, len); if (err < 0) { snprintf(PQerrormsg, PQERRORMSG_LENGTH, @@ -258,6 +266,7 @@ StreamServerPort(int family, unsigned short portName, int *fdP) return STATUS_ERROR; } +#ifdef HAVE_SYS_UN_H /* yeah I know... */ if (family == AF_UNIX) { on_proc_exit(StreamDoUnlink, 0); @@ -279,6 +288,7 @@ StreamServerPort(int family, unsigned short portName, int *fdP) } #endif /* HAVE_FCNTL_SETLK */ } +#endif /* HAVE_SYS_UN_H */ listen(fd, SOMAXCONN); diff --git a/src/backend/libpq/pqpacket.c b/src/backend/libpq/pqpacket.c index defc57f69af..8e51a97f225 100644 --- a/src/backend/libpq/pqpacket.c +++ b/src/backend/libpq/pqpacket.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.26 2000/04/12 17:15:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.27 2000/10/03 03:11:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -61,7 +61,11 @@ PacketReceiveFragment(Port *port) got = SSL_read(port->ssl, pkt->ptr, pkt->nrtodo); else #endif +#ifndef __BEOS__ got = read(port->sock, pkt->ptr, pkt->nrtodo); +#else + got = recv(port->sock, pkt->ptr, pkt->nrtodo, 0); +#endif /* __BEOS__ */ if (got > 0) { pkt->nrtodo -= got; @@ -150,8 +154,11 @@ PacketSendFragment(Port *port) done = SSL_write(port->ssl, pkt->ptr, pkt->nrtodo); else #endif +#ifndef __BEOS__ done = write(port->sock, pkt->ptr, pkt->nrtodo); - +#else + done = send(port->sock, pkt->ptr, pkt->nrtodo, 0); +#endif if (done > 0) { pkt->nrtodo -= done; diff --git a/src/backend/main/main.c b/src/backend/main/main.c index a20b39886d5..7625bf7626a 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.30 2000/09/06 14:15:19 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.31 2000/10/03 03:11:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -85,11 +85,18 @@ main(int argc, char *argv[]) */ len = strlen(argv[0]); - if (!geteuid()) +/* OK this is going to seem weird, but BeOS is presently basically + * a single user system. There is work going on, but at present it'll + * say that every user is uid 0, i.e. root. We'll inhibit this check + * until Be get the system working with multiple users!! + */ +#ifndef __BEOS__ +if (!geteuid()) { fprintf(stderr, "%s", NOROOTEXEC); exit(1); } +#endif /* __BEOS__ */ if (len >= 10 && !strcmp(argv[0] + len - 10, "postmaster")) exit(PostmasterMain(argc, argv)); diff --git a/src/backend/port/dynloader/beos.c b/src/backend/port/dynloader/beos.c index c2a6b788457..f1ed5281b6d 100644 --- a/src/backend/port/dynloader/beos.c +++ b/src/backend/port/dynloader/beos.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/beos.c,v 1.1 2000/10/02 17:15:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/port/dynloader/Attic/beos.c,v 1.2 2000/10/03 03:11:15 momjian Exp $ * *------------------------------------------------------------------------- */ diff --git a/src/backend/port/dynloader/beos.h b/src/backend/port/dynloader/beos.h index 3765ff06296..9cc37430342 100644 --- a/src/backend/port/dynloader/beos.h +++ b/src/backend/port/dynloader/beos.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: beos.h,v 1.1 2000/10/02 17:15:53 momjian Exp $ + * $Id: beos.h,v 1.2 2000/10/03 03:11:15 momjian Exp $ * *------------------------------------------------------------------------- */ diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ba5ec51648c..99ae61b2b5b 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.167 2000/10/02 19:42:46 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.168 2000/10/03 03:11:16 momjian Exp $ * * NOTES * @@ -818,13 +818,12 @@ ServerLoop(void) if (select(nSockets, &rmask, &wmask, (fd_set *) NULL, (struct timeval *) NULL) < 0) { - if (errno == EINTR) + if (errno == EINTR || errno == EWOULDBLOCK) continue; fprintf(stderr, "%s: ServerLoop: select failed: %s\n", progname, strerror(errno)); return STATUS_ERROR; } - /* * Select a random seed at the time of first receiving a request. */ @@ -1021,7 +1020,6 @@ initMasks(fd_set *rmask, fd_set *wmask) if (ServerSock_INET != INVALID_SOCK) { FD_SET(ServerSock_INET, rmask); - if (ServerSock_INET > nsocks) nsocks = ServerSock_INET; } diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index d0e98cf48b4..f6e045a2cdc 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.50 2000/10/02 19:42:48 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.51 2000/10/03 03:11:17 momjian Exp $ * * NOTES * @@ -34,8 +34,15 @@ #include "storage/ipc.h" #include "storage/s_lock.h" /* In Ultrix, sem.h and shm.h must be included AFTER ipc.h */ +#ifdef HAVE_SYS_SEM_H #include <sys/sem.h> +#endif +#ifdef HAVE_SYS_SHM_H #include <sys/shm.h> +#endif +#ifdef HAVE_KERNEL_OS_H +#include <kernel/OS.h> +#endif #include "miscadmin.h" #include "utils/memutils.h" #include "libpq/libpq.h" @@ -236,12 +243,17 @@ on_exit_reset(void) static void IPCPrivateSemaphoreKill(int status, int semId) { +/* BeOS has a native sempahore type... */ +#ifndef __BEOS__ union semun semun; semun.val = 0; /* unused */ if (semctl(semId, 0, IPC_RMID, semun) == -1) elog(NOTICE, "IPCPrivateSemaphoreKill: semctl(%d, 0, IPC_RMID, ...) failed: %s", semId, strerror(errno)); +#else /* __BEOS__ */ + delete_sem(semId); +#endif /* __BEOS__ */ } @@ -258,12 +270,19 @@ IPCPrivateMemoryKill(int status, int shmId) } else { +#ifndef __BEOS__ if (shmctl(shmId, IPC_RMID, (struct shmid_ds *) NULL) < 0) - { - elog(NOTICE, "IPCPrivateMemoryKill: shmctl(id=%d, IPC_RMID, NULL) failed: %m", - shmId); - } - } + { + elog(NOTICE, "IPCPrivateMemoryKill: shmctl(%d, %d, 0) failed: %m", + shmId, IPC_RMID); + } +#else + if (delete_area(shmId) != B_OK) + { + elog(NOTICE, "IPCPrivateMemoryKill: delete_area(%d) failed", shmId); + } +#endif /* __BEOS__ */ + } } /* @@ -284,9 +303,10 @@ IpcSemaphoreCreate(IpcSemaphoreKey semKey, int semStartValue, int removeOnExit) { + int semId; +#ifndef __BEOS__ int i; int errStatus; - int semId; u_short array[IPC_NMAXSEM]; union semun semun; @@ -302,6 +322,7 @@ IpcSemaphoreCreate(IpcSemaphoreKey semKey, fprintf(stderr, "calling semget(%d, %d, 0%o)\n", semKey, semNum, (unsigned)(IPC_CREAT|permission)); #endif + semId = semget(semKey, semNum, IPC_CREAT | permission); if (semId < 0) @@ -341,9 +362,25 @@ IpcSemaphoreCreate(IpcSemaphoreKey semKey, } if (removeOnExit) - on_shmem_exit(IPCPrivateSemaphoreKill, (Datum)semId); + on_shmem_exit(IPCPrivateSemaphoreKill, (Datum) semId); } + +#else /* BeOS implementation */ + char semname[32]; + sprintf (semname, "pgsql_ipc:%ld", semKey); + semId = create_sem(1, semname); + if (semId < 0) { + fprintf(stderr, "IpcSemaphoreCreate: create_sem(1, %s) failed: %s\n", + semname, strerror(errno)); + return (-1); + } + + if (removeOnExit) + on_shmem_exit(IPCPrivateSemaphoreKill, (caddr_t) semId); + +#endif + #ifdef DEBUG_IPC fprintf(stderr, "IpcSemaphoreCreate returns %d\n", semId); fflush(stdout); @@ -387,6 +424,7 @@ void IpcSemaphoreKill(IpcSemaphoreKey key) { int semId; +#ifndef __BEOS__ union semun semun; semun.val = 0; /* unused */ @@ -395,6 +433,23 @@ IpcSemaphoreKill(IpcSemaphoreKey key) semId = semget(key, 0, 0); if (semId != -1) semctl(semId, 0, IPC_RMID, semun); +#else +/* first find the semId by looking at sempahore names... */ + sem_info si; + int32 cookie = 0; + char semname[32]; + sprintf(semname, "pgsql_ipc:%ld", key); + + semId = -1; + while (get_next_sem_info(0, &cookie, &si) == B_OK) { + if (strcmp(si.name, semname) == 0){ + semId = si.sem; + break; + } + } + if (semId != -1) + delete_sem(semId); +#endif } /****************************************************************************/ @@ -407,6 +462,7 @@ static int IpcSemaphoreLock_return; void IpcSemaphoreLock(IpcSemaphoreId semId, int sem, int lock) { +#ifndef __BEOS__ extern int errno; int errStatus; struct sembuf sops; @@ -439,6 +495,13 @@ IpcSemaphoreLock(IpcSemaphoreId semId, int sem, int lock) semId, strerror(errno)); proc_exit(255); } +#else + if ((IpcSemaphoreLock_return = acquire_sem(semId)) != B_NO_ERROR) { + fprintf(stderr, "IpcSempahoreLock: acquire_sem failed on sem_id %d: %s\n", + semId, strerror(errno)); + proc_exit(255); + } +#endif } /****************************************************************************/ @@ -451,6 +514,7 @@ static int IpcSemaphoreUnlock_return; void IpcSemaphoreUnlock(IpcSemaphoreId semId, int sem, int lock) { +#ifndef __BEOS__ extern int errno; int errStatus; struct sembuf sops; @@ -484,28 +548,49 @@ IpcSemaphoreUnlock(IpcSemaphoreId semId, int sem, int lock) semId, strerror(errno)); proc_exit(255); } +#else + if ((IpcSemaphoreUnlock_return = release_sem(semId)) != B_NO_ERROR) { + fprintf(stderr, "IpcSempahoreUnlock: release_sem failed on sem_id %d: %s\n", + semId, strerror(errno)); + proc_exit(255); + } +#endif } int IpcSemaphoreGetCount(IpcSemaphoreId semId, int sem) { +#ifndef __BEOS__ int semncnt; union semun dummy; /* for Solaris */ dummy.val = 0; /* unused */ semncnt = semctl(semId, sem, GETNCNT, dummy); return semncnt; +#else + sem_info si; + + get_sem_info(semId, &si); + return si.count; +#endif /* __BEOS__ */ } int IpcSemaphoreGetValue(IpcSemaphoreId semId, int sem) { +#ifndef __BEOS__ int semval; union semun dummy; /* for Solaris */ dummy.val = 0; /* unused */ semval = semctl(semId, sem, GETVAL, dummy); return semval; +#else + sem_info si; + + get_sem_info(semId, &si); + return si.count; +#endif /* __BEOS__ */ } /****************************************************************************/ @@ -526,6 +611,8 @@ IpcMemoryCreate(IpcMemoryKey memKey, uint32 size, int permission) shmid = PrivateMemoryCreate(memKey, size); } else +#ifndef __BEOS__ + shmid = shmget(memKey, size, IPC_CREAT | permission); if (shmid < 0) @@ -562,6 +649,25 @@ IpcMemoryCreate(IpcMemoryKey memKey, uint32 size, int permission) return IpcMemCreationFailed; } +#else + + { + char *addr; + uint32 pages = ((size - 1) / B_PAGE_SIZE) +1; + char areaname[32]; + sprintf (areaname, "pgsql_ipc%ld", memKey); + + shmid = create_area(areaname, (void*)&addr, B_ANY_ADDRESS, pages * B_PAGE_SIZE, + B_NO_LOCK, B_READ_AREA|B_WRITE_AREA); + } + + if (shmid < 0) { + fprintf(stderr, "IpcMemoryCreate: failed: %s\n", + strerror(errno)); + return IpcMemCreationFailed; + } +#endif /* __BEOS__ */ + /* if (memKey == PrivateIPCKey) */ on_shmem_exit(IPCPrivateMemoryKill, (Datum) shmid); @@ -577,6 +683,7 @@ IpcMemoryIdGet(IpcMemoryKey memKey, uint32 size) { IpcMemoryId shmid; +#ifndef __BEOS__ shmid = shmget(memKey, size, 0); if (shmid < 0) @@ -585,6 +692,17 @@ IpcMemoryIdGet(IpcMemoryKey memKey, uint32 size) memKey, size, strerror(errno)); return IpcMemIdGetFailed; } +#else + char areaname[32]; + sprintf(areaname, "pgsql_ipc%ld", memKey); + shmid = find_area(areaname); + + if (shmid == B_NAME_NOT_FOUND){ + fprintf(stderr, "IpcMemoryIdGet: find_area(%s) failed: %s\n", + areaname, strerror(errno)); + return IpcMemIdGetFailed; + } +#endif /* __BEOS__ */ return shmid; } @@ -597,8 +715,10 @@ IpcMemoryIdGet(IpcMemoryKey memKey, uint32 size) static void IpcMemoryDetach(int status, char *shmaddr) { +#ifndef __BEOS__ if (shmdt(shmaddr) < 0) elog(NOTICE, "IpcMemoryDetach: shmdt(0x%p) failed: %m", shmaddr); +#endif } /****************************************************************************/ @@ -613,6 +733,7 @@ IpcMemoryAttach(IpcMemoryId memId) { char *memAddress; +#ifndef __BEOS__ if (UsePrivateMemory) memAddress = (char *) PrivateMemoryAttach(memId); else @@ -625,6 +746,23 @@ IpcMemoryAttach(IpcMemoryId memId) memId, strerror(errno)); return IpcMemAttachFailed; } +#else + + if (UsePrivateMemory) + memAddress = (char *) PrivateMemoryAttach(memId); + else + { + area_info ai; + get_area_info(memId, &ai); + memAddress = (char *)ai.address; + } + + if (memAddress == (char *)-1) { + fprintf(stderr,"IpcMemoryAttach: failed to get area address (%d): %s\n", + memId, strerror(errno)); + return IpcMemAttachFailed; + } +#endif /* __BEOS__ */ if (!UsePrivateMemory) on_shmem_exit(IpcMemoryDetach, PointerGetDatum(memAddress)); @@ -642,6 +780,7 @@ IpcMemoryKill(IpcMemoryKey memKey) { IpcMemoryId shmid; +#ifndef __BEOS__ if (!UsePrivateMemory && (shmid = shmget(memKey, 0, 0)) >= 0) { if (shmctl(shmid, IPC_RMID, (struct shmid_ds *) NULL) < 0) @@ -650,6 +789,15 @@ IpcMemoryKill(IpcMemoryKey memKey) shmid, IPC_RMID); } } +#else + char areaname[32]; + sprintf(areaname, "pgsql_ipc%ld", memKey); + shmid = find_area(areaname); + if (!UsePrivateMemory && shmid > 0) { + if (delete_area(shmid) != B_OK) + elog(NOTICE, "IpcMemoryKill: deleta_area(%d) failed!", shmid); + } +#endif /* __BEOS__ */ } #ifdef HAS_TEST_AND_SET diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index fb5d06fd8b8..1ade4950bec 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.81 2000/10/02 21:45:32 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.82 2000/10/03 03:11:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,7 @@ * This is so that we can support more backends. (system-wide semaphore * sets run out pretty fast.) -ay 4/95 * - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.81 2000/10/02 21:45:32 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.82 2000/10/03 03:11:18 momjian Exp $ */ #include "postgres.h" @@ -65,7 +65,9 @@ /* In Ultrix and QNX, sem.h must be included after ipc.h */ +#ifdef HAVE_SYS_SEM_H #include <sys/sem.h> +#endif #include "storage/proc.h" @@ -264,8 +266,10 @@ InitProcess(IPCKey key) * we might be reusing a semaphore that belongs to a dead backend. * So be careful and reinitialize its value here. */ +#ifndef __BEOS__ semun.val = IpcSemaphoreDefaultStartValue; semctl(semId, semNum, SETVAL, semun); +#endif IpcSemaphoreLock(semId, semNum, IpcExclusiveLock); MyProc->sem.semId = semId; @@ -515,7 +519,9 @@ SetWaitingForLock(bool waiting) void LockWaitCancel(void) { - struct itimerval timeval, +/* BeOS doesn't have setitimer, but has set_alarm */ +#ifndef __BEOS__ +struct itimerval timeval, dummy; if (!lockWaiting) @@ -524,6 +530,14 @@ LockWaitCancel(void) /* Deadlock timer off */ MemSet(&timeval, 0, sizeof(struct itimerval)); setitimer(ITIMER_REAL, &timeval, &dummy); +#else + if (!lockWaiting) + return; + lockWaiting = false; + /* Deadlock timer off */ + set_alarm(B_INFINITE_TIMEOUT, B_PERIODIC_ALARM); +#endif /* __BEOS__ */ + if (GetOffWaitqueue(MyProc)) elog(ERROR, "Query cancel requested while waiting lock"); } @@ -555,8 +569,12 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */ bool selfConflict = (lockctl->conflictTab[token] & myMask), prevSame = false; bool deadlock_checked = false; +#ifndef __BEOS__ struct itimerval timeval, dummy; +#else + bigtime_t time_interval; +#endif MyProc->token = token; MyProc->waitLock = lock; @@ -635,9 +653,14 @@ ins:; * to 0. * -------------- */ +#ifndef __BEOS__ MemSet(&timeval, 0, sizeof(struct itimerval)); timeval.it_value.tv_sec = DeadlockTimeout / 1000; timeval.it_value.tv_usec = (DeadlockTimeout % 1000) * 1000; +#else + /* usecs */ + time_interval = DeadlockTimeout * 1000000; +#endif SetWaitingForLock(true); do @@ -645,7 +668,11 @@ ins:; MyProc->errType = NO_ERROR; /* reset flag after deadlock check */ if (!deadlock_checked) +#ifndef __BEOS__ if (setitimer(ITIMER_REAL, &timeval, &dummy)) +#else + if (set_alarm(time_interval, B_ONE_SHOT_RELATIVE_ALARM) < 0) +#endif elog(FATAL, "ProcSleep: Unable to set timer for process wakeup"); deadlock_checked = true; @@ -665,9 +692,13 @@ ins:; * We were awoken before a timeout - now disable the timer * --------------- */ +#ifndef __BEOS__ timeval.it_value.tv_sec = 0; timeval.it_value.tv_usec = 0; if (setitimer(ITIMER_REAL, &timeval, &dummy)) +#else + if (set_alarm(B_INFINITE_TIMEOUT, B_PERIODIC_ALARM) < 0) +#endif elog(FATAL, "ProcSleep: Unable to diable timer for process wakeup"); /* ---------------- diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 150423faafa..bddad9e4f6e 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.176 2000/10/02 19:42:53 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.177 2000/10/03 03:11:19 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -1397,7 +1397,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.176 $ $Date: 2000/10/02 19:42:53 $\n"); + puts("$Revision: 1.177 $ $Date: 2000/10/03 03:11:19 $\n"); } /* @@ -1730,7 +1730,8 @@ ShowUsage(void) (long int) user.tv_usec, (long int) sys.tv_sec, (long int) sys.tv_usec); -#ifdef HAVE_GETRUSAGE +/* BeOS has rusage but only has some fields, and not these... */ +#if defined(HAVE_GETRUSAGE) && !defined(__BEOS__) fprintf(StatFp, "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n", r.ru_inblock - Save_r.ru_inblock, diff --git a/src/backend/utils/adt/pg_lzcompress.c b/src/backend/utils/adt/pg_lzcompress.c index 9360c60dad7..fc93031b521 100644 --- a/src/backend/utils/adt/pg_lzcompress.c +++ b/src/backend/utils/adt/pg_lzcompress.c @@ -1,7 +1,7 @@ /* ---------- * pg_lzcompress.c - * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.8 2000/07/20 14:23:28 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/pg_lzcompress.c,v 1.9 2000/10/03 03:11:20 momjian Exp $ * * This is an implementation of LZ compression for PostgreSQL. * It uses a simple history table and generates 2-3 byte tags @@ -474,7 +474,7 @@ pglz_find_match(PGLZ_HistEntry **hstart, char *input, char *end, * ---------- */ int -pglz_compress(char *source, int slen, PGLZ_Header *dest, PGLZ_Strategy *strategy) +pglz_compress(char *source, int32 slen, PGLZ_Header *dest, PGLZ_Strategy *strategy) { int hist_next = 0; diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 60307ff2b57..4aeefacb824 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.62 2000/09/29 13:35:26 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.63 2000/10/03 03:11:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -134,6 +134,8 @@ elog(int lev, const char *fmt, ...) if (lev <= DEBUG && Debugfile < 0) return; /* ignore debug msgs if noplace to send */ +/* BeOS doesn't have sys_nerr and should be able to use strerror()... */ +#ifndef __BEOS__ /* save errno string for %m */ if (errno < sys_nerr && errno >= 0) errorstr = strerror(errno); @@ -180,6 +182,9 @@ elog(int lev, const char *fmt, ...) prefix = prefix_buf; break; } +#else + errorstr = strerror(errno); +#endif /* __BEOS__ */ timestamp_size = 0; if (Log_timestamp) diff --git a/src/backend/utils/error/exc.c b/src/backend/utils/error/exc.c index 21a1008f8cb..0f1d834f92a 100644 --- a/src/backend/utils/error/exc.c +++ b/src/backend/utils/error/exc.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.30 2000/09/29 13:35:26 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.31 2000/10/03 03:11:22 momjian Exp $ * * NOTE * XXX this code needs improvement--check for state violations and @@ -131,7 +131,11 @@ ExcPrint(Exception *excP, fprintf(stderr, " (%ld)", detail); +#ifndef __BEOS__ if (errno > 0 && errno < sys_nerr) +#else + if (errno > 0) +#endif fprintf(stderr, " [%s]", strerror(errno)); else if (errno != 0) fprintf(stderr, " [Error %d]", errno); diff --git a/src/include/c.h b/src/include/c.h index fcef4a0ff30..b38f2b96e1e 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: c.h,v 1.83 2000/10/02 17:15:55 momjian Exp $ + * $Id: c.h,v 1.84 2000/10/03 03:11:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -56,7 +56,7 @@ #include <errno.h> #include <sys/fcntl.h> /* ensure O_BINARY is available */ #endif -#ifdef __BEOS__ +#ifdef HAVE_SUPPORTDEFS_H #include <SupportDefs.h> #endif @@ -69,7 +69,11 @@ * Boolean value, either true or false. * */ -#ifndef __BEOS__ + +/* BeOS defines bool already, but the compiler chokes on the + * #ifndef unless we wrap it in this check. + */ +#ifndef __BEOS__ #ifndef __cplusplus #ifndef bool typedef char bool; @@ -170,24 +174,22 @@ typedef char *Pointer; * used for numerical computations and the * frontend/backend protocol. */ -#ifndef __BEOS__ +#ifndef __BEOS__ /* this shouldn't be required, but is is! */ typedef signed char int8; /* == 8 bits */ typedef signed short int16; /* == 16 bits */ typedef signed int int32; /* == 32 bits */ #endif /* __BEOS__ */ - /* * uintN * Unsigned integer, EXACTLY N BITS IN SIZE, * used for numerical computations and the * frontend/backend protocol. */ -#ifndef __BEOS__ +#ifndef __BEOS__ /* this shouldn't be required, but is is! */ typedef unsigned char uint8; /* == 8 bits */ typedef unsigned short uint16; /* == 16 bits */ typedef unsigned int uint32; /* == 32 bits */ #endif /* __BEOS__ */ - /* * floatN * Floating point number, AT LEAST N BITS IN SIZE, @@ -268,8 +270,7 @@ typedef int32 int4; typedef float float4; typedef double float8; -/* BeOS already has int64 defined, so skip these... */ -#ifndef BEOS +#ifndef __BEOS__ /* this is already defined on BeOS */ #ifdef HAVE_LONG_INT_64 /* Plain "long int" fits, use it */ typedef long int int64; @@ -283,9 +284,7 @@ typedef long int int64; #define INT64_IS_BUSTED #endif #endif -#else /* Add BeOS support */ -#include <SupportDefs.h> -#endif /* BEOS */ +#endif /* __BEOS__ */ /* ---------------------------------------------------------------- * Section 4: datum type + support macros diff --git a/src/include/config.h.in b/src/include/config.h.in index 86b9623995e..bb53769b004 100644 --- a/src/include/config.h.in +++ b/src/include/config.h.in @@ -8,7 +8,7 @@ * or in config.h afterwards. Of course, if you edit config.h, then your * changes will be overwritten the next time you run configure. * - * $Id: config.h.in,v 1.138 2000/10/02 17:15:55 momjian Exp $ + * $Id: config.h.in,v 1.139 2000/10/03 03:11:23 momjian Exp $ */ #ifndef CONFIG_H @@ -342,15 +342,30 @@ /* Set to 1 if you have <readline/readline.h> */ #undef HAVE_READLINE_READLINE_H -/* Define if you have <sys/ipc.h> */ +/* Set to 1 if you have <sys/ipc.h> */ #undef HAVE_SYS_IPC_H /* Set to 1 if you have <sys/select.h> */ #undef HAVE_SYS_SELECT_H -/* Set to 1 if you have <sys/un.h> */ +/* Set to 1 if you have <sys/un.h> */ #undef HAVE_SYS_UN_H +/* Set to 1 if you have <sys/sem.h> */ +#undef HAVE_SYS_SEM_H + +/* Set to 1 if you have <sys/shm.h> */ +#undef HAVE_SYS_SHM_H + +/* Set to 1 if you have <kernel/OS.h> */ +#undef HAVE_KERNEL_OS_H + +/* Set to 1 if you have <SupportDefs.h> */ +#undef HAVE_SUPPORTDEFS_H + +/* Set to 1 if you have <kernel/image.h> */ +#undef HAVE_KERNEL_IMAGE_H + /* Set to 1 if you have <termios.h> */ #undef HAVE_TERMIOS_H diff --git a/src/include/port/beos.h b/src/include/port/beos.h index c7b33efecb9..401426c5f22 100644 --- a/src/include/port/beos.h +++ b/src/include/port/beos.h @@ -4,7 +4,6 @@ typedef unsigned char slock_t; -#define AF_UNIX 1 -#define IPPROTO_IP 0 +#define AF_UNIX 1 /* no domain sockets on BeOS */ diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h index 85dfe03ceb1..04cd86d3cb4 100644 --- a/src/include/storage/ipc.h +++ b/src/include/storage/ipc.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: ipc.h,v 1.40 2000/10/02 19:42:56 petere Exp $ + * $Id: ipc.h,v 1.41 2000/10/03 03:11:24 momjian Exp $ * * NOTES * This file is very architecture-specific. This stuff should actually @@ -27,7 +27,14 @@ #include <sys/types.h> #ifdef HAVE_SYS_IPC_H #include <sys/ipc.h> /* For IPC_PRIVATE */ -#endif +#else +/* BeOS doesn't have IPC_PRIVATE so we'll use the value that is set by + * FreeBSD (1) + */ +#define IPC_PRIVATE 1 +#endif /* HAVE_SYS_IPC_H */ + +#include "config.h" #ifndef HAVE_UNION_SEMUN union semun diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 2296a2db6ce..663ec7cb668 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.134 2000/09/27 15:17:56 petere Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.135 2000/10/03 03:11:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -619,8 +619,11 @@ update_db_info(PGconn *conn) static int connectMakeNonblocking(PGconn *conn) { -#ifndef WIN32 +#ifdef WIN32 if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) < 0) +#elif defined(__BEOS__) + int on = 1; + if (ioctl(conn->sock, FIONBIO, &on) != 0) #else int on = 1; @@ -959,7 +962,6 @@ static int connectDBComplete(PGconn *conn) { PostgresPollingStatusType flag = PGRES_POLLING_WRITING; - if (conn == NULL || conn->status == CONNECTION_BAD) return 0; @@ -1039,7 +1041,6 @@ PostgresPollingStatusType PQconnectPoll(PGconn *conn) { PGresult *res; - if (conn == NULL) return PGRES_POLLING_FAILED; diff --git a/src/template/beos b/src/template/beos index 0a62b51a1e4..d93a6c1e4f3 100644 --- a/src/template/beos +++ b/src/template/beos @@ -1,6 +1,6 @@ AROPT:crs SHARED_LIB:-fpic -DPIC -CFLAGS:-O2 -DBEOS +CFLAGS:-O2 SRCH_INC: SRCH_LIB: USE_LOCALE:no