Full switch to clang/ELF. Drop ack. Simplify.
There is important information about booting non-ack images in docs/UPDATING. ack/aout-format images can't be built any more, and booting clang/ELF-format ones is a little different. Updating to the new boot monitor is recommended. Changes in this commit: . drop boot monitor -> allowing dropping ack support . facility to copy ELF boot files to /boot so that old boot monitor can still boot fairly easily, see UPDATING . no more ack-format libraries -> single-case libraries . some cleanup of OBJECT_FMT, COMPILER_TYPE, etc cases . drop several ack toolchain commands, but not all support commands (e.g. aal is gone but acksize is not yet). . a few libc files moved to netbsd libc dir . new /bin/date as minix date used code in libc/ . test compile fix . harmonize includes . /usr/lib is no longer special: without ack, /usr/lib plays no kind of special bootstrapping role any more and bootstrapping is done exclusively through packages, so releases depend even less on the state of the machine making them now. . rename nbsd_lib* to lib* . reduce mtree
This commit is contained in:
+57
-10
@@ -1,16 +1,63 @@
|
||||
# $NetBSD: Makefile,v 1.126 2010/03/01 21:10:13 darran Exp $
|
||||
|
||||
NETBSDINCSDIR= /usr/include
|
||||
INCSDIR= /usr/include/sys
|
||||
|
||||
.include <bsd.sys.mk>
|
||||
|
||||
INCSDIR= /usr/include.ack/sys
|
||||
|
||||
INCS= asynchio.h file.h \
|
||||
ioctl.h ipc.h jmp_buf.h kbdio.h mman.h \
|
||||
mount.h mtio.h param.h ptrace.h queue.h resource.h \
|
||||
select.h sem.h shm.h sigcontext.h signal.h socket.h \
|
||||
soundcard.h statfs.h statvfs.h stat.h svrctl.h timeb.h \
|
||||
time.h times.h types.h ucontext.h ucred.h uio.h un.h \
|
||||
utsname.h video.h vm.h wait.h cdefs.h null.h poll.h
|
||||
# Present only in minix
|
||||
INCS+= ioc_net.h statfs.h
|
||||
|
||||
.include "../../common/include/sys/Makefile.inc"
|
||||
.include "../../common/include/sys/Makefile.mount.inc"
|
||||
INCS+= ansi.h atomic.h \
|
||||
bitops.h bswap.h \
|
||||
cdefs.h cdefs_aout.h cdefs_elf.h ctype_bits.h ctype_inline.h \
|
||||
dirent.h \
|
||||
endian.h errno.h \
|
||||
fcntl.h fd_set.h featuretest.h file.h \
|
||||
float_ieee754.h gcq.h gmon.h hash.h \
|
||||
ieee754.h inttypes.h ioctl.h ipc.h \
|
||||
localedef.h \
|
||||
md4.h md5.h \
|
||||
mman.h mount.h \
|
||||
null.h \
|
||||
param.h poll.h ptrace.h \
|
||||
ptree.h \
|
||||
queue.h \
|
||||
rbtree.h resource.h rmd160.h \
|
||||
select.h sha1.h \
|
||||
sha2.h siginfo.h signal.h sigtypes.h \
|
||||
reboot.h sem.h shm.h socket.h \
|
||||
stat.h statvfs.h \
|
||||
sysctl.h stdint.h \
|
||||
syslimits.h syslog.h \
|
||||
termios.h time.h times.h \
|
||||
tree.h ttycom.h ttydefaults.h \
|
||||
types.h \
|
||||
ucontext.h ucred.h uio.h un.h unistd.h utsname.h uuid.h \
|
||||
wait.h
|
||||
|
||||
INCSYMLINKS=\
|
||||
sys/fcntl.h ${NETBSDINCSDIR}/fcntl.h \
|
||||
sys/poll.h ${NETBSDINCSDIR}/poll.h \
|
||||
sys/stdint.h ${NETBSDINCSDIR}/stdint.h \
|
||||
sys/syslog.h ${NETBSDINCSDIR}/syslog.h \
|
||||
sys/termios.h ${NETBSDINCSDIR}/termios.h \
|
||||
sys/rmd160.h ${NETBSDINCSDIR}/rmd160.h \
|
||||
sys/sha1.h ${NETBSDINCSDIR}/sha1.h \
|
||||
sys/sha2.h ${NETBSDINCSDIR}/sha2.h \
|
||||
sys/md4.h ${NETBSDINCSDIR}/md4.h \
|
||||
sys/md5.h ${NETBSDINCSDIR}/md5.h \
|
||||
sys/exec_elf.h ${NETBSDINCSDIR}/elf.h \
|
||||
|
||||
|
||||
#INCSYMLINKS+= ../soundcard.h ${INCSDIR}/soundcard.h
|
||||
|
||||
namei: namei.src gennameih.awk
|
||||
${TOOL_AWK} -f gennameih.awk < namei.src
|
||||
|
||||
.include <bsd.own.mk>
|
||||
.include "${MINIXSRCDIR}/common/include/sys/Makefile.inc"
|
||||
|
||||
.include <bsd.files.mk>
|
||||
.include <bsd.kinc.mk>
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/* $NetBSD: ansi.h,v 1.13 2010/03/27 22:14:10 tnozaki Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2000, 2001, 2002 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jun-ichiro itojun Hagino and by Klaus Klein.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ANSI_H_
|
||||
#define _SYS_ANSI_H_
|
||||
|
||||
#include <machine/ansi.h>
|
||||
|
||||
typedef char * __caddr_t; /* core address */
|
||||
typedef __uint32_t __gid_t; /* group id */
|
||||
typedef __uint32_t __in_addr_t; /* IP(v4) address */
|
||||
typedef __uint16_t __in_port_t; /* "Internet" port number */
|
||||
typedef unsigned short __mode_t; /* file permissions */
|
||||
typedef long __off_t; /* file offset */
|
||||
typedef int __pid_t; /* process id */
|
||||
typedef __uint8_t __sa_family_t; /* socket address family */
|
||||
typedef __int32_t __socklen_t; /* socket-related datum length */
|
||||
typedef __uint32_t __uid_t; /* user id */
|
||||
typedef unsigned long __fsblkcnt_t; /* fs block count (statvfs) */
|
||||
typedef unsigned long __fsfilcnt_t; /* fs file count */
|
||||
|
||||
struct __tag_wctrans_t;
|
||||
typedef struct __tag_wctrans_t *__wctrans_t;
|
||||
|
||||
struct __tag_wctype_t;
|
||||
typedef struct __tag_wctype_t *__wctype_t;
|
||||
|
||||
/*
|
||||
* mbstate_t is an opaque object to keep conversion state, during multibyte
|
||||
* stream conversions. The content must not be referenced by user programs.
|
||||
*/
|
||||
typedef union {
|
||||
__int64_t __mbstateL; /* for alignment */
|
||||
char __mbstate8[128];
|
||||
} __mbstate_t;
|
||||
|
||||
#define _BSD_WCTRANS_T_ __wctrans_t /* wctrans_t */
|
||||
#define _BSD_WCTYPE_T_ __wctype_t /* wctype_t */
|
||||
#define _BSD_MBSTATE_T_ __mbstate_t /* mbstate_t */
|
||||
|
||||
#endif /* !_SYS_ANSI_H_ */
|
||||
@@ -1,43 +0,0 @@
|
||||
/* asynchio.h - Asynchronous I/O Author: Kees J. Bot
|
||||
* 7 Jul 1997
|
||||
* Minix-vmd compatible asynchio(3) using BSD select(2).
|
||||
*/
|
||||
#ifndef _SYS__ASYNCHIO_H
|
||||
#define _SYS__ASYNCHIO_H
|
||||
|
||||
#include <sys/select.h> /* for FD_SETSIZE */
|
||||
|
||||
#define SEL_READ 0 /* Code for a read. */
|
||||
#define SEL_WRITE 1 /* Code for a write. */
|
||||
#define SEL_EXCEPT 2 /* Code for some exception. */
|
||||
#define SEL_NR 3 /* Number of codes. */
|
||||
|
||||
struct _asynfd {
|
||||
int afd_seen; /* Set if we manage this descriptor. */
|
||||
int afd_flags; /* File flags by fcntl(fd, F_GETFL). */
|
||||
int afd_state[SEL_NR]; /* Operation state. */
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int asyn_more; /* Set if more to do before blocking. */
|
||||
struct _asynfd asyn_afd[FD_SETSIZE];
|
||||
fd_set asyn_fdset[SEL_NR]; /* Select() fd sets. */
|
||||
} asynchio_t;
|
||||
|
||||
#define ASYN_INPROGRESS EAGAIN /* Errno code telling "nothing yet." */
|
||||
#define ASYN_NONBLOCK 0x01 /* If asyn_wait() mustn't block. */
|
||||
|
||||
struct timeval;
|
||||
|
||||
void asyn_init(asynchio_t *_asyn);
|
||||
ssize_t asyn_read(asynchio_t *_asyn, int _fd, void *_buf, size_t _len);
|
||||
ssize_t asyn_write(asynchio_t *_asyn, int _fd, const void *_buf, size_t _len);
|
||||
int asyn_special(asynchio_t *_asyn, int _fd, int _op);
|
||||
int asyn_result(asynchio_t *_asyn, int _fd, int _op, int _result);
|
||||
int asyn_wait(asynchio_t *_asyn, int _flags, struct timeval *to);
|
||||
int asyn_cancel(asynchio_t *_asyn, int _fd, int _op);
|
||||
int asyn_pending(asynchio_t *_asyn, int _fd, int _op);
|
||||
int asyn_synch(asynchio_t *_asyn, int _fd);
|
||||
int asyn_close(asynchio_t *_asyn, int _fd);
|
||||
|
||||
#endif /* _SYS__ASYNCHIO_H */
|
||||
@@ -0,0 +1,154 @@
|
||||
/* $NetBSD: atomic.h,v 1.11 2009/11/20 02:17:07 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ATOMIC_H_
|
||||
#define _SYS_ATOMIC_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
/*
|
||||
* Atomic ADD
|
||||
*/
|
||||
void atomic_add_32(volatile uint32_t *, int32_t);
|
||||
void atomic_add_int(volatile unsigned int *, int);
|
||||
void atomic_add_long(volatile unsigned long *, long);
|
||||
void atomic_add_ptr(volatile void *, ssize_t);
|
||||
void atomic_add_64(volatile uint64_t *, int64_t);
|
||||
|
||||
uint32_t atomic_add_32_nv(volatile uint32_t *, int32_t);
|
||||
unsigned int atomic_add_int_nv(volatile unsigned int *, int);
|
||||
unsigned long atomic_add_long_nv(volatile unsigned long *, long);
|
||||
void * atomic_add_ptr_nv(volatile void *, ssize_t);
|
||||
uint64_t atomic_add_64_nv(volatile uint64_t *, int64_t);
|
||||
|
||||
/*
|
||||
* Atomic AND
|
||||
*/
|
||||
void atomic_and_32(volatile uint32_t *, uint32_t);
|
||||
void atomic_and_uint(volatile unsigned int *, unsigned int);
|
||||
void atomic_and_ulong(volatile unsigned long *, unsigned long);
|
||||
void atomic_and_64(volatile uint64_t *, uint64_t);
|
||||
|
||||
uint32_t atomic_and_32_nv(volatile uint32_t *, uint32_t);
|
||||
unsigned int atomic_and_uint_nv(volatile unsigned int *, unsigned int);
|
||||
unsigned long atomic_and_ulong_nv(volatile unsigned long *, unsigned long);
|
||||
uint64_t atomic_and_64_nv(volatile uint64_t *, uint64_t);
|
||||
|
||||
/*
|
||||
* Atomic OR
|
||||
*/
|
||||
void atomic_or_32(volatile uint32_t *, uint32_t);
|
||||
void atomic_or_uint(volatile unsigned int *, unsigned int);
|
||||
void atomic_or_ulong(volatile unsigned long *, unsigned long);
|
||||
void atomic_or_64(volatile uint64_t *, uint64_t);
|
||||
|
||||
uint32_t atomic_or_32_nv(volatile uint32_t *, uint32_t);
|
||||
unsigned int atomic_or_uint_nv(volatile unsigned int *, unsigned int);
|
||||
unsigned long atomic_or_ulong_nv(volatile unsigned long *, unsigned long);
|
||||
uint64_t atomic_or_64_nv(volatile uint64_t *, uint64_t);
|
||||
|
||||
/*
|
||||
* Atomic COMPARE-AND-SWAP
|
||||
*/
|
||||
uint32_t atomic_cas_32(volatile uint32_t *, uint32_t, uint32_t);
|
||||
unsigned int atomic_cas_uint(volatile unsigned int *, unsigned int,
|
||||
unsigned int);
|
||||
unsigned long atomic_cas_ulong(volatile unsigned long *, unsigned long,
|
||||
unsigned long);
|
||||
void * atomic_cas_ptr(volatile void *, void *, void *);
|
||||
uint64_t atomic_cas_64(volatile uint64_t *, uint64_t, uint64_t);
|
||||
|
||||
/*
|
||||
* Non-interlocked atomic COMPARE-AND-SWAP.
|
||||
*/
|
||||
uint32_t atomic_cas_32_ni(volatile uint32_t *, uint32_t, uint32_t);
|
||||
unsigned int atomic_cas_uint_ni(volatile unsigned int *, unsigned int,
|
||||
unsigned int);
|
||||
unsigned long atomic_cas_ulong_ni(volatile unsigned long *, unsigned long,
|
||||
unsigned long);
|
||||
void * atomic_cas_ptr_ni(volatile void *, void *, void *);
|
||||
uint64_t atomic_cas_64_ni(volatile uint64_t *, uint64_t, uint64_t);
|
||||
|
||||
/*
|
||||
* Atomic SWAP
|
||||
*/
|
||||
uint32_t atomic_swap_32(volatile uint32_t *, uint32_t);
|
||||
unsigned int atomic_swap_uint(volatile unsigned int *, unsigned int);
|
||||
unsigned long atomic_swap_ulong(volatile unsigned long *, unsigned long);
|
||||
void * atomic_swap_ptr(volatile void *, void *);
|
||||
uint64_t atomic_swap_64(volatile uint64_t *, uint64_t);
|
||||
|
||||
/*
|
||||
* Atomic DECREMENT
|
||||
*/
|
||||
void atomic_dec_32(volatile uint32_t *);
|
||||
void atomic_dec_uint(volatile unsigned int *);
|
||||
void atomic_dec_ulong(volatile unsigned long *);
|
||||
void atomic_dec_ptr(volatile void *);
|
||||
void atomic_dec_64(volatile uint64_t *);
|
||||
|
||||
uint32_t atomic_dec_32_nv(volatile uint32_t *);
|
||||
unsigned int atomic_dec_uint_nv(volatile unsigned int *);
|
||||
unsigned long atomic_dec_ulong_nv(volatile unsigned long *);
|
||||
void * atomic_dec_ptr_nv(volatile void *);
|
||||
uint64_t atomic_dec_64_nv(volatile uint64_t *);
|
||||
|
||||
/*
|
||||
* Atomic INCREMENT
|
||||
*/
|
||||
void atomic_inc_32(volatile uint32_t *);
|
||||
void atomic_inc_uint(volatile unsigned int *);
|
||||
void atomic_inc_ulong(volatile unsigned long *);
|
||||
void atomic_inc_ptr(volatile void *);
|
||||
void atomic_inc_64(volatile uint64_t *);
|
||||
|
||||
uint32_t atomic_inc_32_nv(volatile uint32_t *);
|
||||
unsigned int atomic_inc_uint_nv(volatile unsigned int *);
|
||||
unsigned long atomic_inc_ulong_nv(volatile unsigned long *);
|
||||
void * atomic_inc_ptr_nv(volatile void *);
|
||||
uint64_t atomic_inc_64_nv(volatile uint64_t *);
|
||||
|
||||
/*
|
||||
* Memory barrier operations
|
||||
*/
|
||||
void membar_enter(void);
|
||||
void membar_exit(void);
|
||||
void membar_producer(void);
|
||||
void membar_consumer(void);
|
||||
void membar_sync(void);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ! _SYS_ATOMIC_H_ */
|
||||
@@ -0,0 +1,294 @@
|
||||
/* $NetBSD: bitops.h,v 1.7 2010/03/21 14:28:15 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2007, 2010 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Christos Zoulas and Joerg Sonnenberger.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef _SYS_BITOPS_H_
|
||||
#define _SYS_BITOPS_H_
|
||||
|
||||
#include <sys/stdint.h>
|
||||
|
||||
/*
|
||||
* Find First Set functions
|
||||
*/
|
||||
#ifndef ffs32
|
||||
static __inline int __unused
|
||||
ffs32(uint32_t _n)
|
||||
{
|
||||
int _v;
|
||||
|
||||
if (!_n)
|
||||
return 0;
|
||||
|
||||
_v = 1;
|
||||
if ((_n & 0x0000FFFFU) == 0) {
|
||||
_n >>= 16;
|
||||
_v += 16;
|
||||
}
|
||||
if ((_n & 0x000000FFU) == 0) {
|
||||
_n >>= 8;
|
||||
_v += 8;
|
||||
}
|
||||
if ((_n & 0x0000000FU) == 0) {
|
||||
_n >>= 4;
|
||||
_v += 4;
|
||||
}
|
||||
if ((_n & 0x00000003U) == 0) {
|
||||
_n >>= 2;
|
||||
_v += 2;
|
||||
}
|
||||
if ((_n & 0x00000001U) == 0) {
|
||||
_n >>= 1;
|
||||
_v += 1;
|
||||
}
|
||||
return _v;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef ffs64
|
||||
static __inline int __unused
|
||||
ffs64(uint64_t _n)
|
||||
{
|
||||
int _v;
|
||||
|
||||
if (!_n)
|
||||
return 0;
|
||||
|
||||
_v = 1;
|
||||
if ((_n & 0x00000000FFFFFFFFULL) == 0) {
|
||||
_n >>= 32;
|
||||
_v += 32;
|
||||
}
|
||||
if ((_n & 0x000000000000FFFFULL) == 0) {
|
||||
_n >>= 16;
|
||||
_v += 16;
|
||||
}
|
||||
if ((_n & 0x00000000000000FFULL) == 0) {
|
||||
_n >>= 8;
|
||||
_v += 8;
|
||||
}
|
||||
if ((_n & 0x000000000000000FULL) == 0) {
|
||||
_n >>= 4;
|
||||
_v += 4;
|
||||
}
|
||||
if ((_n & 0x0000000000000003ULL) == 0) {
|
||||
_n >>= 2;
|
||||
_v += 2;
|
||||
}
|
||||
if ((_n & 0x0000000000000001ULL) == 0) {
|
||||
_n >>= 1;
|
||||
_v += 1;
|
||||
}
|
||||
return _v;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Find Last Set functions
|
||||
*/
|
||||
#ifndef fls32
|
||||
static __inline int __unused
|
||||
fls32(uint32_t _n)
|
||||
{
|
||||
int _v;
|
||||
|
||||
if (!_n)
|
||||
return 0;
|
||||
|
||||
_v = 32;
|
||||
if ((_n & 0xFFFF0000U) == 0) {
|
||||
_n <<= 16;
|
||||
_v -= 16;
|
||||
}
|
||||
if ((_n & 0xFF000000U) == 0) {
|
||||
_n <<= 8;
|
||||
_v -= 8;
|
||||
}
|
||||
if ((_n & 0xF0000000U) == 0) {
|
||||
_n <<= 4;
|
||||
_v -= 4;
|
||||
}
|
||||
if ((_n & 0xC0000000U) == 0) {
|
||||
_n <<= 2;
|
||||
_v -= 2;
|
||||
}
|
||||
if ((_n & 0x80000000U) == 0) {
|
||||
_n <<= 1;
|
||||
_v -= 1;
|
||||
}
|
||||
return _v;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef fls64
|
||||
static __inline int __unused
|
||||
fls64(uint64_t _n)
|
||||
{
|
||||
int _v;
|
||||
|
||||
if (!_n)
|
||||
return 0;
|
||||
|
||||
_v = 64;
|
||||
if ((_n & 0xFFFFFFFF00000000ULL) == 0) {
|
||||
_n <<= 32;
|
||||
_v -= 32;
|
||||
}
|
||||
if ((_n & 0xFFFF000000000000ULL) == 0) {
|
||||
_n <<= 16;
|
||||
_v -= 16;
|
||||
}
|
||||
if ((_n & 0xFF00000000000000ULL) == 0) {
|
||||
_n <<= 8;
|
||||
_v -= 8;
|
||||
}
|
||||
if ((_n & 0xF000000000000000ULL) == 0) {
|
||||
_n <<= 4;
|
||||
_v -= 4;
|
||||
}
|
||||
if ((_n & 0xC000000000000000ULL) == 0) {
|
||||
_n <<= 2;
|
||||
_v -= 2;
|
||||
}
|
||||
if ((_n & 0x8000000000000000ULL) == 0) {
|
||||
_n <<= 1;
|
||||
_v -= 1;
|
||||
}
|
||||
return _v;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Integer logarithm, returns -1 on error. Inspired by the linux
|
||||
* version written by David Howells.
|
||||
*/
|
||||
#define _ilog2_helper(_n, _x) ((_n) & (1ULL << (_x))) ? _x :
|
||||
#define ilog2(_n) \
|
||||
( \
|
||||
__builtin_constant_p(_n) ? ( \
|
||||
_ilog2_helper(_n, 63) \
|
||||
_ilog2_helper(_n, 62) \
|
||||
_ilog2_helper(_n, 61) \
|
||||
_ilog2_helper(_n, 60) \
|
||||
_ilog2_helper(_n, 59) \
|
||||
_ilog2_helper(_n, 58) \
|
||||
_ilog2_helper(_n, 57) \
|
||||
_ilog2_helper(_n, 56) \
|
||||
_ilog2_helper(_n, 55) \
|
||||
_ilog2_helper(_n, 54) \
|
||||
_ilog2_helper(_n, 53) \
|
||||
_ilog2_helper(_n, 52) \
|
||||
_ilog2_helper(_n, 51) \
|
||||
_ilog2_helper(_n, 50) \
|
||||
_ilog2_helper(_n, 49) \
|
||||
_ilog2_helper(_n, 48) \
|
||||
_ilog2_helper(_n, 47) \
|
||||
_ilog2_helper(_n, 46) \
|
||||
_ilog2_helper(_n, 45) \
|
||||
_ilog2_helper(_n, 44) \
|
||||
_ilog2_helper(_n, 43) \
|
||||
_ilog2_helper(_n, 42) \
|
||||
_ilog2_helper(_n, 41) \
|
||||
_ilog2_helper(_n, 40) \
|
||||
_ilog2_helper(_n, 39) \
|
||||
_ilog2_helper(_n, 38) \
|
||||
_ilog2_helper(_n, 37) \
|
||||
_ilog2_helper(_n, 36) \
|
||||
_ilog2_helper(_n, 35) \
|
||||
_ilog2_helper(_n, 34) \
|
||||
_ilog2_helper(_n, 33) \
|
||||
_ilog2_helper(_n, 32) \
|
||||
_ilog2_helper(_n, 31) \
|
||||
_ilog2_helper(_n, 30) \
|
||||
_ilog2_helper(_n, 29) \
|
||||
_ilog2_helper(_n, 28) \
|
||||
_ilog2_helper(_n, 27) \
|
||||
_ilog2_helper(_n, 26) \
|
||||
_ilog2_helper(_n, 25) \
|
||||
_ilog2_helper(_n, 24) \
|
||||
_ilog2_helper(_n, 23) \
|
||||
_ilog2_helper(_n, 22) \
|
||||
_ilog2_helper(_n, 21) \
|
||||
_ilog2_helper(_n, 20) \
|
||||
_ilog2_helper(_n, 19) \
|
||||
_ilog2_helper(_n, 18) \
|
||||
_ilog2_helper(_n, 17) \
|
||||
_ilog2_helper(_n, 16) \
|
||||
_ilog2_helper(_n, 15) \
|
||||
_ilog2_helper(_n, 14) \
|
||||
_ilog2_helper(_n, 13) \
|
||||
_ilog2_helper(_n, 12) \
|
||||
_ilog2_helper(_n, 11) \
|
||||
_ilog2_helper(_n, 10) \
|
||||
_ilog2_helper(_n, 9) \
|
||||
_ilog2_helper(_n, 8) \
|
||||
_ilog2_helper(_n, 7) \
|
||||
_ilog2_helper(_n, 6) \
|
||||
_ilog2_helper(_n, 5) \
|
||||
_ilog2_helper(_n, 4) \
|
||||
_ilog2_helper(_n, 3) \
|
||||
_ilog2_helper(_n, 2) \
|
||||
_ilog2_helper(_n, 1) \
|
||||
_ilog2_helper(_n, 0) \
|
||||
-1) : ((sizeof(_n) >= 4 ? fls64(_n) : fls32(_n)) - 1) \
|
||||
)
|
||||
|
||||
static __inline void
|
||||
fast_divide32_prepare(uint32_t _div, uint32_t * __restrict _m,
|
||||
uint8_t *__restrict _s1, uint8_t *__restrict _s2)
|
||||
{
|
||||
uint64_t _mt;
|
||||
int _l;
|
||||
|
||||
_l = fls32(_div - 1);
|
||||
_mt = 0x100000000ULL * ((1ULL << _l) - _div);
|
||||
*_m = (uint32_t)(_mt / _div + 1);
|
||||
*_s1 = (_l > 1) ? 1 : _l;
|
||||
*_s2 = (_l == 0) ? 0 : _l - 1;
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
static __inline uint32_t
|
||||
fast_divide32(uint32_t _v, uint32_t _div, uint32_t _m, uint8_t _s1,
|
||||
uint8_t _s2)
|
||||
{
|
||||
uint32_t _t;
|
||||
|
||||
_t = (uint32_t)(((uint64_t)_v * _m) >> 32);
|
||||
return (_t + ((_v - _t) >> _s1)) >> _s2;
|
||||
}
|
||||
|
||||
static __inline uint32_t
|
||||
fast_remainder32(uint32_t _v, uint32_t _div, uint32_t _m, uint8_t _s1,
|
||||
uint8_t _s2)
|
||||
{
|
||||
|
||||
return _v - _div * fast_divide32(_v, _div, _m, _s1, _s2);
|
||||
}
|
||||
|
||||
#endif /* _SYS_BITOPS_H_ */
|
||||
@@ -0,0 +1,79 @@
|
||||
/* $NetBSD: bswap.h,v 1.16 2009/08/08 21:23:15 christos Exp $ */
|
||||
|
||||
/* Written by Manuel Bouyer. Public domain */
|
||||
|
||||
#ifndef _SYS_BSWAP_H_
|
||||
#define _SYS_BSWAP_H_
|
||||
|
||||
#ifndef _LOCORE
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <machine/bswap.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
/* Always declare the functions in case their address is taken (etc) */
|
||||
#if defined(_KERNEL) || defined(_STANDALONE) || !defined(__BSWAP_RENAME)
|
||||
uint16_t bswap16(uint16_t) __constfunc;
|
||||
uint32_t bswap32(uint32_t) __constfunc;
|
||||
#else
|
||||
uint16_t bswap16(uint16_t) __RENAME(__bswap16) __constfunc;
|
||||
uint32_t bswap32(uint32_t) __RENAME(__bswap32) __constfunc;
|
||||
#endif
|
||||
uint64_t bswap64(uint64_t) __constfunc;
|
||||
__END_DECLS
|
||||
|
||||
#if defined(__GNUC__) && defined(__OPTIMIZE__) && !defined(__lint__)
|
||||
|
||||
/* machine/byte_swap.h might have defined inline versions */
|
||||
#ifndef __BYTE_SWAP_U64_VARIABLE
|
||||
#define __BYTE_SWAP_U64_VARIABLE bswap64
|
||||
#endif
|
||||
|
||||
#ifndef __BYTE_SWAP_U32_VARIABLE
|
||||
#define __BYTE_SWAP_U32_VARIABLE bswap32
|
||||
#endif
|
||||
|
||||
#ifndef __BYTE_SWAP_U16_VARIABLE
|
||||
#define __BYTE_SWAP_U16_VARIABLE bswap16
|
||||
#endif
|
||||
|
||||
#define __byte_swap_u64_constant(x) \
|
||||
(__CAST(uint64_t, \
|
||||
((((x) & 0xff00000000000000ull) >> 56) | \
|
||||
(((x) & 0x00ff000000000000ull) >> 40) | \
|
||||
(((x) & 0x0000ff0000000000ull) >> 24) | \
|
||||
(((x) & 0x000000ff00000000ull) >> 8) | \
|
||||
(((x) & 0x00000000ff000000ull) << 8) | \
|
||||
(((x) & 0x0000000000ff0000ull) << 24) | \
|
||||
(((x) & 0x000000000000ff00ull) << 40) | \
|
||||
(((x) & 0x00000000000000ffull) << 56))))
|
||||
|
||||
#define __byte_swap_u32_constant(x) \
|
||||
(__CAST(uint32_t, \
|
||||
((((x) & 0xff000000) >> 24) | \
|
||||
(((x) & 0x00ff0000) >> 8) | \
|
||||
(((x) & 0x0000ff00) << 8) | \
|
||||
(((x) & 0x000000ff) << 24))))
|
||||
|
||||
#define __byte_swap_u16_constant(x) \
|
||||
(__CAST(uint16_t, \
|
||||
((((x) & 0xff00) >> 8) | \
|
||||
(((x) & 0x00ff) << 8))))
|
||||
|
||||
#define bswap64(x) \
|
||||
(__builtin_constant_p((x)) ? \
|
||||
__byte_swap_u64_constant(x) : __BYTE_SWAP_U64_VARIABLE(x))
|
||||
|
||||
#define bswap32(x) \
|
||||
(__builtin_constant_p((x)) ? \
|
||||
__byte_swap_u32_constant(x) : __BYTE_SWAP_U32_VARIABLE(x))
|
||||
|
||||
#define bswap16(x) \
|
||||
(__builtin_constant_p((x)) ? \
|
||||
__byte_swap_u16_constant(x) : __BYTE_SWAP_U16_VARIABLE(x))
|
||||
|
||||
#endif /* __GNUC__ && __OPTIMIZE__ */
|
||||
#endif /* !_LOCORE */
|
||||
|
||||
#endif /* !_SYS_BSWAP_H_ */
|
||||
+59
-41
@@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cdefs.h,v 1.78 2009/10/02 21:05:28 christos Exp $ */
|
||||
/* $NetBSD: cdefs.h,v 1.81 2010/12/25 22:30:52 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991, 1993
|
||||
@@ -56,33 +56,19 @@
|
||||
#define __GNUC_PREREQ__(x, y) 0
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#include <machine/cdefs.h>
|
||||
#ifdef __ELF__
|
||||
#include <sys/cdefs_elf.h>
|
||||
#else
|
||||
#include <sys/cdefs_aout.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#define __BEGIN_DECLS extern "C" {
|
||||
#define __END_DECLS }
|
||||
#define __static_cast(x,y) static_cast<x>(y)
|
||||
#else
|
||||
#define __BEGIN_DECLS
|
||||
#define __END_DECLS
|
||||
#define __static_cast(x,y) (x)y
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The __CONCAT macro is used to concatenate parts of symbol names, e.g.
|
||||
* with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
|
||||
* The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
|
||||
* mode -- there must be no spaces between its arguments, and for nested
|
||||
* __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also
|
||||
* concatenate double-quoted strings produced by the __STRING macro, but
|
||||
* this only works with ANSI C.
|
||||
* The __CONCAT macro is a bit tricky -- make sure you don't put spaces
|
||||
* in between its arguments. __CONCAT can also concatenate double-quoted
|
||||
* strings produced by the __STRING macro, but this only works with ANSI C.
|
||||
*/
|
||||
|
||||
#define ___STRING(x) __STRING(x)
|
||||
@@ -90,8 +76,7 @@
|
||||
|
||||
#if __STDC__ || defined(__cplusplus)
|
||||
#define __P(protos) protos /* full-blown ANSI C */
|
||||
#define __CONCAT1(x,y) x ## y
|
||||
#define __CONCAT(x,y) __CONCAT1(x,y)
|
||||
#define __CONCAT(x,y) x ## y
|
||||
#define __STRING(x) #x
|
||||
|
||||
#define __const const /* define reserved names to standard */
|
||||
@@ -233,6 +218,54 @@
|
||||
#define __used __unused
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#define __BEGIN_EXTERN_C extern "C" {
|
||||
#define __END_EXTERN_C }
|
||||
#define __static_cast(x,y) static_cast<x>(y)
|
||||
#else
|
||||
#define __BEGIN_EXTERN_C
|
||||
#define __END_EXTERN_C
|
||||
#define __static_cast(x,y) (x)y
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(4, 0)
|
||||
# define __dso_public __attribute__((__visibility__("default")))
|
||||
# define __dso_hidden __attribute__((__visibility__("hidden")))
|
||||
# define __BEGIN_PUBLIC_DECLS \
|
||||
_Pragma("GCC visibility push(default)") __BEGIN_EXTERN_C
|
||||
# define __END_PUBLIC_DECLS __END_EXTERN_C _Pragma("GCC visibility pop")
|
||||
# define __BEGIN_HIDDEN_DECLS \
|
||||
_Pragma("GCC visibility push(hidden)") __BEGIN_EXTERN_C
|
||||
# define __END_HIDDEN_DECLS __END_EXTERN_C _Pragma("GCC visibility pop")
|
||||
#else
|
||||
# define __dso_public
|
||||
# define __dso_hidden
|
||||
# define __BEGIN_PUBLIC_DECLS __BEGIN_EXTERN_C
|
||||
# define __END_PUBLIC_DECLS __END_EXTERN_C
|
||||
# define __BEGIN_HIDDEN_DECLS __BEGIN_EXTERN_C
|
||||
# define __END_HIDDEN_DECLS __END_EXTERN_C
|
||||
#endif
|
||||
|
||||
#define __BEGIN_DECLS __BEGIN_PUBLIC_DECLS
|
||||
#define __END_DECLS __END_PUBLIC_DECLS
|
||||
|
||||
/*
|
||||
* Non-static C99 inline functions are optional bodies. They don't
|
||||
* create global symbols if not used, but can be replaced if desirable.
|
||||
* This differs from the behavior of GCC before version 4.3. The nearest
|
||||
* equivalent for older GCC is `extern inline'. For newer GCC, use the
|
||||
* gnu_inline attribute additionally to get the old behavior.
|
||||
*
|
||||
* For C99 compilers other than GCC, the C99 behavior is expected.
|
||||
*/
|
||||
#if defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)
|
||||
#define __c99inline extern __attribute__((__gnu_inline__)) __inline
|
||||
#elif defined(__GNUC__)
|
||||
#define __c99inline extern __inline
|
||||
#elif defined(__STDC_VERSION__)
|
||||
#define __c99inline __inline
|
||||
#endif
|
||||
|
||||
#if defined(__lint__)
|
||||
#define __packed __packed
|
||||
#define __aligned(x) /* delete */
|
||||
@@ -284,7 +317,6 @@
|
||||
#endif /* NO_KERNEL_RCSIDS */
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#if 0
|
||||
#if !defined(_STANDALONE) && !defined(_KERNEL)
|
||||
#if defined(__GNUC__) || defined(__PCC__)
|
||||
#define __RENAME(x) ___RENAME(x)
|
||||
@@ -298,7 +330,7 @@
|
||||
#else /* _STANDALONE || _KERNEL */
|
||||
#define __RENAME(x) no renaming in kernel or standalone environment
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A barrier to stop the optimizer from moving code or assume live
|
||||
* register values. This is gcc specific, the version is more or less
|
||||
@@ -346,25 +378,6 @@
|
||||
#define __predict_false(exp) (exp)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
|
||||
* require it.
|
||||
*/
|
||||
#if __GNUC_PREREQ__(4, 1)
|
||||
#define __offsetof(type, field) __builtin_offsetof(type, field)
|
||||
#else
|
||||
#ifndef __cplusplus
|
||||
#define __offsetof(type, field) ((size_t)(&((type *)0)->field))
|
||||
#else
|
||||
#define __offsetof(type, field) \
|
||||
(__offsetof__ (reinterpret_cast <size_t> \
|
||||
(&reinterpret_cast <const volatile char &> \
|
||||
(static_cast<type *> (0)->field))))
|
||||
#endif
|
||||
#endif
|
||||
#define __rangeof(type, start, end) \
|
||||
(__offsetof(type, end) - __offsetof(type, start))
|
||||
|
||||
/*
|
||||
* Compiler-dependent macros to declare that functions take printf-like
|
||||
* or scanf-like arguments. They are null except for versions of gcc
|
||||
@@ -469,4 +482,9 @@
|
||||
#define __CAST(__dt, __st) ((__dt)(__st))
|
||||
#endif
|
||||
|
||||
#ifdef _MINIX
|
||||
/* If compiling in Minix tree, Minix ANSI definitions are always useful. */
|
||||
#include <minix/ansi.h>
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_CDEFS_H_ */
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/* $NetBSD: cdefs_aout.h,v 1.20 2006/05/18 17:55:38 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Written by J.T. Conklin <jtc@wimsey.com> 01/17/95.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CDEFS_AOUT_H_
|
||||
#define _SYS_CDEFS_AOUT_H_
|
||||
|
||||
#define _C_LABEL(x) __CONCAT(_,x)
|
||||
#define _C_LABEL_STRING(x) "_"x
|
||||
|
||||
#if __STDC__
|
||||
#define ___RENAME(x) __asm(___STRING(_C_LABEL(x)))
|
||||
#else
|
||||
#define ___RENAME(x) ____RENAME(_/**/x)
|
||||
#define ____RENAME(x) __asm(___STRING(x))
|
||||
#endif
|
||||
|
||||
#define __indr_reference(sym,alias) /* nada, since we do weak refs */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#if __STDC__
|
||||
#define __strong_alias(alias,sym) \
|
||||
__asm(".global " _C_LABEL_STRING(#alias) "\n" \
|
||||
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
|
||||
#define __weak_alias(alias,sym) \
|
||||
__asm(".weak " _C_LABEL_STRING(#alias) "\n" \
|
||||
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
|
||||
|
||||
/* Do not use __weak_extern, use __weak_reference instead */
|
||||
#define __weak_extern(sym) \
|
||||
__asm(".weak " _C_LABEL_STRING(#sym));
|
||||
|
||||
#if __GNUC_PREREQ__(4, 0)
|
||||
#define __weak_reference(sym) __attribute__((__weakref__))
|
||||
#else
|
||||
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
|
||||
#endif
|
||||
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm(".stabs \"" msg "\",30,0,0,0"); \
|
||||
__asm(".stabs \"_" #sym "\",1,0,0,0");
|
||||
#else /* __STDC__ */
|
||||
#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
|
||||
#define ___weak_alias(alias,sym) \
|
||||
__asm(".weak alias\nalias = sym");
|
||||
/* Do not use __weak_extern, use __weak_reference instead */
|
||||
#define __weak_extern(sym) ___weak_extern(_/**/sym)
|
||||
#define ___weak_extern(sym) \
|
||||
__asm(".weak sym");
|
||||
|
||||
#if __GNUC_PREREQ__(4, 0)
|
||||
#define __weak_reference(sym) __attribute__((__weakref__))
|
||||
#else
|
||||
#define ___weak_reference(sym) ; __asm(".weak sym");
|
||||
#define __weak_reference(sym) ___weak_reference(_/**/sym)
|
||||
#endif
|
||||
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm(".stabs msg,30,0,0,0"); \
|
||||
__asm(".stabs \"_/**/sym\",1,0,0,0");
|
||||
#endif /* __STDC__ */
|
||||
#else /* __GNUC__ */
|
||||
#define __warn_references(sym,msg)
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#if defined(__sh__) /* XXX SH COFF */
|
||||
#undef __indr_reference(sym,alias)
|
||||
#undef __warn_references(sym,msg)
|
||||
#define __warn_references(sym,msg)
|
||||
#endif
|
||||
|
||||
#define __IDSTRING(_n,_s) \
|
||||
__asm(".data ; .asciz \"" _s "\" ; .text")
|
||||
|
||||
#undef __KERNEL_RCSID
|
||||
|
||||
#define __RCSID(_s) __IDSTRING(rcsid,_s)
|
||||
#define __SCCSID(_s)
|
||||
#define __SCCSID2(_s)
|
||||
#if 0 /* XXX userland __COPYRIGHTs have \ns in them */
|
||||
#define __COPYRIGHT(_s) __IDSTRING(copyright,_s)
|
||||
#else
|
||||
#define __COPYRIGHT(_s) \
|
||||
static const char copyright[] __attribute__((__unused__)) = _s
|
||||
#endif
|
||||
|
||||
#if defined(USE_KERNEL_RCSIDS) || !defined(_KERNEL)
|
||||
#define __KERNEL_RCSID(_n,_s) __IDSTRING(__CONCAT(rcsid,_n),_s)
|
||||
#else
|
||||
#define __KERNEL_RCSID(_n,_s)
|
||||
#endif
|
||||
#define __KERNEL_SCCSID(_n,_s)
|
||||
#define __KERNEL_COPYRIGHT(_n, _s) __IDSTRING(__CONCAT(copyright,_n),_s)
|
||||
|
||||
#ifndef __lint__
|
||||
#define __link_set_make_entry(set, sym, type) \
|
||||
static void const * const \
|
||||
__link_set_##set##_sym_##sym __used = &sym; \
|
||||
__asm(".stabs \"___link_set_" #set "\", " #type ", 0, 0, _" #sym)
|
||||
#else
|
||||
#define __link_set_make_entry(set, sym, type) \
|
||||
extern void const * const __link_set_##set##_sym_##sym
|
||||
#endif /* __lint__ */
|
||||
|
||||
#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym, 23)
|
||||
#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym, 23)
|
||||
#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym, 25)
|
||||
#define __link_set_add_bss(set, sym) __link_set_make_entry(set, sym, 27)
|
||||
|
||||
#ifdef __minix
|
||||
/* GNU binutils 2.x doesn't support a.out link sets. We need to workaround
|
||||
* this by explicitely creating the N_SETV structure. */
|
||||
#define __link_set_decl(set, ptype)
|
||||
#else
|
||||
#define __link_set_decl(set, ptype) \
|
||||
extern struct { \
|
||||
int __ls_length; \
|
||||
ptype *__ls_items[1]; \
|
||||
} __link_set_##set
|
||||
#endif /* !__minix */
|
||||
|
||||
#define __link_set_start(set) (&(__link_set_##set).__ls_items[0])
|
||||
#define __link_set_end(set) \
|
||||
(&(__link_set_##set).__ls_items[(__link_set_##set).__ls_length])
|
||||
|
||||
#define __link_set_count(set) ((__link_set_##set).__ls_length)
|
||||
|
||||
#endif /* !_SYS_CDEFS_AOUT_H_ */
|
||||
@@ -0,0 +1,208 @@
|
||||
/* $NetBSD: cdefs_elf.h,v 1.34 2010/12/08 01:18:55 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CDEFS_ELF_H_
|
||||
#define _SYS_CDEFS_ELF_H_
|
||||
|
||||
#ifdef __LEADING_UNDERSCORE
|
||||
#define _C_LABEL(x) __CONCAT(_,x)
|
||||
#define _C_LABEL_STRING(x) "_"x
|
||||
#else
|
||||
#define _C_LABEL(x) x
|
||||
#define _C_LABEL_STRING(x) x
|
||||
#endif
|
||||
|
||||
#if __STDC__
|
||||
#define ___RENAME(x) __asm(___STRING(_C_LABEL(x)))
|
||||
#else
|
||||
#ifdef __LEADING_UNDERSCORE
|
||||
#define ___RENAME(x) ____RENAME(_/**/x)
|
||||
#define ____RENAME(x) __asm(___STRING(x))
|
||||
#else
|
||||
#define ___RENAME(x) __asm(___STRING(x))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __indr_reference(sym,alias) /* nada, since we do weak refs */
|
||||
|
||||
#if __STDC__
|
||||
#define __strong_alias(alias,sym) \
|
||||
__asm(".global " _C_LABEL_STRING(#alias) "\n" \
|
||||
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
|
||||
|
||||
#define __weak_alias(alias,sym) \
|
||||
__asm(".weak " _C_LABEL_STRING(#alias) "\n" \
|
||||
_C_LABEL_STRING(#alias) " = " _C_LABEL_STRING(#sym));
|
||||
|
||||
/* Do not use __weak_extern, use __weak_reference instead */
|
||||
#define __weak_extern(sym) \
|
||||
__asm(".weak " _C_LABEL_STRING(#sym));
|
||||
|
||||
#if __GNUC_PREREQ__(4, 0) && !defined(__minix)
|
||||
#define __weak_reference(sym) __attribute__((__weakref__))
|
||||
#else
|
||||
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym))
|
||||
#endif
|
||||
|
||||
#if defined(__clang__)
|
||||
#define __warn_references(sym,msg) \
|
||||
static __attribute__((__used__, __section__(".gnu.warning." #sym))) \
|
||||
const char ___CONCAT(__warn_reference_##sym,__COUNTER__)[] = msg;
|
||||
#else
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm(".pushsection .gnu.warning." #sym "\n" \
|
||||
".ascii \"" msg "\"\n" \
|
||||
".popsection");
|
||||
#endif
|
||||
|
||||
#else /* !__STDC__ */
|
||||
|
||||
#ifdef __LEADING_UNDERSCORE
|
||||
#define __weak_alias(alias,sym) ___weak_alias(_/**/alias,_/**/sym)
|
||||
#define ___weak_alias(alias,sym) \
|
||||
__asm(".weak alias\nalias = sym");
|
||||
#else
|
||||
#define __weak_alias(alias,sym) \
|
||||
__asm(".weak alias\nalias = sym");
|
||||
#endif
|
||||
#ifdef __LEADING_UNDERSCORE
|
||||
#define __weak_extern(sym) ___weak_extern(_/**/sym)
|
||||
#define ___weak_extern(sym) \
|
||||
__asm(".weak sym");
|
||||
#else
|
||||
#define __weak_extern(sym) \
|
||||
__asm(".weak sym");
|
||||
#endif
|
||||
#define __warn_references(sym,msg) \
|
||||
__asm(".pushsection .gnu.warning.sym\n" \
|
||||
".ascii \"" msg "\"\n" \
|
||||
".popsection");
|
||||
|
||||
#endif /* !__STDC__ */
|
||||
|
||||
#if defined(__clang__)
|
||||
#define __SECTIONSTRING(_sec, _str) \
|
||||
static __attribute__((__used__, __section__(#_sec))) const char \
|
||||
___CONCAT(__sectstr,__COUNTER__)[] = _str
|
||||
#elif __STDC__
|
||||
#define __SECTIONSTRING(_sec, _str) \
|
||||
__asm(".pushsection " #_sec "\n" \
|
||||
".asciz \"" _str "\"\n" \
|
||||
".popsection")
|
||||
#else
|
||||
#define __SECTIONSTRING(_sec, _str) \
|
||||
__asm(".pushsection _sec\n" \
|
||||
".asciz \"" _str "\"\n" \
|
||||
".popsection")
|
||||
#endif
|
||||
|
||||
#define __IDSTRING(_n,_s) __SECTIONSTRING(.ident,_s)
|
||||
|
||||
#define __RCSID(_s) __IDSTRING(rcsid,_s)
|
||||
#define __SCCSID(_s)
|
||||
#define __SCCSID2(_s)
|
||||
#define __COPYRIGHT(_s) __SECTIONSTRING(.copyright,_s)
|
||||
|
||||
#define __KERNEL_RCSID(_n, _s) __RCSID(_s)
|
||||
#define __KERNEL_SCCSID(_n, _s)
|
||||
#define __KERNEL_COPYRIGHT(_n, _s) __COPYRIGHT(_s)
|
||||
|
||||
#ifndef __lint__
|
||||
#define __link_set_make_entry(set, sym) \
|
||||
static void const * const __link_set_##set##_sym_##sym \
|
||||
__section("link_set_" #set) __used = &sym
|
||||
#define __link_set_make_entry2(set, sym, n) \
|
||||
static void const * const __link_set_##set##_sym_##sym##_##n \
|
||||
__section("link_set_" #set) __used = &sym[n]
|
||||
#else
|
||||
#define __link_set_make_entry(set, sym) \
|
||||
extern void const * const __link_set_##set##_sym_##sym
|
||||
#define __link_set_make_entry2(set, sym, n) \
|
||||
extern void const * const __link_set_##set##_sym_##sym##_##n
|
||||
#endif /* __lint__ */
|
||||
|
||||
#define __link_set_add_text(set, sym) __link_set_make_entry(set, sym)
|
||||
#define __link_set_add_rodata(set, sym) __link_set_make_entry(set, sym)
|
||||
#define __link_set_add_data(set, sym) __link_set_make_entry(set, sym)
|
||||
#define __link_set_add_bss(set, sym) __link_set_make_entry(set, sym)
|
||||
#define __link_set_add_text2(set, sym, n) __link_set_make_entry2(set, sym, n)
|
||||
#define __link_set_add_rodata2(set, sym, n) __link_set_make_entry2(set, sym, n)
|
||||
#define __link_set_add_data2(set, sym, n) __link_set_make_entry2(set, sym, n)
|
||||
#define __link_set_add_bss2(set, sym, n) __link_set_make_entry2(set, sym, n)
|
||||
|
||||
#define __link_set_decl(set, ptype) \
|
||||
extern ptype * const __start_link_set_##set[]; \
|
||||
extern ptype * const __stop_link_set_##set[] \
|
||||
|
||||
#define __link_set_start(set) (__start_link_set_##set)
|
||||
#define __link_set_end(set) (__stop_link_set_##set)
|
||||
|
||||
#define __link_set_count(set) \
|
||||
(__link_set_end(set) - __link_set_start(set))
|
||||
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/*
|
||||
* On multiprocessor systems we can gain an improvement in performance
|
||||
* by being mindful of which cachelines data is placed in.
|
||||
*
|
||||
* __read_mostly:
|
||||
*
|
||||
* It makes sense to ensure that rarely modified data is not
|
||||
* placed in the same cacheline as frequently modified data.
|
||||
* To mitigate the phenomenon known as "false-sharing" we
|
||||
* can annotate rarely modified variables with __read_mostly.
|
||||
* All such variables are placed into the .data.read_mostly
|
||||
* section in the kernel ELF.
|
||||
*
|
||||
* Prime candidates for __read_mostly annotation are variables
|
||||
* which are hardly ever modified and which are used in code
|
||||
* hot-paths, e.g. pmap_initialized.
|
||||
*
|
||||
* __cacheline_aligned:
|
||||
*
|
||||
* Some data structures (mainly locks) benefit from being aligned
|
||||
* on a cacheline boundary, and having a cacheline to themselves.
|
||||
* This way, the modification of other data items cannot adversely
|
||||
* affect the lock and vice versa.
|
||||
*
|
||||
* Any variables annotated with __cacheline_aligned will be
|
||||
* placed into the .data.cacheline_aligned ELF section.
|
||||
*/
|
||||
#define __read_mostly \
|
||||
__attribute__((__section__(".data.read_mostly")))
|
||||
|
||||
#define __cacheline_aligned \
|
||||
__attribute__((__aligned__(COHERENCY_UNIT) \
|
||||
__section__(".data.cacheline_aligned")))
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_SYS_CDEFS_ELF_H_ */
|
||||
@@ -0,0 +1,56 @@
|
||||
/* $NetBSD: ctype_bits.h,v 1.2 2010/12/14 02:28:57 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ctype.h 5.3 (Berkeley) 4/3/91
|
||||
* NetBSD: ctype.h,v 1.30 2010/05/22 06:38:15 tnozaki Exp
|
||||
*/
|
||||
|
||||
#ifndef _SYS_CTYPE_BITS_H_
|
||||
#define _SYS_CTYPE_BITS_H_
|
||||
|
||||
#define _CTYPE_U 0x01
|
||||
#define _CTYPE_L 0x02
|
||||
#define _CTYPE_N 0x04
|
||||
#define _CTYPE_S 0x08
|
||||
#define _CTYPE_P 0x10
|
||||
#define _CTYPE_C 0x20
|
||||
#define _CTYPE_X 0x40
|
||||
#define _CTYPE_B 0x80
|
||||
|
||||
extern const unsigned char *_ctype_;
|
||||
extern const short *_tolower_tab_;
|
||||
extern const short *_toupper_tab_;
|
||||
|
||||
#endif /* !_SYS_CTYPE_BITS_H_ */
|
||||
@@ -0,0 +1,82 @@
|
||||
/* $NetBSD: ctype_inline.h,v 1.2 2010/12/14 02:28:57 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ctype.h 5.3 (Berkeley) 4/3/91
|
||||
* NetBSD: ctype.h,v 1.30 2010/05/22 06:38:15 tnozaki Exp
|
||||
*/
|
||||
|
||||
#ifndef _CTYPE_INLINE_H_
|
||||
#define _CTYPE_INLINE_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#include <sys/ctype_bits.h>
|
||||
|
||||
#define isdigit(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_N))
|
||||
#define islower(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_L))
|
||||
#define isspace(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_S))
|
||||
#define ispunct(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_P))
|
||||
#define isupper(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_U))
|
||||
#define isalpha(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & (_CTYPE_U|_CTYPE_L)))
|
||||
#define isxdigit(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & (_CTYPE_N|_CTYPE_X)))
|
||||
#define isalnum(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & (_CTYPE_U|_CTYPE_L|_CTYPE_N)))
|
||||
#define isprint(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N|_CTYPE_B)))
|
||||
#define isgraph(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & (_CTYPE_P|_CTYPE_U|_CTYPE_L|_CTYPE_N)))
|
||||
#define iscntrl(c) ((int)((_ctype_ + 1)[(unsigned char)(c)] & _CTYPE_C))
|
||||
#define tolower(c) ((int)((_tolower_tab_ + 1)[(unsigned char)(c)]))
|
||||
#define toupper(c) ((int)((_toupper_tab_ + 1)[(unsigned char)(c)]))
|
||||
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#define isascii(c) ((unsigned)(c) <= 0177)
|
||||
#define toascii(c) ((c) & 0177)
|
||||
#define _tolower(c) ((c) - 'A' + 'a')
|
||||
#define _toupper(c) ((c) - 'a' + 'A')
|
||||
#endif
|
||||
|
||||
#if defined(_ISO_C99_SOURCE) || (_POSIX_C_SOURCE - 0) > 200112L || \
|
||||
(_XOPEN_SOURCE - 0) > 600 || defined(_NETBSD_SOURCE)
|
||||
|
||||
/*
|
||||
* isblank() is implemented as C function, due to insufficient bitwidth in
|
||||
* _ctype_. Note that _B does not mean isblank - it means isprint && !isgraph.
|
||||
*/
|
||||
#if 0
|
||||
#define isblank(c) ((int)((_ctype_ + 1)[(c)] & _B))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_CTYPE_INLINE_H_ */
|
||||
@@ -0,0 +1,65 @@
|
||||
#ifndef _SYS_DIRENT_H_
|
||||
#define _SYS_DIRENT_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
#include <minix/dirent.h>
|
||||
|
||||
/*
|
||||
* The dirent structure defines the format of directory entries returned by
|
||||
* the getdents(2) system call.
|
||||
*/
|
||||
|
||||
struct dirent { /* Largest entry (8 slots) */
|
||||
ino_t d_ino; /* I-node number */
|
||||
off_t d_off; /* Offset in directory */
|
||||
unsigned short d_reclen; /* Length of this record */
|
||||
char d_name[1]; /* Null terminated name */
|
||||
};
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define MAXNAMLEN 511
|
||||
#define d_fileno d_ino
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* The _DIRENT_ALIGN macro returns the alignment of struct dirent. It
|
||||
* is used to check for bogus pointers and to calculate in advance the
|
||||
* memory required to store a dirent.
|
||||
* Unfortunately Minix doesn't use any standard alignment in dirents
|
||||
* at the moment, so, in order to calculate a safe dirent size, we add
|
||||
* an arbitrary number of bytes to the structure (_DIRENT_PAD), and we
|
||||
* set _DIRENT_ALIGN to zero to pass the pointers checks.
|
||||
* Please, FIXME.
|
||||
*/
|
||||
#define _DIRENT_ALIGN(dp) 0
|
||||
#define _DIRENT_PAD 64
|
||||
/*
|
||||
* The _DIRENT_NAMEOFF macro returns the offset of the d_name field in
|
||||
* struct dirent
|
||||
*/
|
||||
#define _DIRENT_NAMEOFF(dp) \
|
||||
((char *)(void *)&(dp)->d_name - (char *)(void *)dp)
|
||||
/*
|
||||
* The _DIRENT_RECLEN macro gives the minimum record length which will hold
|
||||
* a name of size "namlen".
|
||||
*/
|
||||
#define _DIRENT_RECLEN(dp, namlen) \
|
||||
((_DIRENT_NAMEOFF(dp) + (namlen) + 1 + _DIRENT_PAD + _DIRENT_ALIGN(dp)) & \
|
||||
~_DIRENT_ALIGN(dp))
|
||||
/*
|
||||
* The _DIRENT_SIZE macro returns the minimum record length required for
|
||||
* name name stored in the current record.
|
||||
*/
|
||||
#define _DIRENT_SIZE(dp) _DIRENT_RECLEN(dp, strlen(dp->d_name))
|
||||
/*
|
||||
* The _DIRENT_NEXT macro advances to the next dirent record.
|
||||
*/
|
||||
#define _DIRENT_NEXT(dp) ((void *)((char *)(void *)(dp) + (dp)->d_reclen))
|
||||
/*
|
||||
* The _DIRENT_MINSIZE returns the size of an empty (invalid) record.
|
||||
*/
|
||||
#define _DIRENT_MINSIZE(dp) _DIRENT_RECLEN(dp, 0)
|
||||
|
||||
#endif /* !_SYS_DIRENT_H_ */
|
||||
@@ -0,0 +1,340 @@
|
||||
/* $NetBSD: endian.h,v 1.28 2009/08/08 21:23:15 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1987, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)endian.h 8.1 (Berkeley) 6/11/93
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ENDIAN_H_
|
||||
#define _SYS_ENDIAN_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/*
|
||||
* Definitions for byte order, according to byte significance from low
|
||||
* address to high.
|
||||
*/
|
||||
#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
|
||||
#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
|
||||
#define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
|
||||
|
||||
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#ifndef _LOCORE
|
||||
|
||||
/* C-family endian-ness definitions */
|
||||
|
||||
#include <sys/ansi.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef in_addr_t
|
||||
typedef __in_addr_t in_addr_t;
|
||||
#define in_addr_t __in_addr_t
|
||||
#endif
|
||||
|
||||
#ifndef in_port_t
|
||||
typedef __in_port_t in_port_t;
|
||||
#define in_port_t __in_port_t
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
uint32_t htonl(uint32_t) __constfunc;
|
||||
uint16_t htons(uint16_t) __constfunc;
|
||||
uint32_t ntohl(uint32_t) __constfunc;
|
||||
uint16_t ntohs(uint16_t) __constfunc;
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_LOCORE */
|
||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
|
||||
|
||||
#include <machine/endian_machdep.h>
|
||||
|
||||
/*
|
||||
* Define the order of 32-bit words in 64-bit words.
|
||||
*/
|
||||
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
#define _QUAD_HIGHWORD 1
|
||||
#define _QUAD_LOWWORD 0
|
||||
#endif
|
||||
|
||||
#if _BYTE_ORDER == _BIG_ENDIAN
|
||||
#define _QUAD_HIGHWORD 0
|
||||
#define _QUAD_LOWWORD 1
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* Traditional names for byteorder. These are defined as the numeric
|
||||
* sequences so that third party code can "#define XXX_ENDIAN" and not
|
||||
* cause errors.
|
||||
*/
|
||||
#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
|
||||
#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
|
||||
#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
|
||||
#define BYTE_ORDER _BYTE_ORDER
|
||||
|
||||
#ifndef _LOCORE
|
||||
|
||||
#include <machine/bswap.h>
|
||||
|
||||
/*
|
||||
* Macros for network/external number representation conversion.
|
||||
*/
|
||||
#if BYTE_ORDER == BIG_ENDIAN && !defined(__lint__)
|
||||
#define ntohl(x) (x)
|
||||
#define ntohs(x) (x)
|
||||
#define htonl(x) (x)
|
||||
#define htons(x) (x)
|
||||
|
||||
#define NTOHL(x) (void) (x)
|
||||
#define NTOHS(x) (void) (x)
|
||||
#define HTONL(x) (void) (x)
|
||||
#define HTONS(x) (void) (x)
|
||||
|
||||
#else /* LITTLE_ENDIAN || !defined(__lint__) */
|
||||
|
||||
#define ntohl(x) bswap32(__CAST(uint32_t, (x)))
|
||||
#define ntohs(x) bswap16(__CAST(uint16_t, (x)))
|
||||
#define htonl(x) bswap32(__CAST(uint32_t, (x)))
|
||||
#define htons(x) bswap16(__CAST(uint16_t, (x)))
|
||||
|
||||
#define NTOHL(x) (x) = ntohl(__CAST(uint32_t, (x)))
|
||||
#define NTOHS(x) (x) = ntohs(__CAST(uint16_t, (x)))
|
||||
#define HTONL(x) (x) = htonl(__CAST(uint32_t, (x)))
|
||||
#define HTONS(x) (x) = htons(__CAST(uint16_t, (x)))
|
||||
#endif /* LITTLE_ENDIAN || !defined(__lint__) */
|
||||
|
||||
/*
|
||||
* Macros to convert to a specific endianness.
|
||||
*/
|
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
|
||||
#define htobe16(x) (x)
|
||||
#define htobe32(x) (x)
|
||||
#define htobe64(x) (x)
|
||||
#define htole16(x) bswap16(__CAST(uint16_t, (x)))
|
||||
#define htole32(x) bswap32(__CAST(uint32_t, (x)))
|
||||
#define htole64(x) bswap64(__CAST(uint64_t, (x)))
|
||||
|
||||
#define HTOBE16(x) __CAST(void, (x))
|
||||
#define HTOBE32(x) __CAST(void, (x))
|
||||
#define HTOBE64(x) __CAST(void, (x))
|
||||
#define HTOLE16(x) (x) = bswap16(__CAST(uint16_t, (x)))
|
||||
#define HTOLE32(x) (x) = bswap32(__CAST(uint32_t, (x)))
|
||||
#define HTOLE64(x) (x) = bswap64(__CAST(uint64_t, (x)))
|
||||
|
||||
#else /* LITTLE_ENDIAN */
|
||||
|
||||
#define htobe16(x) bswap16(__CAST(uint16_t, (x)))
|
||||
#define htobe32(x) bswap32(__CAST(uint32_t, (x)))
|
||||
#define htobe64(x) bswap64(__CAST(uint64_t, (x)))
|
||||
#define htole16(x) (x)
|
||||
#define htole32(x) (x)
|
||||
#define htole64(x) (x)
|
||||
|
||||
#define HTOBE16(x) (x) = bswap16(__CAST(uint16_t, (x)))
|
||||
#define HTOBE32(x) (x) = bswap32(__CAST(uint32_t, (x)))
|
||||
#define HTOBE64(x) (x) = bswap64(__CAST(uint64_t, (x)))
|
||||
#define HTOLE16(x) __CAST(void, (x))
|
||||
#define HTOLE32(x) __CAST(void, (x))
|
||||
#define HTOLE64(x) __CAST(void, (x))
|
||||
|
||||
#endif /* LITTLE_ENDIAN */
|
||||
|
||||
#define be16toh(x) htobe16(x)
|
||||
#define be32toh(x) htobe32(x)
|
||||
#define be64toh(x) htobe64(x)
|
||||
#define le16toh(x) htole16(x)
|
||||
#define le32toh(x) htole32(x)
|
||||
#define le64toh(x) htole64(x)
|
||||
|
||||
#define BE16TOH(x) HTOBE16(x)
|
||||
#define BE32TOH(x) HTOBE32(x)
|
||||
#define BE64TOH(x) HTOBE64(x)
|
||||
#define LE16TOH(x) HTOLE16(x)
|
||||
#define LE32TOH(x) HTOLE32(x)
|
||||
#define LE64TOH(x) HTOLE64(x)
|
||||
|
||||
/*
|
||||
* Routines to encode/decode big- and little-endian multi-octet values
|
||||
* to/from an octet stream.
|
||||
*/
|
||||
|
||||
#if __GNUC_PREREQ__(2, 95)
|
||||
|
||||
#define __GEN_ENDIAN_ENC(bits, endian) \
|
||||
static __inline __unused void \
|
||||
endian ## bits ## enc(void *dst, uint ## bits ## _t u) \
|
||||
{ \
|
||||
u = hto ## endian ## bits (u); \
|
||||
__builtin_memcpy(dst, &u, sizeof(u)); \
|
||||
}
|
||||
|
||||
__GEN_ENDIAN_ENC(16, be)
|
||||
__GEN_ENDIAN_ENC(32, be)
|
||||
__GEN_ENDIAN_ENC(64, be)
|
||||
__GEN_ENDIAN_ENC(16, le)
|
||||
__GEN_ENDIAN_ENC(32, le)
|
||||
__GEN_ENDIAN_ENC(64, le)
|
||||
#undef __GEN_ENDIAN_ENC
|
||||
|
||||
#define __GEN_ENDIAN_DEC(bits, endian) \
|
||||
static __inline __unused uint ## bits ## _t \
|
||||
endian ## bits ## dec(const void *buf) \
|
||||
{ \
|
||||
uint ## bits ## _t u; \
|
||||
__builtin_memcpy(&u, buf, sizeof(u)); \
|
||||
return endian ## bits ## toh (u); \
|
||||
}
|
||||
|
||||
__GEN_ENDIAN_DEC(16, be)
|
||||
__GEN_ENDIAN_DEC(32, be)
|
||||
__GEN_ENDIAN_DEC(64, be)
|
||||
__GEN_ENDIAN_DEC(16, le)
|
||||
__GEN_ENDIAN_DEC(32, le)
|
||||
__GEN_ENDIAN_DEC(64, le)
|
||||
#undef __GEN_ENDIAN_DEC
|
||||
|
||||
#else /* !(GCC >= 2.95) */
|
||||
|
||||
static __inline void __unused
|
||||
be16enc(void *buf, uint16_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
p[0] = __CAST(uint8_t, ((__CAST(unsigned, u) >> 8) & 0xff));
|
||||
p[1] = __CAST(uint8_t, (u & 0xff));
|
||||
}
|
||||
|
||||
static __inline void __unused
|
||||
le16enc(void *buf, uint16_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
p[0] = __CAST(uint8_t, (u & 0xff));
|
||||
p[1] = __CAST(uint8_t, ((__CAST(unsigned, u) >> 8) & 0xff));
|
||||
}
|
||||
|
||||
static __inline uint16_t __unused
|
||||
be16dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = __CAST(const uint8_t *, buf);
|
||||
|
||||
return __CAST(uint16_t, ((p[0] << 8) | p[1]));
|
||||
}
|
||||
|
||||
static __inline uint16_t __unused
|
||||
le16dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = __CAST(const uint8_t *, buf);
|
||||
|
||||
return __CAST(uint16_t, ((p[1] << 8) | p[0]));
|
||||
}
|
||||
|
||||
static __inline void __unused
|
||||
be32enc(void *buf, uint32_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
p[0] = __CAST(uint8_t, ((u >> 24) & 0xff));
|
||||
p[1] = __CAST(uint8_t, ((u >> 16) & 0xff));
|
||||
p[2] = __CAST(uint8_t, ((u >> 8) & 0xff));
|
||||
p[3] = __CAST(uint8_t, (u & 0xff));
|
||||
}
|
||||
|
||||
static __inline void __unused
|
||||
le32enc(void *buf, uint32_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
p[0] = __CAST(uint8_t, (u & 0xff));
|
||||
p[1] = __CAST(uint8_t, ((u >> 8) & 0xff));
|
||||
p[2] = __CAST(uint8_t, ((u >> 16) & 0xff));
|
||||
p[3] = __CAST(uint8_t, ((u >> 24) & 0xff));
|
||||
}
|
||||
|
||||
static __inline uint32_t __unused
|
||||
be32dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = __CAST(const uint8_t *, buf);
|
||||
|
||||
return ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
|
||||
}
|
||||
|
||||
static __inline uint32_t __unused
|
||||
le32dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = __CAST(const uint8_t *, buf);
|
||||
|
||||
return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
|
||||
}
|
||||
|
||||
static __inline void __unused
|
||||
be64enc(void *buf, uint64_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
be32enc(p, __CAST(uint32_t, (u >> 32)));
|
||||
be32enc(p + 4, __CAST(uint32_t, (u & 0xffffffffULL)));
|
||||
}
|
||||
|
||||
static __inline void __unused
|
||||
le64enc(void *buf, uint64_t u)
|
||||
{
|
||||
uint8_t *p = __CAST(uint8_t *, buf);
|
||||
|
||||
le32enc(p, __CAST(uint32_t, (u & 0xffffffffULL)));
|
||||
le32enc(p + 4, __CAST(uint32_t, (u >> 32)));
|
||||
}
|
||||
|
||||
static __inline uint64_t __unused
|
||||
be64dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = (const uint8_t *)buf;
|
||||
|
||||
return ((__CAST(uint64_t, be32dec(p)) << 32) | be32dec(p + 4));
|
||||
}
|
||||
|
||||
static __inline uint64_t __unused
|
||||
le64dec(const void *buf)
|
||||
{
|
||||
const uint8_t *p = (const uint8_t *)buf;
|
||||
|
||||
return (le32dec(p) | (__CAST(uint64_t, le32dec(p + 4)) << 32));
|
||||
}
|
||||
|
||||
#endif /* GCC >= 2.95 */
|
||||
|
||||
#endif /* !_LOCORE */
|
||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
#endif /* !_SYS_ENDIAN_H_ */
|
||||
@@ -0,0 +1,176 @@
|
||||
/* The <errno.h> header defines the numbers of the various errors that can
|
||||
* occur during program execution. They are visible to user programs and
|
||||
* should be small positive integers. However, they are also used within
|
||||
* MINIX, where they must be negative. For example, the READ system call is
|
||||
* executed internally by calling do_read(). This function returns either a
|
||||
* (negative) error number or a (positive) number of bytes actually read.
|
||||
*
|
||||
* To solve the problem of having the error numbers be negative inside the
|
||||
* the system and positive outside, the following mechanism is used. All the
|
||||
* definitions are are the form:
|
||||
*
|
||||
* <define> EPERM (_SIGN 1 )
|
||||
*
|
||||
* If the macro _SYSTEM is defined, then _SIGN is set to "-", otherwise it is
|
||||
* set to "". Thus when compiling the operating system, the macro _SYSTEM
|
||||
* will be defined, setting EPERM to (- 1), whereas when when this
|
||||
* file is included in an ordinary user program, EPERM has the value ( 1).
|
||||
*/
|
||||
|
||||
#ifndef _ERRNO_H /* check if <errno.h> is already included */
|
||||
# define _ERRNO_H /* it is not included; note that fact */
|
||||
|
||||
/* Now define _SIGN as "" or "-" depending on _SYSTEM. */
|
||||
#ifdef _SYSTEM
|
||||
# define _SIGN -
|
||||
# define OK 0
|
||||
#else
|
||||
# define _SIGN
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define EPERM (_SIGN 1 ) /* operation not permitted */
|
||||
#define ENOENT (_SIGN 2 ) /* no such file or directory */
|
||||
#define ESRCH (_SIGN 3 ) /* no such process */
|
||||
#define EINTR (_SIGN 4 ) /* interrupted function call */
|
||||
#define EIO (_SIGN 5 ) /* input/output error */
|
||||
#define ENXIO (_SIGN 6 ) /* no such device or address */
|
||||
#define E2BIG (_SIGN 7 ) /* arg list too long */
|
||||
#define ENOEXEC (_SIGN 8 ) /* exec format error */
|
||||
#define EBADF (_SIGN 9 ) /* bad file descriptor */
|
||||
#define ECHILD (_SIGN 10 ) /* no child process */
|
||||
#define EAGAIN (_SIGN 11 ) /* resource temporarily unavailable */
|
||||
#define ENOMEM (_SIGN 12 ) /* not enough space */
|
||||
#define EACCES (_SIGN 13 ) /* permission denied */
|
||||
#define EFAULT (_SIGN 14 ) /* bad address */
|
||||
#define ENOTBLK (_SIGN 15 ) /* Extension: not a block special file */
|
||||
#define EBUSY (_SIGN 16 ) /* resource busy */
|
||||
#define EEXIST (_SIGN 17 ) /* file exists */
|
||||
#define EXDEV (_SIGN 18 ) /* improper link */
|
||||
#define ENODEV (_SIGN 19 ) /* no such device */
|
||||
#define ENOTDIR (_SIGN 20 ) /* not a directory */
|
||||
#define EISDIR (_SIGN 21 ) /* is a directory */
|
||||
#define EINVAL (_SIGN 22 ) /* invalid argument */
|
||||
#define ENFILE (_SIGN 23 ) /* too many open files in system */
|
||||
#define EMFILE (_SIGN 24 ) /* too many open files */
|
||||
#define ENOTTY (_SIGN 25 ) /* inappropriate I/O control operation */
|
||||
#define ETXTBSY (_SIGN 26 ) /* no longer used */
|
||||
#define EFBIG (_SIGN 27 ) /* file too large */
|
||||
#define ENOSPC (_SIGN 28 ) /* no space left on device */
|
||||
#define ESPIPE (_SIGN 29 ) /* invalid seek */
|
||||
#define EROFS (_SIGN 30 ) /* read-only file system */
|
||||
#define EMLINK (_SIGN 31 ) /* too many links */
|
||||
#define EPIPE (_SIGN 32 ) /* broken pipe */
|
||||
#define EDOM (_SIGN 33 ) /* domain error (from ANSI C std ) */
|
||||
#define ERANGE (_SIGN 34 ) /* result too large (from ANSI C std ) */
|
||||
#define EDEADLK (_SIGN 35 ) /* resource deadlock avoided */
|
||||
#define ENAMETOOLONG (_SIGN 36 ) /* file name too long */
|
||||
#define ENOLCK (_SIGN 37 ) /* no locks available */
|
||||
#define ENOSYS (_SIGN 38 ) /* function not implemented */
|
||||
#define ENOTEMPTY (_SIGN 39 ) /* directory not empty */
|
||||
#define ELOOP (_SIGN 40 ) /* too many levels of symlinks detected */
|
||||
#define ERESTART (_SIGN 41 ) /* service restarted */
|
||||
#define EIDRM (_SIGN 43 ) /* Identifier removed */
|
||||
#define EILSEQ (_SIGN 44 ) /* illegal byte sequence */
|
||||
#define ENOMSG (_SIGN 45 ) /* No message of desired type */
|
||||
#define EOVERFLOW (_SIGN 46 ) /* Value too large to be stored in data type */
|
||||
|
||||
/* The following errors relate to networking. */
|
||||
#define EPACKSIZE (_SIGN 50 ) /* invalid packet size for some protocol */
|
||||
#define ENOBUFS (_SIGN 51 ) /* not enough buffers left */
|
||||
#define EBADIOCTL (_SIGN 52 ) /* illegal ioctl for device */
|
||||
#define EBADMODE (_SIGN 53 ) /* badmode in ioctl */
|
||||
#define EWOULDBLOCK (_SIGN 54 ) /* call would block on nonblocking socket */
|
||||
#define ENETUNREACH (_SIGN 55 ) /* network unreachable */
|
||||
#define EHOSTUNREACH (_SIGN 56 ) /* host unreachable */
|
||||
#define EISCONN (_SIGN 57 ) /* already connected */
|
||||
#define EADDRINUSE (_SIGN 58 ) /* address in use */
|
||||
#define ECONNREFUSED (_SIGN 59 ) /* connection refused */
|
||||
#define ECONNRESET (_SIGN 60 ) /* connection reset */
|
||||
#define ETIMEDOUT (_SIGN 61 ) /* connection timed out */
|
||||
#define EURG (_SIGN 62 ) /* urgent data present */
|
||||
#define ENOURG (_SIGN 63 ) /* no urgent data present */
|
||||
#define ENOTCONN (_SIGN 64 ) /* no connection (yet or anymore ) */
|
||||
#define ESHUTDOWN (_SIGN 65 ) /* a write call to a shutdown connection */
|
||||
#define ENOCONN (_SIGN 66 ) /* no such connection */
|
||||
#define EAFNOSUPPORT (_SIGN 67 ) /* address family not supported */
|
||||
#define EPROTONOSUPPORT (_SIGN 68 ) /* protocol not supported by AF */
|
||||
#define EPROTOTYPE (_SIGN 69 ) /* Protocol wrong type for socket */
|
||||
#define EINPROGRESS (_SIGN 70 ) /* Operation now in progress */
|
||||
#define EADDRNOTAVAIL (_SIGN 71 ) /* Can't assign requested address */
|
||||
#define EALREADY (_SIGN 72 ) /* Connection already in progress */
|
||||
#define EMSGSIZE (_SIGN 73 ) /* Message too long */
|
||||
#define ENOTSOCK (_SIGN 74 ) /* Socket operation on non-socket */
|
||||
#define ENOPROTOOPT (_SIGN 75 ) /* Protocol not available */
|
||||
#define EOPNOTSUPP (_SIGN 76 ) /* Operation not supported */
|
||||
#define ENOTSUP ( EOPNOTSUPP ) /* Not supported */
|
||||
#define ENETDOWN (_SIGN 77 ) /* network is down */
|
||||
#define EPFNOSUPPORT (_SIGN 78 ) /* Protocol family not supported */
|
||||
#define EDESTADDRREQ (_SIGN 79 ) /* Destination address required */
|
||||
#define EHOSTDOWN (_SIGN 80 ) /* Host is down */
|
||||
#define ENETRESET (_SIGN 81 ) /* Network dropped connection on reset */
|
||||
#define ESOCKTNOSUPPORT (_SIGN 82 ) /* Socket type not supported */
|
||||
#define ECONNABORTED (_SIGN 83 ) /* Software caused connection abort */
|
||||
#define ETOOMANYREFS (_SIGN 84 ) /* Too many references: can't splice */
|
||||
|
||||
#define EGENERIC (_SIGN 99 ) /* generic error */
|
||||
|
||||
/* The following are not POSIX errors, but they can still happen.
|
||||
* All of these are generated by the kernel and relate to message passing.
|
||||
*/
|
||||
#define ELOCKED (_SIGN 101 ) /* can't send message due to deadlock */
|
||||
#define EBADCALL (_SIGN 102 ) /* illegal system call number */
|
||||
#define EBADSRCDST (_SIGN 103 ) /* bad source or destination process */
|
||||
#define ECALLDENIED (_SIGN 104 ) /* no permission for system call */
|
||||
#define EDEADSRCDST (_SIGN 105 ) /* source or destination is not alive */
|
||||
#define ENOTREADY (_SIGN 106 ) /* source or destination is not ready */
|
||||
#define EBADREQUEST (_SIGN 107 ) /* destination cannot handle request */
|
||||
#define ETRAPDENIED (_SIGN 110 ) /* IPC trap not allowed */
|
||||
|
||||
/* The following errors are NetBSD errors. */
|
||||
#define EFTYPE (_SIGN 150 ) /* Inappropriate file type or format */
|
||||
#define EAUTH (_SIGN 151 ) /* Authentication error */
|
||||
#define ENEEDAUTH (_SIGN 152 ) /* Need authenticator */
|
||||
/* Realtime option errors */
|
||||
#define ECANCELED (_SIGN 153 ) /* Operation canceled */
|
||||
|
||||
/* Network File System */
|
||||
#define ESTALE (_SIGN 160 ) /* Stale NFS file handle */
|
||||
#define EREMOTE (_SIGN 161 ) /* Too many levels of remote in path */
|
||||
#define EBADRPC (_SIGN 162 ) /* RPC struct is bad */
|
||||
#define ERPCMISMATCH (_SIGN 163 ) /* RPC version wrong */
|
||||
#define EPROGUNAVAIL (_SIGN 164 ) /* RPC prog. not avail */
|
||||
#define EPROGMISMATCH (_SIGN 165 ) /* Program version wrong */
|
||||
#define EPROCUNAVAIL (_SIGN 166 ) /* Bad procedure for program */
|
||||
|
||||
/* Realtime, XSI STREAMS option errors */
|
||||
#define EBADMSG (_SIGN 170 ) /* Bad or Corrupt message */
|
||||
|
||||
/* quotas & mush */
|
||||
#define EPROCLIM (_SIGN 175 ) /* Too many processes */
|
||||
#define EUSERS (_SIGN 176 ) /* Too many users */
|
||||
#define EDQUOT (_SIGN 177 ) /* Disc quota exceeded */
|
||||
|
||||
/* Realtime, XSI STREAMS option errors */
|
||||
#define EMULTIHOP (_SIGN 180 ) /* Multihop attempted */
|
||||
#define ENOLINK (_SIGN 181 ) /* Link has been severed */
|
||||
#define EPROTO (_SIGN 182 ) /* Protocol error */
|
||||
|
||||
/* File system extended attribute errors */
|
||||
#define ENOATTR (_SIGN 185 ) /* Attribute not found */
|
||||
|
||||
/* XSI STREAMS option errors */
|
||||
#define ENODATA (_SIGN 190 ) /* No message available */
|
||||
#define ENOSR (_SIGN 191 ) /* No STREAM resources */
|
||||
#define ENOSTR (_SIGN 192 ) /* Not a STREAM */
|
||||
#define ETIME (_SIGN 193 ) /* STREAM ioctl timeout */
|
||||
|
||||
#define EDONTREPLY (_SIGN 201 ) /* pseudo-code: don't send a reply */
|
||||
|
||||
/* The following are non-POSIX server responses */
|
||||
#define EBADEPT (_SIGN 301 ) /* specified endpoint is bad */
|
||||
#define EDEADEPT (_SIGN 302 ) /* specified endpoint is not alive */
|
||||
#define EBADCPU (_SIGN 303 ) /* requested CPU does not work */
|
||||
|
||||
#endif /* _ERRNO_H */
|
||||
@@ -0,0 +1,137 @@
|
||||
#ifndef _SYS_FCNTL_H_
|
||||
#define _SYS_FCNTL_H_
|
||||
|
||||
/*
|
||||
* This file includes the definitions for open and fcntl
|
||||
* described by POSIX for <fcntl.h>.
|
||||
*/
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/types.h>
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#include <sys/stat.h>
|
||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* File status flags: these are used by open(2), fcntl(2).
|
||||
* They are also used (indirectly) in the kernel file structure f_flags,
|
||||
* which is a superset of the open/fcntl flags. Open flags and f_flags
|
||||
* are inter-convertible using OFLAGS(fflags) and FFLAGS(oflags).
|
||||
* Open/fcntl flags begin with O_; kernel-internal flags begin with F.
|
||||
*/
|
||||
/* open-only flags */
|
||||
#define O_RDONLY 0x00000000 /* open for reading only */
|
||||
#define O_WRONLY 0x00000001 /* open for writing only */
|
||||
#define O_RDWR 0x00000002 /* open for reading and writing */
|
||||
#define O_ACCMODE 0x00000003 /* mask for above modes */
|
||||
|
||||
/* File status flags for open() and fcntl(). POSIX Table 6-5. */
|
||||
#define O_APPEND 02000 /* set append mode */
|
||||
#define O_NONBLOCK 04000 /* no delay */
|
||||
#define O_REOPEN 010000 /* automatically re-open device after driver
|
||||
* restart
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __minix /* NOT SUPPORTED! */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define O_SHLOCK 0x00000010 /* open with shared file lock */
|
||||
#define O_EXLOCK 0x00000020 /* open with exclusive file lock */
|
||||
#define O_ASYNC 0x00000040 /* signal pgrp when data ready */
|
||||
#endif
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || \
|
||||
(defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
#define O_SYNC 0x00000080 /* synchronous writes */
|
||||
#endif
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define O_NOFOLLOW 0x00000100 /* don't follow symlinks on the last */
|
||||
/* path component */
|
||||
#endif
|
||||
#endif /* !__minix */
|
||||
|
||||
/* Oflag values for open(). POSIX Table 6-4. */
|
||||
#define O_CREAT 00100 /* creat file if it doesn't exist */
|
||||
#define O_EXCL 00200 /* exclusive use flag */
|
||||
#define O_NOCTTY 00400 /* do not assign a controlling terminal */
|
||||
#define O_TRUNC 01000 /* truncate flag */
|
||||
|
||||
#ifndef __minix /* NOT SUPPORTED! */
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#define O_DSYNC 0x00010000 /* write: I/O data completion */
|
||||
#define O_RSYNC 0x00020000 /* read: I/O completion as for write */
|
||||
#endif
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define O_ALT_IO 0x00040000 /* use alternate i/o semantics */
|
||||
#define O_DIRECT 0x00080000 /* direct I/O hint */
|
||||
#endif
|
||||
#endif /* !__minix */
|
||||
|
||||
/*
|
||||
* Constants used for fcntl(2)
|
||||
*/
|
||||
|
||||
/* command values */
|
||||
/* These values are used for cmd in fcntl(). POSIX Table 6-1. */
|
||||
#define F_DUPFD 0 /* duplicate file descriptor */
|
||||
#define F_GETFD 1 /* get file descriptor flags */
|
||||
#define F_SETFD 2 /* set file descriptor flags */
|
||||
#define F_GETFL 3 /* get file status flags */
|
||||
#define F_SETFL 4 /* set file status flags */
|
||||
#define F_GETLK 5 /* get record locking information */
|
||||
#define F_SETLK 6 /* set record locking information */
|
||||
#define F_SETLKW 7 /* set record locking info; wait if blocked */
|
||||
#define F_FREESP 8 /* free a section of a regular file */
|
||||
|
||||
/* File descriptor flags used for fcntl(). POSIX Table 6-2. */
|
||||
#define FD_CLOEXEC 1 /* close on exec flag for third arg of fcntl */
|
||||
|
||||
/* record locking flags (F_GETLK, F_SETLK, F_SETLKW) */
|
||||
#define F_RDLCK 1 /* shared or read lock */
|
||||
#define F_WRLCK 2 /* exclusive or write lock */
|
||||
#define F_UNLCK 3 /* unlock */
|
||||
|
||||
/*
|
||||
* Advisory file segment locking data type -
|
||||
* information passed to system by user
|
||||
*/
|
||||
struct flock {
|
||||
short l_type; /* type: F_RDLCK, F_WRLCK, or F_UNLCK */
|
||||
short l_whence; /* flag for starting offset */
|
||||
off_t l_start; /* relative offset in bytes */
|
||||
off_t l_len; /* size; if 0, then until EOF */
|
||||
pid_t l_pid; /* process id of the locks' owner */
|
||||
};
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/* lock operations for flock(2) */
|
||||
#define LOCK_SH F_RDLCK /* Shared lock */
|
||||
#define LOCK_EX F_WRLCK /* Exclusive lock */
|
||||
#define LOCK_NB 0x0080 /* Do not block when locking */
|
||||
#define LOCK_UN F_UNLCK /* Unlock */
|
||||
#endif
|
||||
|
||||
/* Always ensure that these are consistent with <stdio.h> and <unistd.h>! */
|
||||
#ifndef SEEK_SET
|
||||
#define SEEK_SET 0 /* set file offset to offset */
|
||||
#endif
|
||||
#ifndef SEEK_CUR
|
||||
#define SEEK_CUR 1 /* set file offset to current plus offset */
|
||||
#endif
|
||||
#ifndef SEEK_END
|
||||
#define SEEK_END 2 /* set file offset to EOF plus offset */
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
int open(const char *, int, ...);
|
||||
int creat(const char *, mode_t);
|
||||
int fcntl(int, int, ...);
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
int flock(int, int);
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_FCNTL_H_ */
|
||||
@@ -0,0 +1,109 @@
|
||||
/* $NetBSD: fd_set.h,v 1.2 2005/12/11 12:25:20 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)types.h 8.4 (Berkeley) 1/21/94
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FD_SET_H_
|
||||
#define _SYS_FD_SET_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/syslimits.h>
|
||||
#include <machine/int_types.h>
|
||||
|
||||
/*
|
||||
* Implementation dependent defines, hidden from user space. X/Open does not
|
||||
* specify them.
|
||||
*/
|
||||
#define __NBBY 8 /* number of bits in a byte */
|
||||
typedef __int32_t __fd_mask;
|
||||
|
||||
/* bits per mask */
|
||||
#define __NFDBITS ((unsigned int)sizeof(__fd_mask) * __NBBY)
|
||||
|
||||
#define __howmany(x, y) (((x) + ((y) - 1)) / (y))
|
||||
|
||||
/*
|
||||
* Select uses bit masks of file descriptors in longs. These macros
|
||||
* manipulate such bit fields (the filesystem macros use chars).
|
||||
* FD_SETSIZE may be defined by the user, but the default here should
|
||||
* be enough for most uses.
|
||||
*/
|
||||
#ifndef FD_SETSIZE
|
||||
#define FD_SETSIZE __MINIX_OPEN_MAX
|
||||
#endif
|
||||
|
||||
typedef struct fd_set {
|
||||
__fd_mask fds_bits[__howmany(FD_SETSIZE, __NFDBITS)];
|
||||
} fd_set;
|
||||
|
||||
#define FD_SET(n, p) \
|
||||
((p)->fds_bits[(n)/__NFDBITS] |= (1 << ((n) % __NFDBITS)))
|
||||
#define FD_CLR(n, p) \
|
||||
((p)->fds_bits[(n)/__NFDBITS] &= ~(1 << ((n) % __NFDBITS)))
|
||||
#define FD_ISSET(n, p) \
|
||||
((p)->fds_bits[(n)/__NFDBITS] & (1 << ((n) % __NFDBITS)))
|
||||
#if __GNUC_PREREQ__(2, 95)
|
||||
#define FD_ZERO(p) (void)__builtin_memset((p), 0, sizeof(*(p)))
|
||||
#else
|
||||
#define FD_ZERO(p) do { \
|
||||
fd_set *__fds = (p); \
|
||||
unsigned int __i; \
|
||||
for (__i = 0; __i < __howmany(FD_SETSIZE, __NFDBITS); __i++) \
|
||||
__fds->fds_bits[__i] = 0; \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
#endif /* GCC 2.95 */
|
||||
|
||||
/*
|
||||
* Expose our internals if we are not required to hide them.
|
||||
*/
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
|
||||
#define fd_mask __fd_mask
|
||||
#define NFDBITS __NFDBITS
|
||||
#ifndef howmany
|
||||
#define howmany(a, b) __howmany(a, b)
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(2, 95)
|
||||
#define FD_COPY(f, t) (void)__builtin_memcpy((t), (f), sizeof(*(f)))
|
||||
#else
|
||||
#define FD_COPY(f, t) do { \
|
||||
fd_set *__f = (f), *__t = (t); \
|
||||
unsigned int __i; \
|
||||
for (__i = 0; __i < __howmany(FD_SETSIZE, __NFDBITS); __i++) \
|
||||
__t->fds_bits[__i] = __f->fds_bits[__i]; \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
#endif /* GCC 2.95 */
|
||||
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
#endif /* _SYS_FD_SET_H_ */
|
||||
@@ -0,0 +1,81 @@
|
||||
/* $NetBSD: featuretest.h,v 1.9 2009/05/04 16:44:14 ginsbach Exp $ */
|
||||
|
||||
/*
|
||||
* Written by Klaus Klein <kleink@NetBSD.org>, February 2, 1998.
|
||||
* Public domain.
|
||||
*
|
||||
* NOTE: Do not protect this header against multiple inclusion. Doing
|
||||
* so can have subtle side-effects due to header file inclusion order
|
||||
* and testing of e.g. _POSIX_SOURCE vs. _POSIX_C_SOURCE. Instead,
|
||||
* protect each CPP macro that we want to supply.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Feature-test macros are defined by several standards, and allow an
|
||||
* application to specify what symbols they want the system headers to
|
||||
* expose, and hence what standard they want them to conform to.
|
||||
* There are two classes of feature-test macros. The first class
|
||||
* specify complete standards, and if one of these is defined, header
|
||||
* files will try to conform to the relevant standard. They are:
|
||||
*
|
||||
* ANSI macros:
|
||||
* _ANSI_SOURCE ANSI C89
|
||||
*
|
||||
* POSIX macros:
|
||||
* _POSIX_SOURCE == 1 IEEE Std 1003.1 (version?)
|
||||
* _POSIX_C_SOURCE == 1 IEEE Std 1003.1-1990
|
||||
* _POSIX_C_SOURCE == 2 IEEE Std 1003.2-1992
|
||||
* _POSIX_C_SOURCE == 199309L IEEE Std 1003.1b-1993
|
||||
* _POSIX_C_SOURCE == 199506L ISO/IEC 9945-1:1996
|
||||
* _POSIX_C_SOURCE == 200112L IEEE Std 1003.1-2001
|
||||
* _POSIX_C_SOURCE == 200809L IEEE Std 1003.1-2008
|
||||
*
|
||||
* X/Open macros:
|
||||
* _XOPEN_SOURCE System Interfaces and Headers, Issue 4, Ver 2
|
||||
* _XOPEN_SOURCE_EXTENDED == 1 XSH4.2 UNIX extensions
|
||||
* _XOPEN_SOURCE == 500 System Interfaces and Headers, Issue 5
|
||||
* _XOPEN_SOURCE == 520 Networking Services (XNS), Issue 5.2
|
||||
* _XOPEN_SOURCE == 600 IEEE Std 1003.1-2001, XSI option
|
||||
* _XOPEN_SOURCE == 700 IEEE Std 1003.1-2008, XSI option
|
||||
*
|
||||
* NetBSD macros:
|
||||
* _NETBSD_SOURCE == 1 Make all NetBSD features available.
|
||||
*
|
||||
* If more than one of these "major" feature-test macros is defined,
|
||||
* then the set of facilities provided (and namespace used) is the
|
||||
* union of that specified by the relevant standards, and in case of
|
||||
* conflict, the earlier standard in the above list has precedence (so
|
||||
* if both _POSIX_C_SOURCE and _NETBSD_SOURCE are defined, the version
|
||||
* of rename() that's used is the POSIX one). If none of the "major"
|
||||
* feature-test macros is defined, _NETBSD_SOURCE is assumed.
|
||||
*
|
||||
* There are also "minor" feature-test macros, which enable extra
|
||||
* functionality in addition to some base standard. They should be
|
||||
* defined along with one of the "major" macros. The "minor" macros
|
||||
* are:
|
||||
*
|
||||
* _REENTRANT
|
||||
* _ISOC99_SOURCE
|
||||
* _LARGEFILE_SOURCE Large File Support
|
||||
* <http://ftp.sas.com/standards/large.file/x_open.20Mar96.html>
|
||||
*/
|
||||
|
||||
#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
|
||||
#define _POSIX_C_SOURCE 1L
|
||||
#endif
|
||||
|
||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
|
||||
!defined(_XOPEN_SOURCE) && !defined(_NETBSD_SOURCE)
|
||||
#define _NETBSD_SOURCE 1
|
||||
#endif
|
||||
|
||||
/* Never define _REENTRANT on Minix */
|
||||
|
||||
#ifdef __minix
|
||||
|
||||
#if ((_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500) && \
|
||||
!defined(_REENTRANT)
|
||||
#define _REENTRANT
|
||||
#endif
|
||||
|
||||
#endif /* __minix */
|
||||
@@ -0,0 +1,169 @@
|
||||
/* $NetBSD: file.h,v 1.71 2009/12/24 19:01:12 elad Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Andrew Doran.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)file.h 8.3 (Berkeley) 1/9/95
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FILE_H_
|
||||
#define _SYS_FILE_H_
|
||||
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/unistd.h>
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <sys/mallocvar.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/mutex.h>
|
||||
#include <sys/condvar.h>
|
||||
|
||||
struct proc;
|
||||
struct lwp;
|
||||
struct uio;
|
||||
struct iovec;
|
||||
struct stat;
|
||||
struct knote;
|
||||
|
||||
/*
|
||||
* Kernel file descriptor. One entry for each open kernel vnode and
|
||||
* socket.
|
||||
*
|
||||
* This structure is exported via the KERN_FILE and KERN_FILE2 sysctl
|
||||
* calls. Only add members to the end, do not delete them.
|
||||
*/
|
||||
struct file {
|
||||
off_t f_offset; /* first, is 64-bit */
|
||||
kauth_cred_t f_cred; /* creds associated with descriptor */
|
||||
const struct fileops {
|
||||
int (*fo_read) (struct file *, off_t *, struct uio *,
|
||||
kauth_cred_t, int);
|
||||
int (*fo_write) (struct file *, off_t *, struct uio *,
|
||||
kauth_cred_t, int);
|
||||
int (*fo_ioctl) (struct file *, u_long, void *);
|
||||
int (*fo_fcntl) (struct file *, u_int, void *);
|
||||
int (*fo_poll) (struct file *, int);
|
||||
int (*fo_stat) (struct file *, struct stat *);
|
||||
int (*fo_close) (struct file *);
|
||||
int (*fo_kqfilter) (struct file *, struct knote *);
|
||||
void (*fo_restart) (struct file *);
|
||||
void (*fo_spare1) (void);
|
||||
void (*fo_spare2) (void);
|
||||
} *f_ops;
|
||||
void *f_data; /* descriptor data, e.g. vnode/socket */
|
||||
LIST_ENTRY(file) f_list; /* list of active files */
|
||||
kmutex_t f_lock; /* lock on structure */
|
||||
int f_flag; /* see fcntl.h */
|
||||
u_int f_marker; /* traversal marker (sysctl) */
|
||||
#define DTYPE_VNODE 1 /* file */
|
||||
#define DTYPE_SOCKET 2 /* communications endpoint */
|
||||
#define DTYPE_PIPE 3 /* pipe */
|
||||
#define DTYPE_KQUEUE 4 /* event queue */
|
||||
#define DTYPE_MISC 5 /* misc file descriptor type */
|
||||
#define DTYPE_CRYPTO 6 /* crypto */
|
||||
#define DTYPE_MQUEUE 7 /* message queue */
|
||||
#define DTYPE_NAMES \
|
||||
"0", "file", "socket", "pipe", "kqueue", "misc", "crypto", "mqueue"
|
||||
u_int f_type; /* descriptor type */
|
||||
u_int f_advice; /* access pattern hint; UVM_ADV_* */
|
||||
u_int f_count; /* reference count */
|
||||
u_int f_msgcount; /* references from message queue */
|
||||
u_int f_unpcount; /* deferred close: see uipc_usrreq.c */
|
||||
SLIST_ENTRY(file) f_unplist; /* deferred close: see uipc_usrreq.c */
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags for fo_read and fo_write and do_fileread/write/v
|
||||
*/
|
||||
#define FOF_UPDATE_OFFSET 0x0001 /* update the file offset */
|
||||
#define FOF_IOV_SYSSPACE 0x0100 /* iov structure in kernel memory */
|
||||
|
||||
LIST_HEAD(filelist, file);
|
||||
extern struct filelist filehead; /* head of list of open files */
|
||||
extern u_int maxfiles; /* kernel limit on # of open files */
|
||||
extern u_int nfiles; /* actual number of open files */
|
||||
|
||||
extern const struct fileops vnops; /* vnode operations for files */
|
||||
|
||||
int dofileread(int, struct file *, void *, size_t,
|
||||
off_t *, int, register_t *);
|
||||
int dofilewrite(int, struct file *, const void *,
|
||||
size_t, off_t *, int, register_t *);
|
||||
|
||||
int do_filereadv(int, const struct iovec *, int, off_t *,
|
||||
int, register_t *);
|
||||
int do_filewritev(int, const struct iovec *, int, off_t *,
|
||||
int, register_t *);
|
||||
|
||||
int fsetown(pid_t *, u_long, const void *);
|
||||
int fgetown(pid_t, u_long, void *);
|
||||
void fownsignal(pid_t, int, int, int, void *);
|
||||
|
||||
/* Commonly used fileops */
|
||||
int fnullop_fcntl(struct file *, u_int, void *);
|
||||
int fnullop_poll(struct file *, int);
|
||||
int fnullop_kqfilter(struct file *, struct knote *);
|
||||
int fbadop_read(struct file *, off_t *, struct uio *, kauth_cred_t, int);
|
||||
int fbadop_write(struct file *, off_t *, struct uio *, kauth_cred_t, int);
|
||||
int fbadop_ioctl(struct file *, u_long, void *);
|
||||
int fbadop_close(struct file *);
|
||||
int fbadop_stat(struct file *, struct stat *);
|
||||
void fnullop_restart(struct file *);
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* _SYS_FILE_H_ */
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/* $NetBSD: float_ieee754.h,v 1.8 2005/12/11 12:25:20 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)float.h 8.1 (Berkeley) 6/10/93
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTICE: This is not a standalone file. To use it, #include it in
|
||||
* your port's float.h header.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_FLOAT_IEEE754_H_
|
||||
#define _SYS_FLOAT_IEEE754_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#ifndef FLT_ROUNDS
|
||||
__BEGIN_DECLS
|
||||
extern int __flt_rounds(void);
|
||||
__END_DECLS
|
||||
#define FLT_ROUNDS __flt_rounds()
|
||||
#endif
|
||||
|
||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
|
||||
!defined(_XOPEN_SOURCE) || \
|
||||
((__STDC_VERSION__ - 0) >= 199901L) || \
|
||||
((_POSIX_C_SOURCE - 0) >= 200112L) || \
|
||||
((_XOPEN_SOURCE - 0) >= 600) || \
|
||||
defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#ifndef FLT_EVAL_METHOD
|
||||
#if __GNUC_PREREQ__(3, 3)
|
||||
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
|
||||
#endif /* GCC >= 3.3 */
|
||||
#endif /* defined(FLT_EVAL_METHOD) */
|
||||
#endif /* !defined(_ANSI_SOURCE) && ... */
|
||||
|
||||
#define FLT_RADIX 2 /* b */
|
||||
|
||||
#define FLT_MANT_DIG 24 /* p */
|
||||
#define FLT_EPSILON 1.19209290E-7F /* b**(1-p) */
|
||||
#define FLT_DIG 6 /* floor((p-1)*log10(b))+(b == 10) */
|
||||
#define FLT_MIN_EXP (-125) /* emin */
|
||||
#define FLT_MIN 1.17549435E-38F /* b**(emin-1) */
|
||||
#define FLT_MIN_10_EXP (-37) /* ceil(log10(b**(emin-1))) */
|
||||
#define FLT_MAX_EXP 128 /* emax */
|
||||
#define FLT_MAX 3.40282347E+38F /* (1-b**(-p))*b**emax */
|
||||
#define FLT_MAX_10_EXP 38 /* floor(log10((1-b**(-p))*b**emax)) */
|
||||
|
||||
#define DBL_MANT_DIG 53
|
||||
#define DBL_EPSILON 2.2204460492503131E-16
|
||||
#define DBL_DIG 15
|
||||
#define DBL_MIN_EXP (-1021)
|
||||
#define DBL_MIN 2.2250738585072014E-308
|
||||
#define DBL_MIN_10_EXP (-307)
|
||||
#define DBL_MAX_EXP 1024
|
||||
#define DBL_MAX 1.7976931348623157E+308
|
||||
#define DBL_MAX_10_EXP 308
|
||||
|
||||
/*
|
||||
* If no extended-precision type is defined by the machine-dependent
|
||||
* header including this, default to `long double' being double-precision.
|
||||
*/
|
||||
#ifndef LDBL_MANT_DIG
|
||||
#define LDBL_MANT_DIG DBL_MANT_DIG
|
||||
#define LDBL_EPSILON DBL_EPSILON
|
||||
#define LDBL_DIG DBL_DIG
|
||||
#define LDBL_MIN_EXP DBL_MIN_EXP
|
||||
#define LDBL_MIN DBL_MIN
|
||||
#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
|
||||
#define LDBL_MAX_EXP DBL_MAX_EXP
|
||||
#define LDBL_MAX DBL_MAX
|
||||
#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
|
||||
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
|
||||
!defined(_XOPEN_SOURCE) || \
|
||||
((__STDC_VERSION__ - 0) >= 199901L) || \
|
||||
((_POSIX_C_SOURCE - 0) >= 200112L) || \
|
||||
((_XOPEN_SOURCE - 0) >= 600) || \
|
||||
defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#define DECIMAL_DIG 17 /* ceil((1+p*log10(b))-(b==10) */
|
||||
#endif /* !defined(_ANSI_SOURCE) && ... */
|
||||
#endif /* LDBL_MANT_DIG */
|
||||
|
||||
#endif /* _SYS_FLOAT_IEEE754_H_ */
|
||||
@@ -0,0 +1,463 @@
|
||||
/* $NetBSD: gcq.h,v 1.2 2007/08/19 07:35:32 kiyohara Exp $ */
|
||||
/*
|
||||
* Not (c) 2007 Matthew Orgass
|
||||
* This file is public domain, meaning anyone can make any use of part or all
|
||||
* of this file including copying into other works without credit. Any use,
|
||||
* modified or not, is solely the responsibility of the user. If this file is
|
||||
* part of a collection then use in the collection is governed by the terms of
|
||||
* the collection.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Generic Circular Queues: Pointer arithmetic is used to recover the
|
||||
* enclosing object. Merge operation is provided. Items can be multiply
|
||||
* removed, but queue traversal requires separate knowledge of the queue head.
|
||||
*/
|
||||
|
||||
#ifndef _GCQ_H
|
||||
#define _GCQ_H
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <sys/types.h>
|
||||
#include <sys/null.h>
|
||||
#include <lib/libkern/libkern.h>
|
||||
#else
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <assert.h>
|
||||
#endif
|
||||
|
||||
#ifdef GCQ_USE_ASSERT
|
||||
#define GCQ_ASSERT(x) assert(x)
|
||||
#else
|
||||
#ifdef _KERNEL
|
||||
#define GCQ_ASSERT(x) KASSERT(x)
|
||||
#else
|
||||
#define GCQ_ASSERT(x) _DIAGASSERT(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
struct gcq {
|
||||
struct gcq *q_next;
|
||||
struct gcq *q_prev;
|
||||
};
|
||||
|
||||
struct gcq_head {
|
||||
struct gcq hq;
|
||||
};
|
||||
|
||||
#define GCQ_INIT(q) { &(q), &(q) }
|
||||
#define GCQ_INIT_HEAD(head) { GCQ_INIT((head).hq) }
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_init(struct gcq *q)
|
||||
{
|
||||
q->q_next = q->q_prev = q;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, const, warn_unused_result, always_inline))
|
||||
static inline struct gcq *
|
||||
gcq_q(struct gcq *q)
|
||||
{
|
||||
return q;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, const, warn_unused_result, always_inline))
|
||||
static inline struct gcq *
|
||||
gcq_hq(struct gcq_head *head)
|
||||
{
|
||||
return (struct gcq *)head;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, const, warn_unused_result, always_inline))
|
||||
static inline struct gcq_head *
|
||||
gcq_head(struct gcq *q)
|
||||
{
|
||||
return (struct gcq_head *)q;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_init_head(struct gcq_head *head)
|
||||
{
|
||||
gcq_init(gcq_hq(head));
|
||||
}
|
||||
|
||||
__attribute__((nonnull, pure, warn_unused_result, always_inline))
|
||||
static inline bool
|
||||
gcq_onlist(struct gcq *q)
|
||||
{
|
||||
return (q->q_next != q);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, pure, warn_unused_result, always_inline))
|
||||
static inline bool
|
||||
gcq_empty(struct gcq_head *head)
|
||||
{
|
||||
return (!gcq_onlist(gcq_hq(head)));
|
||||
}
|
||||
|
||||
__attribute__((nonnull, pure, warn_unused_result, always_inline))
|
||||
static inline bool
|
||||
gcq_linked(struct gcq *prev, struct gcq *next)
|
||||
{
|
||||
return (prev->q_next == next && next->q_prev == prev);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_insert_after(struct gcq *on, struct gcq *off)
|
||||
{
|
||||
struct gcq *on_next;
|
||||
GCQ_ASSERT(off->q_next == off && off->q_prev == off);
|
||||
on_next = on->q_next;
|
||||
|
||||
off->q_prev = on;
|
||||
off->q_next = on_next;
|
||||
on_next->q_prev = off;
|
||||
on->q_next = off;
|
||||
}
|
||||
|
||||
__attribute__((nonnull)) static inline void
|
||||
gcq_insert_before(struct gcq *on, struct gcq *off)
|
||||
{
|
||||
struct gcq *on_prev;
|
||||
GCQ_ASSERT(off->q_next == off && off->q_prev == off);
|
||||
on_prev = on->q_prev;
|
||||
|
||||
off->q_next = on;
|
||||
off->q_prev = on_prev;
|
||||
on_prev->q_next = off;
|
||||
on->q_prev = off;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_insert_head(struct gcq_head *head, struct gcq *q)
|
||||
{
|
||||
gcq_insert_after(gcq_hq(head), q);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_insert_tail(struct gcq_head *head, struct gcq *q)
|
||||
{
|
||||
gcq_insert_before(gcq_hq(head), q);
|
||||
}
|
||||
|
||||
__attribute__((nonnull)) static inline void
|
||||
gcq_tie(struct gcq *dst, struct gcq *src)
|
||||
{
|
||||
struct gcq *dst_next, *src_prev;
|
||||
dst_next = dst->q_next;
|
||||
src_prev = src->q_prev;
|
||||
|
||||
src_prev->q_next = dst_next;
|
||||
dst_next->q_prev = src_prev;
|
||||
src->q_prev = dst;
|
||||
dst->q_next = src;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_tie_after(struct gcq *dst, struct gcq *src)
|
||||
{
|
||||
GCQ_ASSERT(dst != src && dst->q_prev != src);
|
||||
gcq_tie(dst, src);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_tie_before(struct gcq *dst, struct gcq *src)
|
||||
{
|
||||
gcq_tie_after(dst->q_prev, src);
|
||||
}
|
||||
|
||||
__attribute__((nonnull)) static inline struct gcq *
|
||||
gcq_remove(struct gcq *q)
|
||||
{
|
||||
struct gcq *next, *prev;
|
||||
next = q->q_next;
|
||||
prev = q->q_prev;
|
||||
|
||||
prev->q_next = next;
|
||||
next->q_prev = prev;
|
||||
gcq_init(q);
|
||||
return q;
|
||||
}
|
||||
|
||||
#ifdef GCQ_UNCONDITIONAL_MERGE
|
||||
__attribute__((nonnull)) static inline void
|
||||
gcq_merge(struct gcq *dst, struct gcq *src)
|
||||
{
|
||||
GCQ_ASSERT(dst != src && dst->q_prev != src);
|
||||
gcq_tie(dst, src);
|
||||
gcq_tie(src, src);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_merge_head(struct gcq_head *dst, struct gcq_head *src)
|
||||
{
|
||||
gcq_merge(gcq_hq(dst), gcq_hq(src));
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_merge_tail(struct gcq_head *dst, struct gcq_head *src)
|
||||
{
|
||||
gcq_merge(gcq_hq(dst)->q_prev, gcq_hq(src));
|
||||
}
|
||||
#else
|
||||
__attribute__((nonnull)) static inline void
|
||||
gcq_merge(struct gcq *dst, struct gcq *src)
|
||||
{
|
||||
struct gcq *dst_next, *src_prev, *src_next;
|
||||
GCQ_ASSERT(dst != src && dst->q_prev != src);
|
||||
|
||||
if (gcq_onlist(src)) {
|
||||
dst_next = dst->q_next;
|
||||
src_prev = src->q_prev;
|
||||
src_next = src->q_next;
|
||||
|
||||
dst_next->q_prev = src_prev;
|
||||
src_prev->q_next = dst_next;
|
||||
dst->q_next = src_next;
|
||||
src_next->q_prev = dst;
|
||||
gcq_init(src);
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_merge_head(struct gcq_head *dst, struct gcq_head *src)
|
||||
{
|
||||
gcq_merge(gcq_hq(dst), gcq_hq(src));
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_merge_tail(struct gcq_head *dst, struct gcq_head *src)
|
||||
{
|
||||
gcq_merge(gcq_hq(dst)->q_prev, gcq_hq(src));
|
||||
}
|
||||
#endif
|
||||
|
||||
__attribute__((nonnull)) static inline void
|
||||
gcq_clear(struct gcq *q)
|
||||
{
|
||||
struct gcq *nq, *next;
|
||||
nq=q;
|
||||
do {
|
||||
next = nq->q_next;
|
||||
gcq_init(nq);
|
||||
nq = next;
|
||||
} while (next != q);
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline void
|
||||
gcq_remove_all(struct gcq_head *head)
|
||||
{
|
||||
gcq_clear(gcq_hq(head));
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline struct gcq *
|
||||
_gcq_next(struct gcq *current, struct gcq_head *head, struct gcq *start)
|
||||
{
|
||||
struct gcq *q, *hq;
|
||||
hq = gcq_hq(head);
|
||||
q = current->q_next;
|
||||
if (hq != start && q == hq)
|
||||
q = hq->q_next;
|
||||
if (current != start)
|
||||
GCQ_ASSERT(gcq_onlist(current));
|
||||
return q;
|
||||
}
|
||||
|
||||
__attribute__((nonnull, always_inline)) static inline struct gcq *
|
||||
_gcq_prev(struct gcq *current, struct gcq_head *head, struct gcq *start)
|
||||
{
|
||||
struct gcq *q, *hq;
|
||||
hq = gcq_hq(head);
|
||||
q = current->q_prev;
|
||||
if (hq != start && q == hq)
|
||||
q = hq->q_prev;
|
||||
if (current != start)
|
||||
GCQ_ASSERT(gcq_onlist(current));
|
||||
return q;
|
||||
}
|
||||
|
||||
|
||||
#define GCQ_ITEM(q, type, name) \
|
||||
((type *)(void *)((uint8_t *)gcq_q(q) - offsetof(type, name)))
|
||||
|
||||
|
||||
#define _GCQ_GDQ(var, h, ptr, fn) (gcq_hq(h)->ptr != gcq_hq(h) ? \
|
||||
(var = fn(gcq_hq(h)->ptr), true) : (var = NULL, false))
|
||||
#define _GCQ_GDQ_TYPED(tvar, h, type, name, ptr, fn) \
|
||||
(gcq_hq(h)->ptr != gcq_hq(h) ? (tvar = GCQ_ITEM(fn(gcq_hq(h)->ptr), \
|
||||
type, name), true) : (tvar = NULL, false))
|
||||
#define _GCQ_NP(var, current, head, start, np, fn) \
|
||||
(np(current, head, start) != (start) ? \
|
||||
(var = fn(np(current, head, start)), true) : (var = NULL, false))
|
||||
#define _GCQ_NP_TYPED(tvar, current, head, start, type, name, np, fn) \
|
||||
(np(current, head, start) != (start) ? \
|
||||
(tvar = GCQ_ITEM(fn(np(current, head, start)), type, name), true) : \
|
||||
(tvar = NULL, false))
|
||||
|
||||
#define _GCQ_GDQ_COND(var, h, ptr, rem, cond) \
|
||||
(gcq_hq(h)->ptr != gcq_hq(h) ? (var = gcq_hq(h)->ptr, \
|
||||
((cond) ? (rem, true) : (var = NULL, false))) : \
|
||||
(var = NULL, false))
|
||||
#define _GCQ_GDQ_COND_TYPED(tvar, h, type, name, ptr, rem, cond) \
|
||||
(gcq_hq(h)->ptr != gcq_hq(h) ? (tvar = GCQ_ITEM(gcq_hq(h)->ptr, \
|
||||
type, name), ((cond) ? (rem, true) : (tvar = NULL, false))) : \
|
||||
(tvar = NULL, false))
|
||||
#define _GCQ_NP_COND(var, current, head, start, np, rem, cond) \
|
||||
(np(current, head, start) != (start) ? \
|
||||
(var = fn(np(current, head, start)), ((cond) ? (rem), true) : \
|
||||
(var = NULL, false))) : (var = NULL, false))
|
||||
#define _GCQ_NP_COND_TYPED(tvar, current, head, start, type, name, np, \
|
||||
rem, cond) (np(current, head, start) != (start) ? \
|
||||
(tvar = GCQ_ITEM(fn(np(current, head, start)), type, name), \
|
||||
((cond) ? (rem, true) : (var = NULL, false))) : \
|
||||
(tvar = NULL, false))
|
||||
|
||||
#define GCQ_GOT_FIRST(var, h) _GCQ_GDQ(var, h, q_next, gcq_q)
|
||||
#define GCQ_GOT_LAST(var, h) _GCQ_GDQ(var, h, q_prev, gcq_q)
|
||||
#define GCQ_DEQUEUED_FIRST(var, h) _GCQ_GDQ(var, h, q_next, gcq_remove)
|
||||
#define GCQ_DEQUEUED_LAST(var, h) _GCQ_GDQ(var, h, q_prev, gcq_remove)
|
||||
#define GCQ_GOT_FIRST_TYPED(tvar, h, type, name) \
|
||||
_GCQ_GDQ_TYPED(tvar, h, type, name, q_next, gcq_q)
|
||||
#define GCQ_GOT_LAST_TYPED(tvar, h, type, name) \
|
||||
_GCQ_GDQ_TYPED(tvar, h, type, name, q_prev, gcq_q)
|
||||
#define GCQ_DEQUEUED_FIRST_TYPED(tvar, h, type, name) \
|
||||
_GCQ_GDQ_TYPED(tvar, h, type, name, q_next, gcq_remove)
|
||||
#define GCQ_DEQUEUED_LAST_TYPED(tvar, h, type, name) \
|
||||
_GCQ_GDQ_TYPED(tvar, h, type, name, q_prev, gcq_remove)
|
||||
#define GCQ_GOT_NEXT(var, current, head, start) \
|
||||
_GCQ_NP(var, current, head, start, _gcq_next, gcq_q)
|
||||
#define GCQ_GOT_PREV(var, current, head, start) \
|
||||
_GCQ_NP(var, current, head, start, _gcq_prev, gcq_q)
|
||||
#define GCQ_DEQUEUED_NEXT(var, current, head, start) \
|
||||
_GCQ_NP(var, current, head, start, _gcq_next, gcq_remove)
|
||||
#define GCQ_DEQUEUED_PREV(var, current, head, start) \
|
||||
_GCQ_NP(var, current, head, start, _gcq_prev, gcq_remove)
|
||||
#define GCQ_GOT_NEXT_TYPED(tvar, current, head, start, type, name) \
|
||||
_GCQ_NP_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_next, gcq_q)
|
||||
#define GCQ_GOT_PREV_TYPED(tvar, current, head, start, type, name) \
|
||||
_GCQ_NP_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_prev, gcq_q)
|
||||
#define GCQ_DEQUEUED_NEXT_TYPED(tvar, current, head, start, type, name) \
|
||||
_GCQ_NP_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_next, gcq_remove)
|
||||
#define GCQ_DEQUEUED_PREV_TYPED(tvar, current, head, start, type, name) \
|
||||
_GCQ_NP_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_prev, gcq_remove)
|
||||
|
||||
#define GCQ_GOT_FIRST_COND(var, h, cond) \
|
||||
_GCQ_GDQ_COND(var, h, q_next, ((void)0), cond)
|
||||
#define GCQ_GOT_LAST_COND(var, h, cond) \
|
||||
_GCQ_GDQ_COND(var, h, q_prev, ((void)0), cond)
|
||||
#define GCQ_DEQUEUED_FIRST_COND(var, h, cond) \
|
||||
_GCQ_GDQ_COND(var, h, q_next, gcq_remove(var), cond)
|
||||
#define GCQ_DEQUEUED_LAST_COND(var, h, cond) \
|
||||
_GCQ_GDQ_COND(var, h, q_prev, gcq_remove(var), cond)
|
||||
#define GCQ_GOT_FIRST_COND_TYPED(tvar, h, type, name, cond) \
|
||||
_GCQ_GDQ_COND_TYPED(tvar, h, type, name, q_next, ((void)0), cond)
|
||||
#define GCQ_GOT_LAST_COND_TYPED(tvar, h, type, name, cond) \
|
||||
_GCQ_GDQ_COND_TYPED(tvar, h, type, name, q_prev, ((void)0), cond)
|
||||
#define GCQ_DEQUEUED_FIRST_COND_TYPED(tvar, h, type, name, cond) \
|
||||
_GCQ_GDQ_COND_TYPED(tvar, h, type, name, q_next, \
|
||||
gcq_remove(&(tvar)->name), cond)
|
||||
#define GCQ_DEQUEUED_LAST_COND_TYPED(tvar, h, type, name, cond) \
|
||||
_GCQ_GDQ_COND_TYPED(tvar, h, type, name, q_prev, \
|
||||
gcq_remove(&(tvar)->name), cond)
|
||||
#define GCQ_GOT_NEXT_COND(var, current, head, start, cond) \
|
||||
_GCQ_NP_COND(var, current, head, start, _gcq_next, ((void)0), cond)
|
||||
#define GCQ_GOT_PREV_COND(var, current, head, start, cond) \
|
||||
_GCQ_NP_COND(var, current, head, start, _gcq_prev, ((void)0), cond)
|
||||
#define GCQ_DEQUEUED_NEXT_COND(var, current, head, start, cond) \
|
||||
_GCQ_NP_COND(var, current, head, start, _gcq_next, gcq_remove(var), \
|
||||
cond)
|
||||
#define GCQ_DEQUEUED_PREV_COND(var, current, head, start, cond) \
|
||||
_GCQ_NP_COND(var, current, head, start, _gcq_prev, gcq_remove(var), \
|
||||
cond)
|
||||
#define GCQ_GOT_NEXT_COND_TYPED(tvar, current, head, start, type, name, \
|
||||
cond) _GCQ_NP_COND_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_next, ((void)0), cond)
|
||||
#define GCQ_GOT_PREV_COND_TYPED(tvar, current, head, start, type, name, \
|
||||
cond) _GCQ_NP_COND_TYPED(tvar, current, head, start, type, name, \
|
||||
_gcq_prev, ((void)0), cond)
|
||||
#define GCQ_DEQUEUED_NEXT_COND_TYPED(tvar, current, head, start, type, \
|
||||
name, cond) _GCQ_NP_COND_TYPED(tvar, current, head, start, type, \
|
||||
name, _gcq_next, gcq_remove(&(tvar)->name), cond)
|
||||
#define GCQ_DEQUEUED_PREV_COND_TYPED(tvar, current, head, start, type, \
|
||||
name, cond) _GCQ_NP_COND_TYPED(tvar, current, head, start, type, \
|
||||
name, _gcq_prev, gcq_remove(&(tvar)->name), cond)
|
||||
|
||||
|
||||
#define _GCQ_FOREACH(var, h, tnull, item, ptr) \
|
||||
for ((var)=gcq_hq(h)->ptr; ((var) != gcq_hq(h) && \
|
||||
(GCQ_ASSERT(gcq_onlist(var)), item, true)) || \
|
||||
(tnull, false); (var)=(var)->ptr)
|
||||
#define _GCQ_FOREACH_NVAR(var, nvar, h, tnull, item, ptr, ol, rem, ro) \
|
||||
for ((nvar)=gcq_hq(h)->ptr; (((var)=(nvar), (nvar) != gcq_hq(h)) && \
|
||||
(ol, (nvar)=(nvar)->ptr, rem, item, true)) || (tnull, false); ro)
|
||||
|
||||
#define GCQ_FOREACH(var, h) \
|
||||
_GCQ_FOREACH(var, h, ((void)0), ((void)0), q_next)
|
||||
#define GCQ_FOREACH_REV(var, h) \
|
||||
_GCQ_FOREACH(var, h, ((void)0), ((void)0), q_prev)
|
||||
#define GCQ_FOREACH_NVAR(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_next, GCQ_ASSERT(gcq_onlist(nvar)), ((void)0), ((void)0))
|
||||
#define GCQ_FOREACH_NVAR_REV(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_prev, GCQ_ASSERT(gcq_onlist(nvar)), ((void)0), ((void)0))
|
||||
#define GCQ_FOREACH_RO(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_next, ((void)0), ((void)0), GCQ_ASSERT(gcq_linked(var, nvar)))
|
||||
#define GCQ_FOREACH_RO_REV(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_prev, ((void)0), ((void)0), GCQ_ASSERT(gcq_linked(nvar, var)))
|
||||
#define GCQ_FOREACH_DEQUEUED(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_next, GCQ_ASSERT(gcq_onlist(nvar)), gcq_remove(var), ((void)0)
|
||||
#define GCQ_FOREACH_DEQUEUED_REV(var, nvar, h) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, ((void)0), ((void)0), \
|
||||
q_prev, GCQ_ASSERT(gcq_onlist(nvar)), gcq_remove(var), ((void)0)
|
||||
|
||||
#define GCQ_FOREACH_TYPED(var, h, tvar, type, name) \
|
||||
_GCQ_FOREACH(var, h, (tvar)=NULL, (tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_next)
|
||||
#define GCQ_FOREACH_TYPED_REV(var, h, tvar, type, name) \
|
||||
_GCQ_FOREACH(var, h, (tvar)=NULL, (tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_prev)
|
||||
#define GCQ_FOREACH_NVAR_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_next, GCQ_ASSERT(gcq_onlist(nvar)), ((void)0), ((void)0))
|
||||
#define GCQ_FOREACH_NVAR_REV_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_prev, GCQ_ASSERT(gcq_onlist(nvar)), ((void)0), ((void)0))
|
||||
#define GCQ_FOREACH_RO_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_next, ((void)0), ((void)0), GCQ_ASSERT(gcq_lined(var, nvar)))
|
||||
#define GCQ_FOREACH_RO_REV_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_prev, ((void)0), ((void)0), GCQ_ASSERT(gcq_linked(nvar, var)))
|
||||
#define GCQ_FOREACH_DEQUEUED_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_next, GCQ_ASSERT(gcq_onlist(nvar)), gcq_remove(var), ((void)0))
|
||||
#define GCQ_FOREACH_DEQUEUED_REV_TYPED(var, nvar, h, tvar, type, name) \
|
||||
_GCQ_FOREACH_NVAR(var, nvar, h, (tvar)=NULL, \
|
||||
(tvar)=GCQ_ITEM(var, type, name), \
|
||||
q_prev, GCQ_ASSERT(gcq_onlist(nvar)), gcq_remove(var), ((void)0))
|
||||
|
||||
#define _GCQ_COND(fe, cond) do { fe { if (cond) break; } } while (0)
|
||||
|
||||
#define GCQ_FIND(var, h, cond) _GCQ_COND(GCQ_FOREACH(var, h), cond)
|
||||
#define GCQ_FIND_REV(var, h, cond) _GCQ_COND(GCQ_FOREACH_REV(var, h), cond)
|
||||
#define GCQ_FIND_TYPED(var, h, tvar, type, name, cond) \
|
||||
_GCQ_COND(GCQ_FOREACH_TYPED(var, h, tvar, type, name), cond)
|
||||
#define GCQ_FIND_TYPED_REV(var, h, tvar, type, name, cond) \
|
||||
_GCQ_COND(GCQ_FOREACH_REV_TYPED(var, h, tvar, type, name), cond)
|
||||
|
||||
#endif /* _GCQ_H */
|
||||
@@ -0,0 +1,153 @@
|
||||
/* $NetBSD: gmon.h,v 1.9 2006/10/04 14:22:58 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)gmon.h 8.2 (Berkeley) 1/4/94
|
||||
*/
|
||||
|
||||
#ifndef _SYS_GMON_H_
|
||||
#define _SYS_GMON_H_
|
||||
|
||||
#include <machine/profile.h>
|
||||
|
||||
/*
|
||||
* Structure prepended to gmon.out profiling data file.
|
||||
*/
|
||||
struct gmonhdr {
|
||||
u_long lpc; /* base pc address of sample buffer */
|
||||
u_long hpc; /* max pc address of sampled buffer */
|
||||
int ncnt; /* size of sample buffer (plus this header) */
|
||||
int version; /* version number */
|
||||
int profrate; /* profiling clock rate */
|
||||
int spare[3]; /* reserved */
|
||||
};
|
||||
#define GMONVERSION 0x00051879
|
||||
|
||||
/*
|
||||
* histogram counters are unsigned shorts (according to the kernel).
|
||||
*/
|
||||
#define HISTCOUNTER unsigned short
|
||||
|
||||
/*
|
||||
* fraction of text space to allocate for histogram counters here, 1/2
|
||||
*/
|
||||
#ifndef HISTFRACTION
|
||||
#define HISTFRACTION 2
|
||||
#endif /* HISTFRACTION */
|
||||
|
||||
/*
|
||||
* Fraction of text space to allocate for from hash buckets.
|
||||
* The value of HASHFRACTION is based on the minimum number of bytes
|
||||
* of separation between two subroutine call points in the object code.
|
||||
* Given MIN_SUBR_SEPARATION bytes of separation the value of
|
||||
* HASHFRACTION is calculated as:
|
||||
*
|
||||
* HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
|
||||
*
|
||||
* For example, on the VAX, the shortest two call sequence is:
|
||||
*
|
||||
* calls $0,(r0)
|
||||
* calls $0,(r0)
|
||||
*
|
||||
* which is separated by only three bytes, thus HASHFRACTION is
|
||||
* calculated as:
|
||||
*
|
||||
* HASHFRACTION = 3 / (2 * 2 - 1) = 1
|
||||
*
|
||||
* Note that the division above rounds down, thus if MIN_SUBR_FRACTION
|
||||
* is less than three, this algorithm will not work!
|
||||
*
|
||||
* In practice, however, call instructions are rarely at a minimal
|
||||
* distance. Hence, we will define HASHFRACTION to be 2 across all
|
||||
* architectures. This saves a reasonable amount of space for
|
||||
* profiling data structures without (in practice) sacrificing
|
||||
* any granularity.
|
||||
*/
|
||||
#define HASHFRACTION 2
|
||||
|
||||
/*
|
||||
* percent of text space to allocate for tostructs with a minimum.
|
||||
*/
|
||||
#define ARCDENSITY 2
|
||||
#define MINARCS 50
|
||||
#define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2)
|
||||
|
||||
struct tostruct {
|
||||
u_long selfpc;
|
||||
long count;
|
||||
u_short link;
|
||||
u_short pad;
|
||||
};
|
||||
|
||||
/*
|
||||
* a raw arc, with pointers to the calling site and
|
||||
* the called site and a count.
|
||||
*/
|
||||
struct rawarc {
|
||||
u_long raw_frompc;
|
||||
u_long raw_selfpc;
|
||||
long raw_count;
|
||||
};
|
||||
|
||||
/*
|
||||
* The profiling data structures are housed in this structure.
|
||||
*/
|
||||
struct gmonparam {
|
||||
int state;
|
||||
u_short *kcount;
|
||||
u_long kcountsize;
|
||||
u_short *froms;
|
||||
u_long fromssize;
|
||||
struct tostruct *tos;
|
||||
u_long tossize;
|
||||
long tolimit;
|
||||
u_long lowpc;
|
||||
u_long highpc;
|
||||
u_long textsize;
|
||||
u_long hashfraction;
|
||||
};
|
||||
extern struct gmonparam _gmonparam;
|
||||
|
||||
/*
|
||||
* Possible states of profiling.
|
||||
*/
|
||||
#define GMON_PROF_ON 0
|
||||
#define GMON_PROF_BUSY 1
|
||||
#define GMON_PROF_ERROR 2
|
||||
#define GMON_PROF_OFF 3
|
||||
|
||||
/*
|
||||
* Sysctl definitions for extracting profiling information from the kernel.
|
||||
*/
|
||||
#define GPROF_STATE 0 /* int: profiling enabling variable */
|
||||
#define GPROF_COUNT 1 /* struct: profile tick count buffer */
|
||||
#define GPROF_FROMS 2 /* struct: from location hash bucket */
|
||||
#define GPROF_TOS 3 /* struct: destination/count structure */
|
||||
#define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
|
||||
#endif /* !_SYS_GMON_H_ */
|
||||
@@ -0,0 +1,103 @@
|
||||
/* $NetBSD: hash.h,v 1.6 2008/04/28 20:24:10 martin Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Luke Mewburn.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_HASH_H_
|
||||
#define _SYS_HASH_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef __HAVE_MACHINE_HASH_H
|
||||
#include <machine/hash.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __HAVE_HASH32_BUF /* not overridden by MD hash */
|
||||
|
||||
#define HASH32_BUF_INIT 5381
|
||||
|
||||
/*
|
||||
* uint32_t
|
||||
* hash32_buf(const void *bf, size_t len, uint32_t hash)
|
||||
* return a 32 bit hash of the binary buffer buf (size len),
|
||||
* seeded with an initial hash value of hash (usually HASH32_BUF_INIT).
|
||||
*/
|
||||
static __inline uint32_t
|
||||
hash32_buf(const void *bf, size_t len, uint32_t hash)
|
||||
{
|
||||
const uint8_t *s = bf;
|
||||
|
||||
while (len-- != 0) /* "nemesi": k=257, r=r*257 */
|
||||
hash = hash * 257 + *s++;
|
||||
return (hash * 257);
|
||||
}
|
||||
#endif /* __HAVE_HASH32_BUF */
|
||||
|
||||
|
||||
#ifndef __HAVE_HASH32_STR /* not overridden by MD hash */
|
||||
|
||||
#define HASH32_STR_INIT 5381
|
||||
/*
|
||||
* uint32_t
|
||||
* hash32_str(const void *bf, uint32_t hash)
|
||||
* return a 32 bit hash of NUL terminated ASCII string buf,
|
||||
* seeded with an initial hash value of hash (usually HASH32_STR_INIT).
|
||||
*/
|
||||
static __inline uint32_t
|
||||
hash32_str(const void *bf, uint32_t hash)
|
||||
{
|
||||
const uint8_t *s = bf;
|
||||
uint8_t c;
|
||||
|
||||
while ((c = *s++) != 0)
|
||||
hash = hash * 33 + c; /* "perl": k=33, r=r+r/32 */
|
||||
return (hash + (hash >> 5));
|
||||
}
|
||||
|
||||
/*
|
||||
* uint32_t
|
||||
* hash32_strn(const void *bf, size_t len, uint32_t hash)
|
||||
* return a 32 bit hash of NUL terminated ASCII string buf up to
|
||||
* a maximum of len bytes,
|
||||
* seeded with an initial hash value of hash (usually HASH32_STR_INIT).
|
||||
*/
|
||||
static __inline uint32_t
|
||||
hash32_strn(const void *bf, size_t len, uint32_t hash)
|
||||
{
|
||||
const uint8_t *s = bf;
|
||||
uint8_t c;
|
||||
|
||||
while ((c = *s++) != 0 && len-- != 0)
|
||||
hash = hash * 33 + c; /* "perl": k=33, r=r+r/32 */
|
||||
return (hash + (hash >> 5));
|
||||
}
|
||||
#endif /* __HAVE_HASH32_STR */
|
||||
|
||||
|
||||
#endif /* !_SYS_HASH_H_ */
|
||||
@@ -0,0 +1,152 @@
|
||||
/* $NetBSD: ieee754.h,v 1.7 2007/02/02 23:08:22 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This software was developed by the Computer Systems Engineering group
|
||||
* at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
|
||||
* contributed to Berkeley.
|
||||
*
|
||||
* All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Lawrence Berkeley Laboratory.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)ieee.h 8.1 (Berkeley) 6/11/93
|
||||
*/
|
||||
#ifndef _SYS_IEEE754_H_
|
||||
#define _SYS_IEEE754_H_
|
||||
|
||||
/*
|
||||
* NOTICE: This is not a standalone file. To use it, #include it in
|
||||
* your port's ieee.h header.
|
||||
*/
|
||||
|
||||
#include <machine/endian.h>
|
||||
|
||||
/*
|
||||
* <sys/ieee754.h> defines the layout of IEEE 754 floating point types.
|
||||
* Only single-precision and double-precision types are defined here;
|
||||
* extended types, if available, are defined in the machine-dependent
|
||||
* header.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Define the number of bits in each fraction and exponent.
|
||||
*
|
||||
* k k+1
|
||||
* Note that 1.0 x 2 == 0.1 x 2 and that denorms are represented
|
||||
*
|
||||
* (-exp_bias+1)
|
||||
* as fractions that look like 0.fffff x 2 . This means that
|
||||
*
|
||||
* -126
|
||||
* the number 0.10000 x 2 , for instance, is the same as the normalized
|
||||
*
|
||||
* -127 -128
|
||||
* float 1.0 x 2 . Thus, to represent 2 , we need one leading zero
|
||||
*
|
||||
* -129
|
||||
* in the fraction; to represent 2 , we need two, and so on. This
|
||||
*
|
||||
* (-exp_bias-fracbits+1)
|
||||
* implies that the smallest denormalized number is 2
|
||||
*
|
||||
* for whichever format we are talking about: for single precision, for
|
||||
*
|
||||
* -126 -149
|
||||
* instance, we get .00000000000000000000001 x 2 , or 1.0 x 2 , and
|
||||
*
|
||||
* -149 == -127 - 23 + 1.
|
||||
*/
|
||||
#define SNG_EXPBITS 8
|
||||
#define SNG_FRACBITS 23
|
||||
|
||||
struct ieee_single {
|
||||
#if _BYTE_ORDER == _BIG_ENDIAN
|
||||
u_int sng_sign:1;
|
||||
u_int sng_exp:SNG_EXPBITS;
|
||||
u_int sng_frac:SNG_FRACBITS;
|
||||
#else
|
||||
u_int sng_frac:SNG_FRACBITS;
|
||||
u_int sng_exp:SNG_EXPBITS;
|
||||
u_int sng_sign:1;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define DBL_EXPBITS 11
|
||||
#define DBL_FRACHBITS 20
|
||||
#define DBL_FRACLBITS 32
|
||||
#define DBL_FRACBITS (DBL_FRACHBITS + DBL_FRACLBITS)
|
||||
|
||||
struct ieee_double {
|
||||
#if _BYTE_ORDER == _BIG_ENDIAN
|
||||
u_int dbl_sign:1;
|
||||
u_int dbl_exp:DBL_EXPBITS;
|
||||
u_int dbl_frach:DBL_FRACHBITS;
|
||||
u_int dbl_fracl:DBL_FRACLBITS;
|
||||
#else
|
||||
u_int dbl_fracl:DBL_FRACLBITS;
|
||||
u_int dbl_frach:DBL_FRACHBITS;
|
||||
u_int dbl_exp:DBL_EXPBITS;
|
||||
u_int dbl_sign:1;
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Floats whose exponent is in [1..INFNAN) (of whatever type) are
|
||||
* `normal'. Floats whose exponent is INFNAN are either Inf or NaN.
|
||||
* Floats whose exponent is zero are either zero (iff all fraction
|
||||
* bits are zero) or subnormal values.
|
||||
*
|
||||
* At least one `signalling NaN' and one `quiet NaN' value must be
|
||||
* implemented. It is left to the architecture to specify how to
|
||||
* distinguish between these.
|
||||
*/
|
||||
#define SNG_EXP_INFNAN 255
|
||||
#define DBL_EXP_INFNAN 2047
|
||||
|
||||
/*
|
||||
* Exponent biases.
|
||||
*/
|
||||
#define SNG_EXP_BIAS 127
|
||||
#define DBL_EXP_BIAS 1023
|
||||
|
||||
/*
|
||||
* Convenience data structures.
|
||||
*/
|
||||
union ieee_single_u {
|
||||
float sngu_f;
|
||||
struct ieee_single sngu_sng;
|
||||
};
|
||||
|
||||
union ieee_double_u {
|
||||
double dblu_d;
|
||||
struct ieee_double dblu_dbl;
|
||||
};
|
||||
#endif /* _SYS_IEEE754_H_ */
|
||||
@@ -0,0 +1,45 @@
|
||||
/* $NetBSD: inttypes.h,v 1.5 2008/04/28 20:24:10 martin Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Klaus J. Klein.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_INTTYPES_H_
|
||||
#define _SYS_INTTYPES_H_
|
||||
|
||||
/*
|
||||
* 7.8 Format conversion of integer types
|
||||
*/
|
||||
|
||||
#include <sys/stdint.h>
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
|
||||
#include <machine/int_fmtio.h>
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_INTTYPES_H_ */
|
||||
@@ -0,0 +1,101 @@
|
||||
/* sys/ioc_net.h - NetBSD-friendly version of Minix net/ioctl.h
|
||||
*/
|
||||
/* net/ioctl.h - Network ioctl() command codes. Author: Kees J. Bot
|
||||
* 23 Nov 2002
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SYS_IOC_NET_H_
|
||||
#define _SYS_IOC_NET_H_
|
||||
|
||||
#include <minix/ioctl.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
#include <sys/ansi.h>
|
||||
#ifndef socklen_t
|
||||
typedef __socklen_t socklen_t;
|
||||
#define socklen_t __socklen_t
|
||||
#endif
|
||||
|
||||
#define MSG_CONTROL_MAX (1024 - sizeof(socklen_t))
|
||||
struct msg_control
|
||||
{
|
||||
char msg_control[MSG_CONTROL_MAX];
|
||||
socklen_t msg_controllen;
|
||||
};
|
||||
|
||||
|
||||
/* Network ioctls. */
|
||||
#define NWIOSETHOPT _IOW('n', 16, struct nwio_ethopt)
|
||||
#define NWIOGETHOPT _IOR('n', 17, struct nwio_ethopt)
|
||||
#define NWIOGETHSTAT _IOR('n', 18, struct nwio_ethstat)
|
||||
|
||||
#define NWIOARPGIP _IORW('n',20, struct nwio_arp)
|
||||
#define NWIOARPGNEXT _IORW('n',21, struct nwio_arp)
|
||||
#define NWIOARPSIP _IOW ('n',22, struct nwio_arp)
|
||||
#define NWIOARPDIP _IOW ('n',23, struct nwio_arp)
|
||||
|
||||
#define NWIOSIPCONF2 _IOW('n', 32, struct nwio_ipconf2)
|
||||
#define NWIOSIPCONF _IOW('n', 32, struct nwio_ipconf)
|
||||
#define NWIOGIPCONF2 _IOR('n', 33, struct nwio_ipconf2)
|
||||
#define NWIOGIPCONF _IOR('n', 33, struct nwio_ipconf)
|
||||
#define NWIOSIPOPT _IOW('n', 34, struct nwio_ipopt)
|
||||
#define NWIOGIPOPT _IOR('n', 35, struct nwio_ipopt)
|
||||
|
||||
#define NWIOGIPOROUTE _IORW('n', 40, struct nwio_route)
|
||||
#define NWIOSIPOROUTE _IOW ('n', 41, struct nwio_route)
|
||||
#define NWIODIPOROUTE _IOW ('n', 42, struct nwio_route)
|
||||
#define NWIOGIPIROUTE _IORW('n', 43, struct nwio_route)
|
||||
#define NWIOSIPIROUTE _IOW ('n', 44, struct nwio_route)
|
||||
#define NWIODIPIROUTE _IOW ('n', 45, struct nwio_route)
|
||||
|
||||
#define NWIOSTCPCONF _IOW('n', 48, struct nwio_tcpconf)
|
||||
#define NWIOGTCPCONF _IOR('n', 49, struct nwio_tcpconf)
|
||||
#define NWIOTCPCONN _IOW('n', 50, struct nwio_tcpcl)
|
||||
#define NWIOTCPLISTEN _IOW('n', 51, struct nwio_tcpcl)
|
||||
#define NWIOTCPATTACH _IOW('n', 52, struct nwio_tcpatt)
|
||||
#define NWIOTCPSHUTDOWN _IO ('n', 53)
|
||||
#define NWIOSTCPOPT _IOW('n', 54, struct nwio_tcpopt)
|
||||
#define NWIOGTCPOPT _IOR('n', 55, struct nwio_tcpopt)
|
||||
#define NWIOTCPPUSH _IO ('n', 56)
|
||||
#define NWIOTCPLISTENQ _IOW('n', 57, int)
|
||||
#define NWIOGTCPCOOKIE _IOR('n', 58, struct tcp_cookie)
|
||||
#define NWIOTCPACCEPTTO _IOW('n', 59, struct tcp_cookie)
|
||||
#define NWIOTCPGERROR _IOR('n', 60, int)
|
||||
|
||||
#define NWIOSUDPOPT _IOW('n', 64, struct nwio_udpopt)
|
||||
#define NWIOGUDPOPT _IOR('n', 65, struct nwio_udpopt)
|
||||
#define NWIOUDPPEEK _IOR('n', 66, struct udp_io_hdr)
|
||||
|
||||
#define NWIOGUDSFADDR _IOR ('n', 67, struct sockaddr_un) /* recvfrom() */
|
||||
#define NWIOSUDSTADDR _IOW ('n', 68, struct sockaddr_un) /* sendto() */
|
||||
#define NWIOSUDSADDR _IOW ('n', 69, struct sockaddr_un) /* bind() */
|
||||
#define NWIOGUDSADDR _IOR ('n', 70, struct sockaddr_un) /* getsockname() */
|
||||
#define NWIOGUDSPADDR _IOR ('n', 71, struct sockaddr_un) /* getpeername() */
|
||||
#define NWIOSUDSTYPE _IOW ('n', 72, int) /* socket() */
|
||||
#define NWIOSUDSBLOG _IOW ('n', 73, int) /* listen() */
|
||||
#define NWIOSUDSCONN _IOW ('n', 74, struct sockaddr_un) /* connect() */
|
||||
#define NWIOSUDSSHUT _IOW ('n', 75, int) /* shutdown() */
|
||||
#define NWIOSUDSPAIR _IOW ('n', 76, dev_t) /* socketpair() */
|
||||
#define NWIOSUDSPAIROLD _IOW ('n', 76, short) /* socketpair() */
|
||||
#define NWIOSUDSACCEPT _IOW ('n', 77, struct sockaddr_un) /* accept() */
|
||||
#define NWIOSUDSCTRL _IOW ('n', 78, struct msg_control) /* sendmsg() */
|
||||
#define NWIOGUDSCTRL _IORW('n', 79, struct msg_control) /* recvmsg() */
|
||||
|
||||
#define NWIOSPSIPOPT _IOW('n', 80, struct nwio_psipopt)
|
||||
#define NWIOGPSIPOPT _IOR('n', 81, struct nwio_psipopt)
|
||||
|
||||
/* setsockopt/setsockopt for unix domain sockets */
|
||||
#define NWIOGUDSSOTYPE _IOR('n', 90, int) /* SO_TYPE */
|
||||
#define NWIOGUDSPEERCRED _IOR('n', 91, struct ucred) /* SO_PEERCRED */
|
||||
#define NWIOGUDSPEERCREDOLD _IOR('n', 91, struct ucred_old) /* SO_PEERCRED */
|
||||
#define NWIOGUDSSNDBUF _IOR('n', 92, size_t) /* SO_SNDBUF */
|
||||
#define NWIOSUDSSNDBUF _IOW('n', 93, size_t) /* SO_SNDBUF */
|
||||
#define NWIOGUDSRCVBUF _IOR('n', 94, size_t) /* SO_RCVBUF */
|
||||
#define NWIOSUDSRCVBUF _IOW('n', 95, size_t) /* SO_RCVBUF */
|
||||
|
||||
#endif /* _NET__IOCTL_H */
|
||||
|
||||
/*
|
||||
* $PchId: ioctl.h,v 1.2 2003/07/25 14:34:03 philip Exp $
|
||||
*/
|
||||
+9
-1
@@ -14,11 +14,19 @@
|
||||
*/
|
||||
|
||||
#include <sys/ioc_tty.h> /* 'T' 't' 'k' */
|
||||
#include <net/ioctl.h> /* 'n' */
|
||||
#include <sys/ioc_net.h> /* 'n' */
|
||||
#include <sys/ioc_disk.h> /* 'd' */
|
||||
#include <sys/ioc_file.h> /* 'f' */
|
||||
#include <sys/ioc_memory.h> /* 'm' */
|
||||
#include <sys/ioc_tape.h> /* 'M' */
|
||||
#include <sys/ioc_sound.h> /* 's' */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define TIOCDRAIN TCDRAIN
|
||||
#define TIOCGETA TCGETS
|
||||
#define TIOCSETA TCSETS
|
||||
#define TIOCSETAW TCSETSW
|
||||
#define TIOCSETAF TCSETSF
|
||||
#endif
|
||||
|
||||
#endif /* _S_IOCTL_H */
|
||||
|
||||
+40
-31
@@ -1,42 +1,51 @@
|
||||
#ifndef _SYS_IPC_H
|
||||
#define _SYS_IPC_H
|
||||
/*
|
||||
* SVID compatible ipc.h file
|
||||
*/
|
||||
|
||||
/* For gid_t, uid_t */
|
||||
#ifndef _SYS_IPC_H_
|
||||
#define _SYS_IPC_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Mode bits for `msgget', `semget', and `shmget'. */
|
||||
/* Create key if key does not exist. */
|
||||
#define IPC_CREAT 01000
|
||||
/* Fail if key exists. */
|
||||
#define IPC_EXCL 02000
|
||||
/* Return error on wait. */
|
||||
#define IPC_NOWAIT 04000
|
||||
|
||||
/* Control commands for `msgctl', `semctl', and `shmctl'. */
|
||||
/* Remove identifier. */
|
||||
#define IPC_RMID 0
|
||||
/* Set `ipc_perm' options. */
|
||||
#define IPC_SET 1
|
||||
/* Get `ipc_perm' options. */
|
||||
#define IPC_STAT 2
|
||||
#define IPC_INFO 3 /* See ipcs. */
|
||||
|
||||
/* Special key values. */
|
||||
/* Private key. */
|
||||
#define IPC_PRIVATE ((key_t) 0)
|
||||
|
||||
/* Data structure used to pass permission information to IPC operations. */
|
||||
struct ipc_perm
|
||||
{
|
||||
key_t key; /* Key. */
|
||||
uid_t uid; /* Owner's user ID. */
|
||||
gid_t gid; /* Owner's group ID. */
|
||||
uid_t cuid; /* Creator's user ID. */
|
||||
gid_t cgid; /* Creator's group ID. */
|
||||
key_t key; /* Key. */
|
||||
uid_t uid; /* Owner's user ID. */
|
||||
gid_t gid; /* Owner's group ID. */
|
||||
uid_t cuid; /* Creator's user ID. */
|
||||
gid_t cgid; /* Creator's group ID. */
|
||||
unsigned short int mode; /* Reader/write permission. */
|
||||
unsigned short int __seq; /* Sequence number. */
|
||||
};
|
||||
|
||||
_PROTOTYPE( key_t ftok, (const char *__path, int __id));
|
||||
/* X/Open required constants (same values as system 5) */
|
||||
#define IPC_CREAT 001000 /* create entry if key does not exist */
|
||||
#define IPC_EXCL 002000 /* fail if key exists */
|
||||
#define IPC_NOWAIT 004000 /* error if request must wait */
|
||||
|
||||
#endif /* _SYS_IPC_H */
|
||||
#define IPC_PRIVATE (key_t)0 /* private key */
|
||||
|
||||
#define IPC_RMID 0 /* remove identifier */
|
||||
#define IPC_SET 1 /* set options */
|
||||
#define IPC_STAT 2 /* get options */
|
||||
|
||||
#ifdef __minix
|
||||
#define IPC_INFO 3 /* See ipcs. */
|
||||
#endif /* !__minix */
|
||||
|
||||
/*
|
||||
* Macro to convert between ipc ids and array indices or sequence ids.
|
||||
*/
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define IXSEQ_TO_IPCID(ix,perm) (((perm._seq) << 16) | (ix & 0xffff))
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
key_t ftok(const char *, int);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_IPC_H_ */
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
/* This file is intended for use by program code (possibly written in
|
||||
* assembly) that needs to manipulate a jmp_buf or sigjmp_buf. The JB_*
|
||||
* values are byte offsets into the jmp_buf and sigjmp_buf structures.
|
||||
*/
|
||||
|
||||
#ifndef _JMP_BUF_H
|
||||
#define _JMP_BUF_H
|
||||
|
||||
#include <minix/config.h>
|
||||
|
||||
#if defined(__ACK__)
|
||||
/* as per lib/ack/rts/setjmp.e */
|
||||
|
||||
/* note the lack of parentheses, which would confuse 'as' */
|
||||
#define JB_PC 0
|
||||
#define JB_SP JB_PC + _EM_PSIZE
|
||||
#define JB_LB JB_SP + _EM_PSIZE
|
||||
#define JB_MASK JB_LB + _EM_PSIZE
|
||||
#define JB_FLAGS JB_MASK + _EM_LSIZE
|
||||
|
||||
#if (CHIP == INTEL)
|
||||
#define JB_BP JB_LB
|
||||
#endif
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
|
||||
#if (CHIP == INTEL) && (_WORD_SIZE == 4)
|
||||
/* as per lib/gnu/rts/__setjmp.gs */
|
||||
|
||||
#define JB_FLAGS 0
|
||||
#define JB_MASK 4
|
||||
#define JB_PC 8
|
||||
#define JB_SP 12
|
||||
#define JB_BP 16
|
||||
#define JB_BX 20
|
||||
#define JB_CX 24
|
||||
#define JB_DX 28
|
||||
#define JB_SI 32
|
||||
#define JB_DI 36
|
||||
|
||||
#endif /* (CHIP == INTEL) && (_WORD_SIZE == 4) */
|
||||
|
||||
#endif /* __GNU__ */
|
||||
|
||||
#endif /* _JMP_BUF_H */
|
||||
@@ -0,0 +1,100 @@
|
||||
/* $NetBSD: localedef.h,v 1.9 2008/05/17 03:49:54 ginsbach Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_LOCALEDEF_H_
|
||||
#define _SYS_LOCALEDEF_H_
|
||||
|
||||
typedef struct {
|
||||
const char *yesexpr;
|
||||
const char *noexpr;
|
||||
const char *yesstr;
|
||||
const char *nostr;
|
||||
} _MessagesLocale;
|
||||
|
||||
extern const _MessagesLocale *_CurrentMessagesLocale;
|
||||
extern const _MessagesLocale _DefaultMessagesLocale;
|
||||
|
||||
|
||||
typedef struct {
|
||||
const char *int_curr_symbol;
|
||||
const char *currency_symbol;
|
||||
const char *mon_decimal_point;
|
||||
const char *mon_thousands_sep;
|
||||
const char *mon_grouping;
|
||||
const char *positive_sign;
|
||||
const char *negative_sign;
|
||||
char int_frac_digits;
|
||||
char frac_digits;
|
||||
char p_cs_precedes;
|
||||
char p_sep_by_space;
|
||||
char n_cs_precedes;
|
||||
char n_sep_by_space;
|
||||
char p_sign_posn;
|
||||
char n_sign_posn;
|
||||
char int_p_cs_precedes;
|
||||
char int_n_cs_precedes;
|
||||
char int_p_sep_by_space;
|
||||
char int_n_sep_by_space;
|
||||
char int_p_sign_posn;
|
||||
char int_n_sign_posn;
|
||||
} _MonetaryLocale;
|
||||
|
||||
extern const _MonetaryLocale *_CurrentMonetaryLocale;
|
||||
extern const _MonetaryLocale _DefaultMonetaryLocale;
|
||||
|
||||
|
||||
typedef struct {
|
||||
const char *decimal_point;
|
||||
const char *thousands_sep;
|
||||
const char *grouping;
|
||||
} _NumericLocale;
|
||||
|
||||
extern const _NumericLocale *_CurrentNumericLocale;
|
||||
extern const _NumericLocale _DefaultNumericLocale;
|
||||
|
||||
|
||||
typedef struct {
|
||||
const char *abday[7];
|
||||
const char *day[7];
|
||||
const char *abmon[12];
|
||||
const char *mon[12];
|
||||
const char *am_pm[2];
|
||||
const char *d_t_fmt;
|
||||
const char *d_fmt;
|
||||
const char *t_fmt;
|
||||
const char *t_fmt_ampm;
|
||||
} _TimeLocale;
|
||||
|
||||
extern const _TimeLocale *_CurrentTimeLocale;
|
||||
extern const _TimeLocale _DefaultTimeLocale;
|
||||
|
||||
#endif /* !_SYS_LOCALEDEF_H_ */
|
||||
@@ -0,0 +1,58 @@
|
||||
/* $NetBSD: md4.h,v 1.7 2005/12/26 18:41:36 perry Exp $ */
|
||||
|
||||
/*
|
||||
* This file is derived from the RSA Data Security, Inc. MD4 Message-Digest
|
||||
* Algorithm and has been modified by Jason R. Thorpe <thorpej@NetBSD.org>
|
||||
* for portability and formatting.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
* rights reserved.
|
||||
*
|
||||
* License to copy and use this software is granted provided that it
|
||||
* is identified as the "RSA Data Security, Inc. MD4 Message-Digest
|
||||
* Algorithm" in all material mentioning or referencing this software
|
||||
* or this function.
|
||||
*
|
||||
* License is also granted to make and use derivative works provided
|
||||
* that such works are identified as "derived from the RSA Data
|
||||
* Security, Inc. MD4 Message-Digest Algorithm" in all material
|
||||
* mentioning or referencing the derived work.
|
||||
*
|
||||
* RSA Data Security, Inc. makes no representations concerning either
|
||||
* the merchantability of this software or the suitability of this
|
||||
* software for any particular purpose. It is provided "as is"
|
||||
* without express or implied warranty of any kind.
|
||||
*
|
||||
* These notices must be retained in any copies of any part of this
|
||||
* documentation and/or software.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_MD4_H_
|
||||
#define _SYS_MD4_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define MD4_DIGEST_LENGTH 16
|
||||
|
||||
/* MD4 context. */
|
||||
typedef struct MD4Context {
|
||||
uint32_t state[4]; /* state (ABCD) */
|
||||
uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */
|
||||
unsigned char buffer[64]; /* input buffer */
|
||||
} MD4_CTX;
|
||||
|
||||
__BEGIN_DECLS
|
||||
void MD4Init(MD4_CTX *);
|
||||
void MD4Update(MD4_CTX *, const unsigned char *, unsigned int);
|
||||
void MD4Final(unsigned char[MD4_DIGEST_LENGTH], MD4_CTX *);
|
||||
#ifndef _KERNEL
|
||||
char *MD4End(MD4_CTX *, char *);
|
||||
char *MD4File(const char *, char *);
|
||||
char *MD4Data(const unsigned char *, unsigned int, char *);
|
||||
#endif /* _KERNEL */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_MD4_H_ */
|
||||
@@ -0,0 +1,58 @@
|
||||
/* $NetBSD: md5.h,v 1.9 2005/12/26 18:41:36 perry Exp $ */
|
||||
|
||||
/*
|
||||
* This file is derived from the RSA Data Security, Inc. MD5 Message-Digest
|
||||
* Algorithm and has been modified by Jason R. Thorpe <thorpej@NetBSD.org>
|
||||
* for portability and formatting.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
|
||||
* rights reserved.
|
||||
*
|
||||
* License to copy and use this software is granted provided that it
|
||||
* is identified as the "RSA Data Security, Inc. MD5 Message-Digest
|
||||
* Algorithm" in all material mentioning or referencing this software
|
||||
* or this function.
|
||||
*
|
||||
* License is also granted to make and use derivative works provided
|
||||
* that such works are identified as "derived from the RSA Data
|
||||
* Security, Inc. MD5 Message-Digest Algorithm" in all material
|
||||
* mentioning or referencing the derived work.
|
||||
*
|
||||
* RSA Data Security, Inc. makes no representations concerning either
|
||||
* the merchantability of this software or the suitability of this
|
||||
* software for any particular purpose. It is provided "as is"
|
||||
* without express or implied warranty of any kind.
|
||||
*
|
||||
* These notices must be retained in any copies of any part of this
|
||||
* documentation and/or software.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_MD5_H_
|
||||
#define _SYS_MD5_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define MD5_DIGEST_LENGTH 16
|
||||
#define MD5_DIGEST_STRING_LENGTH 33
|
||||
|
||||
/* MD5 context. */
|
||||
typedef struct MD5Context {
|
||||
uint32_t state[4]; /* state (ABCD) */
|
||||
uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */
|
||||
unsigned char buffer[64]; /* input buffer */
|
||||
} MD5_CTX;
|
||||
|
||||
__BEGIN_DECLS
|
||||
void MD5Init(MD5_CTX *);
|
||||
void MD5Update(MD5_CTX *, const unsigned char *, unsigned int);
|
||||
void MD5Final(unsigned char[MD5_DIGEST_LENGTH], MD5_CTX *);
|
||||
#ifndef _KERNEL
|
||||
char *MD5End(MD5_CTX *, char *);
|
||||
char *MD5File(const char *, char *);
|
||||
char *MD5Data(const unsigned char *, unsigned int, char *);
|
||||
#endif /* _KERNEL */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_MD5_H_ */
|
||||
+65
-22
@@ -1,39 +1,82 @@
|
||||
#ifndef _SYS_MMAN_H_
|
||||
#define _SYS_MMAN_H_
|
||||
|
||||
#ifndef _MMAN_H
|
||||
#define _MMAN_H
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#ifndef _TYPE_H
|
||||
#include <minix/type.h>
|
||||
#include <machine/ansi.h>
|
||||
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
/* prot argument for mmap() */
|
||||
#include <sys/ansi.h>
|
||||
|
||||
#ifndef mode_t
|
||||
typedef __mode_t mode_t;
|
||||
#define mode_t __mode_t
|
||||
#endif
|
||||
|
||||
#ifndef off_t
|
||||
typedef __off_t off_t; /* file offset */
|
||||
#define off_t __off_t
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Protections are chosen from these bits, or-ed together
|
||||
*/
|
||||
#define PROT_NONE 0x00 /* no permissions */
|
||||
#define PROT_READ 0x01 /* pages can be read */
|
||||
#define PROT_WRITE 0x02 /* pages can be written */
|
||||
#define PROT_EXEC 0x04 /* pages can be executed */
|
||||
|
||||
/* flags argument for mmap() */
|
||||
#define MAP_PRIVATE 0x0002 /* changes are private */
|
||||
#define MAP_ANON 0x0004 /* anonymous memory */
|
||||
/*
|
||||
* Flags contain sharing type and options.
|
||||
* Sharing types; choose one.
|
||||
*/
|
||||
#ifndef __minix
|
||||
#define MAP_SHARED 0x0001 /* share changes */
|
||||
#endif
|
||||
#define MAP_PRIVATE 0x0002 /* changes are private */
|
||||
|
||||
/*
|
||||
* Mapping type
|
||||
*/
|
||||
#define MAP_ANON 0x0004 /* anonymous memory */
|
||||
|
||||
/*
|
||||
* Minix specific flags.
|
||||
*/
|
||||
#define MAP_PREALLOC 0x0008 /* not on-demand */
|
||||
#define MAP_CONTIG 0x0010 /* contiguous in physical memory */
|
||||
#define MAP_LOWER16M 0x0020 /* physically below 16MB */
|
||||
#define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */
|
||||
#define MAP_LOWER1M 0x0080 /* physically below 16MB */
|
||||
#define MAP_IPC_SHARED 0x0100 /* used to implement shared memory */
|
||||
#define MAP_ALIGNMENT_64KB MAP_ALIGN64K
|
||||
#define MAP_IPC_SHARED 0x0100 /* share changes */
|
||||
|
||||
/* mmap() error return */
|
||||
#define MAP_FAILED ((void *)-1)
|
||||
/*
|
||||
* Error indicator returned by mmap(2)
|
||||
*/
|
||||
#define MAP_FAILED ((void *) -1) /* mmap() failed */
|
||||
|
||||
_PROTOTYPE( void *minix_mmap, (void *, size_t, int, int, int, off_t));
|
||||
_PROTOTYPE( int minix_munmap, (void *, size_t));
|
||||
_PROTOTYPE( int minix_munmap_text, (void *, size_t));
|
||||
_PROTOTYPE( void *vm_remap, (endpoint_t d, endpoint_t s, void *da,
|
||||
void *sa, size_t si));
|
||||
_PROTOTYPE( void *vm_remap_ro, (endpoint_t d, endpoint_t s, void *da,
|
||||
void *sa, size_t si));
|
||||
_PROTOTYPE( int vm_unmap, (endpoint_t endpt, void *addr));
|
||||
_PROTOTYPE( unsigned long vm_getphys, (endpoint_t endpt, void *addr));
|
||||
_PROTOTYPE( u8_t vm_getrefcount, (endpoint_t endpt, void *addr));
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#endif /* _MMAN_H */
|
||||
__BEGIN_DECLS
|
||||
#ifndef __minix
|
||||
void * mmap(void *, size_t, int, int, int, off_t);
|
||||
int munmap(void *, size_t);
|
||||
#else
|
||||
void * minix_mmap(void *, size_t, int, int, int, off_t);
|
||||
int minix_munmap(void *, size_t);
|
||||
int minix_munmap_text(void *, size_t);
|
||||
void * vm_remap(int d, int s, void *da, void *sa, size_t si);
|
||||
void * vm_remap_ro(int d, int s, void *da, void *sa, size_t si);
|
||||
int vm_unmap(int endpt, void *addr);
|
||||
unsigned long vm_getphys(int endpt, void *addr);
|
||||
u8_t vm_getrefcount(int endpt, void *addr);
|
||||
#endif /* __minix */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_MMAN_H_ */
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef _SYS_MOUNT_H
|
||||
#define _SYS_MOUNT_H_
|
||||
|
||||
/*
|
||||
* File system types.
|
||||
*/
|
||||
#define MOUNT_FFS "ffs" /* UNIX "Fast" Filesystem */
|
||||
#define MOUNT_UFS MOUNT_FFS /* for compatibility */
|
||||
#define MOUNT_NFS "nfs" /* Network Filesystem */
|
||||
#define MOUNT_MFS "mfs" /* Memory Filesystem */
|
||||
#define MOUNT_MSDOS "msdos" /* MSDOS Filesystem */
|
||||
#define MOUNT_LFS "lfs" /* Log-based Filesystem */
|
||||
#define MOUNT_FDESC "fdesc" /* File Descriptor Filesystem */
|
||||
#define MOUNT_NULL "null" /* Minimal Filesystem Layer */
|
||||
#define MOUNT_OVERLAY "overlay" /* Minimal Overlay Filesystem Layer */
|
||||
#define MOUNT_UMAP "umap" /* User/Group Identifier Remapping Filesystem */
|
||||
#define MOUNT_KERNFS "kernfs" /* Kernel Information Filesystem */
|
||||
#define MOUNT_PROCFS "procfs" /* /proc Filesystem */
|
||||
#define MOUNT_AFS "afs" /* Andrew Filesystem */
|
||||
#define MOUNT_CD9660 "cd9660" /* ISO9660 (aka CDROM) Filesystem */
|
||||
#define MOUNT_UNION "union" /* Union (translucent) Filesystem */
|
||||
#define MOUNT_ADOSFS "adosfs" /* AmigaDOS Filesystem */
|
||||
#define MOUNT_EXT2FS "ext2fs" /* Second Extended Filesystem */
|
||||
#define MOUNT_CFS "coda" /* Coda Filesystem */
|
||||
#define MOUNT_CODA MOUNT_CFS /* Coda Filesystem */
|
||||
#define MOUNT_FILECORE "filecore" /* Acorn Filecore Filesystem */
|
||||
#define MOUNT_NTFS "ntfs" /* Windows/NT Filesystem */
|
||||
#define MOUNT_SMBFS "smbfs" /* CIFS (SMB) */
|
||||
#define MOUNT_PTYFS "ptyfs" /* Pseudo tty filesystem */
|
||||
#define MOUNT_TMPFS "tmpfs" /* Efficient memory file-system */
|
||||
#define MOUNT_UDF "udf" /* UDF CD/DVD filesystem */
|
||||
#define MOUNT_SYSVBFS "sysvbfs" /* System V Boot Filesystem */
|
||||
#define MOUNT_PUFFS "puffs" /* Pass-to-Userspace filesystem */
|
||||
#define MOUNT_HFS "hfs" /* Apple HFS+ Filesystem */
|
||||
#define MOUNT_EFS "efs" /* SGI's Extent Filesystem */
|
||||
#define MOUNT_ZFS "zfs" /* Sun ZFS */
|
||||
#define MOUNT_NILFS "nilfs" /* NTT's NiLFS(2) logging file system */
|
||||
#define MOUNT_RUMPFS "rumpfs" /* rump virtual file system */
|
||||
#define MOUNT_V7FS "v7fs" /* 7th Edition of Unix Filesystem */
|
||||
|
||||
#include <sys/statvfs.h>
|
||||
#include <minix/mount.h>
|
||||
|
||||
#endif /* !_SYS_MOUNT_H_ */
|
||||
+175
-13
@@ -1,22 +1,184 @@
|
||||
#ifndef _SYS_PARAM_H_
|
||||
#define _SYS_PARAM_H_
|
||||
|
||||
/*
|
||||
sys/param.h
|
||||
*/
|
||||
* Historic BSD #defines -- probably will remain untouched for all time.
|
||||
*/
|
||||
#define BSD 199506 /* System version (year & month). */
|
||||
#define BSD4_3 1
|
||||
#ifndef __minix
|
||||
#define BSD4_4 1
|
||||
#endif
|
||||
|
||||
#ifndef __SYS_PARAM_H__
|
||||
#define __SYS_PARAM_H__
|
||||
/*
|
||||
* #define __NetBSD_Version__ MMmmrrpp00
|
||||
*
|
||||
* M = major version
|
||||
* m = minor version; a minor number of 99 indicates current.
|
||||
* r = 0 (*)
|
||||
* p = patchlevel
|
||||
*
|
||||
* When new releases are made, src/gnu/usr.bin/groff/tmac/mdoc.local
|
||||
* needs to be updated and the changes sent back to the groff maintainers.
|
||||
*
|
||||
* (*) Up to 2.0I "release" used to be "",A-Z,Z[A-Z] but numeric
|
||||
* e.g. NetBSD-1.2D = 102040000 ('D' == 4)
|
||||
* NetBSD-2.0H (200080000) was changed on 20041001 to:
|
||||
* 2.99.9 (299000900)
|
||||
*/
|
||||
|
||||
#include <limits.h>
|
||||
#include <minix/limits.h>
|
||||
#define __NetBSD_Version__ 599002900 /* NetBSD 5.99.29 */
|
||||
|
||||
#define MAXHOSTNAMELEN 256 /* max hostname size */
|
||||
#define NGROUPS 8 /* max number of supplementary groups */
|
||||
#define MAXPATHLEN __MINIX_PATH_MAX
|
||||
#define MAXCOMLEN 16 /* max command length */
|
||||
#define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
|
||||
(m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
|
||||
|
||||
/*
|
||||
* Historical NetBSD #define
|
||||
*
|
||||
* NetBSD 1.4 was the last release for which this value was incremented.
|
||||
* The value is now permanently fixed at 199905. It will never be
|
||||
* changed again.
|
||||
*
|
||||
* New code must use __NetBSD_Version__ instead, and should not even
|
||||
* count on NetBSD being defined.
|
||||
*
|
||||
*/
|
||||
|
||||
#define NetBSD 199905 /* NetBSD version (year & month). */
|
||||
|
||||
#include <sys/null.h>
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <sys/inttypes.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
* Machine-independent constants (some used in following include files).
|
||||
* Redefined constants are from POSIX 1003.1 limits file.
|
||||
*
|
||||
* MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>)
|
||||
* MAXHOSTNAMELEN should be >= (_POSIX_HOST_NAME_MAX + 1) (see <limits.h>)
|
||||
* MAXLOGNAME should be >= UT_NAMESIZE (see <utmp.h>)
|
||||
*/
|
||||
#include <sys/syslimits.h>
|
||||
|
||||
|
||||
#define MAXCOMLEN 16 /* max command name remembered */
|
||||
#define MAXINTERP PATH_MAX /* max interpreter file name length */
|
||||
/* DEPRECATED: use LOGIN_NAME_MAX instead. */
|
||||
#define MAXLOGNAME (LOGIN_NAME_MAX - 1) /* max login name length */
|
||||
#ifndef __minix
|
||||
#define NCARGS ARG_MAX /* max bytes for an exec function */
|
||||
#endif
|
||||
#define NGROUPS NGROUPS_MAX /* max number groups */
|
||||
#define NOGROUP 65535 /* marker for empty group set member */
|
||||
|
||||
#define MAXHOSTNAMELEN 256 /* max hostname size */
|
||||
|
||||
#ifndef NOFILE
|
||||
#define NOFILE OPEN_MAX /* max open files per process */
|
||||
#endif
|
||||
#ifndef MAXUPRC /* max simultaneous processes */
|
||||
#define MAXUPRC CHILD_MAX /* POSIX 1003.1-compliant default */
|
||||
#else
|
||||
#if (MAXUPRC - 0) < CHILD_MAX
|
||||
#error MAXUPRC less than CHILD_MAX. See options(4) for details.
|
||||
#endif /* (MAXUPRC - 0) < CHILD_MAX */
|
||||
#endif /* !defined(MAXUPRC) */
|
||||
|
||||
/* Signals. */
|
||||
#include <sys/signal.h>
|
||||
|
||||
/* Machine type dependent parameters. */
|
||||
#include <machine/param.h>
|
||||
#include <machine/limits.h>
|
||||
|
||||
/* pages ("clicks") to disk blocks */
|
||||
#define ctod(x) ((x) << (PGSHIFT - DEV_BSHIFT))
|
||||
#define dtoc(x) ((x) >> (PGSHIFT - DEV_BSHIFT))
|
||||
|
||||
/* bytes to pages */
|
||||
#define ctob(x) ((x) << PGSHIFT)
|
||||
#define btoc(x) (((x) + PGOFSET) >> PGSHIFT)
|
||||
|
||||
/* bytes to disk blocks */
|
||||
#define dbtob(x) ((x) << DEV_BSHIFT)
|
||||
#define btodb(x) ((x) >> DEV_BSHIFT)
|
||||
|
||||
#ifndef COHERENCY_UNIT
|
||||
#define COHERENCY_UNIT 64
|
||||
#endif
|
||||
#ifndef CACHE_LINE_SIZE
|
||||
#define CACHE_LINE_SIZE 64
|
||||
#endif
|
||||
#ifndef MAXCPUS
|
||||
#define MAXCPUS 32
|
||||
#endif
|
||||
#ifndef MAX_LWP_PER_PROC
|
||||
#define MAX_LWP_PER_PROC 8000
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Miscellaneous.
|
||||
*/
|
||||
#define NBPW sizeof(int) /* number of bytes per word (integer) */
|
||||
|
||||
#define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */
|
||||
#define NODEV (dev_t)(-1) /* non-existent device */
|
||||
|
||||
#define CBLOCK 64 /* Clist block size, must be a power of 2. */
|
||||
#define CBQSIZE (CBLOCK/NBBY) /* Quote bytes/cblock - can do better. */
|
||||
/* Data chars/clist. */
|
||||
#define CBSIZE (CBLOCK - (int)sizeof(struct cblock *) - CBQSIZE)
|
||||
#define CROUND (CBLOCK - 1) /* Clist rounding. */
|
||||
|
||||
/*
|
||||
* File system parameters and macros.
|
||||
*
|
||||
* The file system is made out of blocks of at most MAXBSIZE units, with
|
||||
* smaller units (fragments) only in the last direct block. MAXBSIZE
|
||||
* primarily determines the size of buffers in the buffer pool. It may be
|
||||
* made larger without any effect on existing file systems; however making
|
||||
* it smaller may make some file systems unmountable.
|
||||
*/
|
||||
#ifndef MAXBSIZE /* XXX */
|
||||
#define MAXBSIZE MAXPHYS
|
||||
#endif
|
||||
#define MAXFRAG 8
|
||||
|
||||
/*
|
||||
* MAXPATHLEN defines the longest permissible path length after expanding
|
||||
* symbolic links. It is used to allocate a temporary buffer from the buffer
|
||||
* pool in which to do the name expansion, hence should be a power of two,
|
||||
* and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the
|
||||
* maximum number of symbolic links that may be expanded in a path name.
|
||||
* It should be set high enough to allow all legitimate uses, but halt
|
||||
* infinite loops reasonably quickly.
|
||||
*
|
||||
* MAXSYMLINKS should be >= _POSIX_SYMLOOP_MAX (see <limits.h>)
|
||||
*/
|
||||
#define MAXPATHLEN PATH_MAX
|
||||
#define MAXSYMLINKS 32
|
||||
|
||||
/* Bit map related macros. */
|
||||
#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
|
||||
#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
|
||||
#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
|
||||
#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
|
||||
|
||||
/* Macros for counting and rounding. */
|
||||
#ifndef howmany
|
||||
#define howmany(x, y) (((x)+((y)-1))/(y))
|
||||
#endif
|
||||
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
|
||||
#define rounddown(x,y) (((x)/(y))*(y))
|
||||
#define roundup2(x, m) (((x) + (m) - 1) & ~((m) - 1))
|
||||
#define powerof2(x) ((((x)-1)&(x))==0)
|
||||
|
||||
/* Macros for min/max. */
|
||||
#define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b))
|
||||
#define MAX(a,b) ((/*CONSTCOND*/(a)>(b))?(a):(b))
|
||||
#define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b))
|
||||
#define MAX(a,b) ((/*CONSTCOND*/(a)>(b))?(a):(b))
|
||||
|
||||
#endif /* __SYS_PARAM_H__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* !_SYS_PARAM_H_ */
|
||||
|
||||
+2
-2
@@ -32,10 +32,10 @@
|
||||
#ifndef _NBCOMPAT_POLL_H_
|
||||
#define _NBCOMPAT_POLL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
typedef unsigned int nfds_t;
|
||||
|
||||
#define INFTIM -1
|
||||
|
||||
struct pollfd {
|
||||
int fd; /* file descriptor */
|
||||
short events; /* events to look for */
|
||||
|
||||
@@ -50,10 +50,10 @@ struct ptrace_range {
|
||||
};
|
||||
|
||||
/* Function Prototypes. */
|
||||
#ifndef _MINIX_ANSI_H
|
||||
#include <minix/ansi.h>
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
_PROTOTYPE( long ptrace, (int _req, pid_t _pid, long _addr, long _data) );
|
||||
__BEGIN_DECLS
|
||||
long ptrace(int _req, pid_t _pid, long _addr, long _data);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _PTRACE_H */
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
/* $NetBSD: ptree.h,v 1.3 2008/11/25 15:13:47 ad Exp $ */
|
||||
/*-
|
||||
* Copyright (c) 2008 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Matt Thomas <matt@3am-software.com>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef _SYS_PTREE_H_
|
||||
#define _SYS_PTREE_H_
|
||||
|
||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
PT_DESCENDING=-1,
|
||||
PT_ASCENDING=1
|
||||
} pt_direction_t;
|
||||
|
||||
typedef unsigned int pt_slot_t;
|
||||
typedef unsigned int pt_bitoff_t;
|
||||
typedef unsigned int pt_bitlen_t;
|
||||
|
||||
typedef struct pt_node {
|
||||
uintptr_t ptn_slots[2]; /* must be first */
|
||||
#define PT_SLOT_LEFT 0
|
||||
#define PT_SLOT_RIGHT 1
|
||||
#ifdef _PT_PRIVATE
|
||||
#define PT_SLOT_ROOT 0
|
||||
#define PT_SLOT_OTHER 1
|
||||
#define PT_SLOT_ODDMAN 1
|
||||
#define PT_TYPE_LEAF 0x00000000
|
||||
#define PT_TYPE_BRANCH 0x00000001
|
||||
#define PT_TYPE_MASK 0x00000001
|
||||
#endif /* _PT_PRIVATE */
|
||||
|
||||
uint32_t ptn_nodedata;
|
||||
#ifdef _PT_PRIVATE
|
||||
#define PTN_LEAF_POSITION_BITS 8
|
||||
#define PTN_LEAF_POSITION_SHIFT 0
|
||||
#define PTN_BRANCH_POSITION_BITS 8
|
||||
#define PTN_BRANCH_POSITION_SHIFT 8
|
||||
#ifndef PTNOMASK
|
||||
#define PTN_MASK_BITLEN_BITS 15
|
||||
#define PTN_MASK_BITLEN_SHIFT 16
|
||||
#define PTN_MASK_FLAG 0x80000000
|
||||
#endif
|
||||
#endif /* _PT_PRIVATE */
|
||||
|
||||
uint32_t ptn_branchdata;
|
||||
#ifdef _PT_PRIVATE
|
||||
#define PTN_BRANCH_BITOFF_BITS 15
|
||||
#define PTN_BRANCH_BITOFF_SHIFT 0
|
||||
#define PTN_BRANCH_BITLEN_BITS 8
|
||||
#define PTN_BRANCH_BITLEN_SHIFT 16
|
||||
#if 0
|
||||
#define PTN_ORIENTATION_BITS 1
|
||||
#define PTN_ORIENTATION_SHIFT 30
|
||||
#endif
|
||||
#define PTN_BRANCH_UNUSED 0x3f000000
|
||||
#define PTN_XBRANCH_FLAG 0x80000000
|
||||
#endif /* _PT_PRIVATE */
|
||||
} pt_node_t;
|
||||
|
||||
#ifdef _PT_PRIVATE
|
||||
#define PT_NODE(node) ((pt_node_t *)(node & ~PT_TYPE_MASK))
|
||||
#define PT_TYPE(node) ((node) & PT_TYPE_MASK)
|
||||
#define PT_NULL 0
|
||||
#define PT_NULL_P(node) ((node) == PT_NULL)
|
||||
#define PT_LEAF_P(node) (PT_TYPE(node) == PT_TYPE_LEAF)
|
||||
#define PT_BRANCH_P(node) (PT_TYPE(node) == PT_TYPE_BRANCH)
|
||||
#define PTN__TYPELESS(ptn) (((uintptr_t)ptn) & ~PT_TYPE_MASK)
|
||||
#define PTN_LEAF(ptn) (PTN__TYPELESS(ptn) | PT_TYPE_LEAF)
|
||||
#define PTN_BRANCH(ptn) (PTN__TYPELESS(ptn) | PT_TYPE_BRANCH)
|
||||
|
||||
#ifndef PTNOMASK
|
||||
#define PTN_MARK_MASK(ptn) ((ptn)->ptn_nodedata |= PTN_MASK_FLAG)
|
||||
#define PTN_ISMASK_P(ptn) (((ptn)->ptn_nodedata & PTN_MASK_FLAG) != 0)
|
||||
#endif
|
||||
#define PTN_MARK_XBRANCH(ptn) ((ptn)->ptn_branchdata |= PTN_XBRANCH_FLAG)
|
||||
#define PTN_ISXBRANCH_P(ptn) (((ptn)->ptn_branchdata & PTN_XBRANCH_FLAG) != 0)
|
||||
#define PTN_ISROOT_P(pt, ptn) ((ptn) == &(pt)->pt_rootnode)
|
||||
|
||||
#define PTN_BRANCH_SLOT(ptn,slot) ((ptn)->ptn_slots[slot])
|
||||
#define PTN_BRANCH_ROOT_SLOT(ptn) ((ptn)->ptn_slots[PT_SLOT_ROOT])
|
||||
#define PTN_BRANCH_ODDMAN_SLOT(ptn) ((ptn)->ptn_slots[PT_SLOT_ODDMAN])
|
||||
#define PTN_COPY_BRANCH_SLOTS(dst,src) \
|
||||
((dst)->ptn_slots[PT_SLOT_LEFT ] = (src)->ptn_slots[PT_SLOT_LEFT ], \
|
||||
(dst)->ptn_slots[PT_SLOT_RIGHT] = (src)->ptn_slots[PT_SLOT_RIGHT])
|
||||
#define PTN_ISSLOTVALID_P(ptn,slot) ((slot) < (1 << PTN_BRANCH_BITLEN(pt)))
|
||||
|
||||
#define PT__MASK(n) ((1 << n ## _BITS) - 1)
|
||||
#define PT__SHIFT(n) (n ## _SHIFT)
|
||||
#define PTN__EXTRACT(field, b) \
|
||||
(((field) >> PT__SHIFT(b)) & PT__MASK(b))
|
||||
#define PTN__INSERT2(field, v, shift, mask) \
|
||||
((field) = ((field) & ~((mask) << (shift))) | ((v) << (shift)))
|
||||
#define PTN__INSERT(field, b, v) \
|
||||
PTN__INSERT2(field, v, PT__SHIFT(b), PT__MASK(b))
|
||||
|
||||
#define PTN_BRANCH_BITOFF(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_branchdata, PTN_BRANCH_BITOFF)
|
||||
#define PTN_BRANCH_BITLEN(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_branchdata, PTN_BRANCH_BITLEN)
|
||||
#define PTN_SET_BRANCH_BITOFF(ptn,bitoff) \
|
||||
PTN__INSERT((ptn)->ptn_branchdata, PTN_BRANCH_BITOFF, bitoff)
|
||||
#define PTN_SET_BRANCH_BITLEN(ptn,bitlen) \
|
||||
PTN__INSERT((ptn)->ptn_branchdata, PTN_BRANCH_BITLEN, bitlen)
|
||||
|
||||
#define PTN_LEAF_POSITION(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_nodedata, PTN_LEAF_POSITION)
|
||||
#define PTN_BRANCH_POSITION(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_nodedata, PTN_BRANCH_POSITION)
|
||||
#define PTN_SET_LEAF_POSITION(ptn,slot) \
|
||||
PTN__INSERT((ptn)->ptn_nodedata, PTN_LEAF_POSITION, slot)
|
||||
#define PTN_SET_BRANCH_POSITION(ptn,slot) \
|
||||
PTN__INSERT((ptn)->ptn_nodedata, PTN_BRANCH_POSITION, slot)
|
||||
|
||||
#ifndef PTNOMASK
|
||||
#define PTN_MASK_BITLEN(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_nodedata, PTN_MASK_BITLEN)
|
||||
#define PTN_SET_MASK_BITLEN(ptn,masklen) \
|
||||
PTN__INSERT((ptn)->ptn_nodedata, PTN_MASK_BITLEN, masklen)
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#define PTN_ORIENTATION(ptn) \
|
||||
PTN__EXTRACT((ptn)->ptn_branchdata, PTN_ORIENTATION)
|
||||
#define PTN_SET_ORIENTATION(ptn,slot) \
|
||||
PTN__INSERT((ptn)->ptn_branchdata, PTN_ORIENTATION, slot)
|
||||
#endif
|
||||
#endif /* _PT_PRIVATE */
|
||||
|
||||
typedef struct pt_tree_ops {
|
||||
bool (*ptto_matchnode)(const void *, const void *, pt_bitoff_t,
|
||||
pt_bitoff_t *, pt_slot_t *);
|
||||
bool (*ptto_matchkey)(const void *, const void *, pt_bitoff_t,
|
||||
pt_bitlen_t);
|
||||
pt_slot_t (*ptto_testnode)(const void *, pt_bitoff_t, pt_bitlen_t);
|
||||
pt_slot_t (*ptto_testkey)(const void *, pt_bitoff_t, pt_bitlen_t);
|
||||
} pt_tree_ops_t;
|
||||
|
||||
typedef struct pt_tree {
|
||||
pt_node_t pt_rootnode;
|
||||
#define pt_root pt_rootnode.ptn_slots[PT_SLOT_ROOT]
|
||||
#define pt_oddman pt_rootnode.ptn_slots[PT_SLOT_ODDMAN]
|
||||
const pt_tree_ops_t *pt_ops;
|
||||
size_t pt_node_offset;
|
||||
size_t pt_key_offset;
|
||||
uintptr_t pt_spare[4];
|
||||
} pt_tree_t;
|
||||
|
||||
#define PT_FILTER_MASK 0x00000001 /* node is a mask */
|
||||
typedef bool (*pt_filter_t)(void *, const void *, int);
|
||||
|
||||
void ptree_init(pt_tree_t *, const pt_tree_ops_t *, size_t, size_t);
|
||||
bool ptree_insert_node(pt_tree_t *, void *);
|
||||
bool ptree_insert_mask_node(pt_tree_t *, void *, pt_bitlen_t);
|
||||
void * ptree_find_filtered_node(pt_tree_t *, void *, pt_filter_t, void *);
|
||||
#define ptree_find_node(pt,key) \
|
||||
ptree_find_filtered_node((pt), (key), NULL, NULL)
|
||||
void ptree_remove_node(pt_tree_t *, void *);
|
||||
void * ptree_iterate(pt_tree_t *, const void *, pt_direction_t);
|
||||
|
||||
#endif /* _SYS_PTREE_H_ */
|
||||
@@ -0,0 +1,194 @@
|
||||
/* $NetBSD: rbtree.h,v 1.1 2010/09/25 01:42:40 matt Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Matt Thomas <matt@3am-software.com>.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_RBTREE_H_
|
||||
#define _SYS_RBTREE_H_
|
||||
|
||||
#if defined(_KERNEL) || defined(_STANDALONE)
|
||||
#include <sys/types.h>
|
||||
#else
|
||||
#include <stdbool.h>
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
#include <sys/queue.h>
|
||||
#include <sys/endian.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
typedef struct rb_node {
|
||||
struct rb_node *rb_nodes[2];
|
||||
#define RB_DIR_LEFT 0
|
||||
#define RB_DIR_RIGHT 1
|
||||
#define RB_DIR_OTHER 1
|
||||
#define rb_left rb_nodes[RB_DIR_LEFT]
|
||||
#define rb_right rb_nodes[RB_DIR_RIGHT]
|
||||
|
||||
/*
|
||||
* rb_info contains the two flags and the parent back pointer.
|
||||
* We put the two flags in the low two bits since we know that
|
||||
* rb_node will have an alignment of 4 or 8 bytes.
|
||||
*/
|
||||
uintptr_t rb_info;
|
||||
#define RB_FLAG_POSITION 0x2
|
||||
#define RB_FLAG_RED 0x1
|
||||
#define RB_FLAG_MASK (RB_FLAG_POSITION|RB_FLAG_RED)
|
||||
#define RB_FATHER(rb) \
|
||||
((struct rb_node *)((rb)->rb_info & ~RB_FLAG_MASK))
|
||||
#define RB_SET_FATHER(rb, father) \
|
||||
((void)((rb)->rb_info = (uintptr_t)(father)|((rb)->rb_info & RB_FLAG_MASK)))
|
||||
|
||||
#define RB_SENTINEL_P(rb) ((rb) == NULL)
|
||||
#define RB_LEFT_SENTINEL_P(rb) RB_SENTINEL_P((rb)->rb_left)
|
||||
#define RB_RIGHT_SENTINEL_P(rb) RB_SENTINEL_P((rb)->rb_right)
|
||||
#define RB_FATHER_SENTINEL_P(rb) RB_SENTINEL_P(RB_FATHER((rb)))
|
||||
#define RB_CHILDLESS_P(rb) \
|
||||
(RB_SENTINEL_P(rb) || (RB_LEFT_SENTINEL_P(rb) && RB_RIGHT_SENTINEL_P(rb)))
|
||||
#define RB_TWOCHILDREN_P(rb) \
|
||||
(!RB_SENTINEL_P(rb) && !RB_LEFT_SENTINEL_P(rb) && !RB_RIGHT_SENTINEL_P(rb))
|
||||
|
||||
#define RB_POSITION(rb) \
|
||||
(((rb)->rb_info & RB_FLAG_POSITION) ? RB_DIR_RIGHT : RB_DIR_LEFT)
|
||||
#define RB_RIGHT_P(rb) (RB_POSITION(rb) == RB_DIR_RIGHT)
|
||||
#define RB_LEFT_P(rb) (RB_POSITION(rb) == RB_DIR_LEFT)
|
||||
#define RB_RED_P(rb) (!RB_SENTINEL_P(rb) && ((rb)->rb_info & RB_FLAG_RED) != 0)
|
||||
#define RB_BLACK_P(rb) (RB_SENTINEL_P(rb) || ((rb)->rb_info & RB_FLAG_RED) == 0)
|
||||
#define RB_MARK_RED(rb) ((void)((rb)->rb_info |= RB_FLAG_RED))
|
||||
#define RB_MARK_BLACK(rb) ((void)((rb)->rb_info &= ~RB_FLAG_RED))
|
||||
#define RB_INVERT_COLOR(rb) ((void)((rb)->rb_info ^= RB_FLAG_RED))
|
||||
#define RB_ROOT_P(rbt, rb) ((rbt)->rbt_root == (rb))
|
||||
#define RB_SET_POSITION(rb, position) \
|
||||
((void)((position) ? ((rb)->rb_info |= RB_FLAG_POSITION) : \
|
||||
((rb)->rb_info &= ~RB_FLAG_POSITION)))
|
||||
#define RB_ZERO_PROPERTIES(rb) ((void)((rb)->rb_info &= ~RB_FLAG_MASK))
|
||||
#define RB_COPY_PROPERTIES(dst, src) \
|
||||
((void)((dst)->rb_info ^= ((dst)->rb_info ^ (src)->rb_info) & RB_FLAG_MASK))
|
||||
#define RB_SWAP_PROPERTIES(a, b) do { \
|
||||
uintptr_t xorinfo = ((a)->rb_info ^ (b)->rb_info) & RB_FLAG_MASK; \
|
||||
(a)->rb_info ^= xorinfo; \
|
||||
(b)->rb_info ^= xorinfo; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
#ifdef RBDEBUG
|
||||
TAILQ_ENTRY(rb_node) rb_link;
|
||||
#endif
|
||||
} rb_node_t;
|
||||
|
||||
#define RB_TREE_MIN(T) rb_tree_iterate((T), NULL, RB_DIR_LEFT)
|
||||
#define RB_TREE_MAX(T) rb_tree_iterate((T), NULL, RB_DIR_RIGHT)
|
||||
#define RB_TREE_FOREACH(N, T) \
|
||||
for ((N) = RB_TREE_MIN(T); (N); \
|
||||
(N) = rb_tree_iterate((T), (N), RB_DIR_RIGHT))
|
||||
#define RB_TREE_FOREACH_REVERSE(N, T) \
|
||||
for ((N) = RB_TREE_MAX(T); (N); \
|
||||
(N) = rb_tree_iterate((T), (N), RB_DIR_LEFT))
|
||||
|
||||
#ifdef RBDEBUG
|
||||
TAILQ_HEAD(rb_node_qh, rb_node);
|
||||
|
||||
#define RB_TAILQ_REMOVE(a, b, c) TAILQ_REMOVE(a, b, c)
|
||||
#define RB_TAILQ_INIT(a) TAILQ_INIT(a)
|
||||
#define RB_TAILQ_INSERT_HEAD(a, b, c) TAILQ_INSERT_HEAD(a, b, c)
|
||||
#define RB_TAILQ_INSERT_BEFORE(a, b, c) TAILQ_INSERT_BEFORE(a, b, c)
|
||||
#define RB_TAILQ_INSERT_AFTER(a, b, c, d) TAILQ_INSERT_AFTER(a, b, c, d)
|
||||
#else
|
||||
#define RB_TAILQ_REMOVE(a, b, c) do { } while (/*CONSTCOND*/0)
|
||||
#define RB_TAILQ_INIT(a) do { } while (/*CONSTCOND*/0)
|
||||
#define RB_TAILQ_INSERT_HEAD(a, b, c) do { } while (/*CONSTCOND*/0)
|
||||
#define RB_TAILQ_INSERT_BEFORE(a, b, c) do { } while (/*CONSTCOND*/0)
|
||||
#define RB_TAILQ_INSERT_AFTER(a, b, c, d) do { } while (/*CONSTCOND*/0)
|
||||
#endif /* RBDEBUG */
|
||||
|
||||
/*
|
||||
* rbto_compare_nodes_fn:
|
||||
* return a positive value if the first node > the second node.
|
||||
* return a negative value if the first node < the second node.
|
||||
* return 0 if they are considered same.
|
||||
*
|
||||
* rbto_compare_key_fn:
|
||||
* return a positive value if the node > the key.
|
||||
* return a negative value if the node < the key.
|
||||
* return 0 if they are considered same.
|
||||
*/
|
||||
|
||||
typedef signed int (*const rbto_compare_nodes_fn)(void *,
|
||||
const void *, const void *);
|
||||
typedef signed int (*const rbto_compare_key_fn)(void *,
|
||||
const void *, const void *);
|
||||
|
||||
typedef struct {
|
||||
rbto_compare_nodes_fn rbto_compare_nodes;
|
||||
rbto_compare_key_fn rbto_compare_key;
|
||||
size_t rbto_node_offset;
|
||||
void *rbto_context;
|
||||
} rb_tree_ops_t;
|
||||
|
||||
typedef struct rb_tree {
|
||||
struct rb_node *rbt_root;
|
||||
const rb_tree_ops_t *rbt_ops;
|
||||
struct rb_node *rbt_minmax[2];
|
||||
#ifdef RBDEBUG
|
||||
struct rb_node_qh rbt_nodes;
|
||||
#endif
|
||||
#ifdef RBSTATS
|
||||
unsigned int rbt_count;
|
||||
unsigned int rbt_insertions;
|
||||
unsigned int rbt_removals;
|
||||
unsigned int rbt_insertion_rebalance_calls;
|
||||
unsigned int rbt_insertion_rebalance_passes;
|
||||
unsigned int rbt_removal_rebalance_calls;
|
||||
unsigned int rbt_removal_rebalance_passes;
|
||||
#endif
|
||||
} rb_tree_t;
|
||||
|
||||
#ifdef RBSTATS
|
||||
#define RBSTAT_INC(v) ((void)((v)++))
|
||||
#define RBSTAT_DEC(v) ((void)((v)--))
|
||||
#else
|
||||
#define RBSTAT_INC(v) do { } while (/*CONSTCOND*/0)
|
||||
#define RBSTAT_DEC(v) do { } while (/*CONSTCOND*/0)
|
||||
#endif
|
||||
|
||||
void rb_tree_init(rb_tree_t *, const rb_tree_ops_t *);
|
||||
void * rb_tree_insert_node(rb_tree_t *, void *);
|
||||
void * rb_tree_find_node(rb_tree_t *, const void *);
|
||||
void * rb_tree_find_node_geq(rb_tree_t *, const void *);
|
||||
void * rb_tree_find_node_leq(rb_tree_t *, const void *);
|
||||
void rb_tree_remove_node(rb_tree_t *, void *);
|
||||
void * rb_tree_iterate(rb_tree_t *, void *, const unsigned int);
|
||||
#ifdef RBDEBUG
|
||||
void rb_tree_check(const rb_tree_t *, bool);
|
||||
#endif
|
||||
#ifdef RBSTATS
|
||||
void rb_tree_depths(const rb_tree_t *, size_t *);
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_RBTREE_H_*/
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef _SYS_REBOOT_H_
|
||||
#define _SYS_REBOOT_H_
|
||||
|
||||
/* How to exit the system or stop a server process. */
|
||||
#define RBT_HALT 0 /* shutdown and return to monitor */
|
||||
#define RBT_REBOOT 1 /* reboot the system through the monitor */
|
||||
#define RBT_PANIC 2 /* a server panics */
|
||||
#define RBT_MONITOR 3 /* let the monitor do this */
|
||||
#define RBT_RESET 4 /* hard reset the system */
|
||||
#define RBT_DEFAULT 5 /* return to monitor, reset if not possible */
|
||||
#define RBT_INVALID 6 /* first invalid reboot flag */
|
||||
|
||||
#endif
|
||||
+35
-31
@@ -1,25 +1,34 @@
|
||||
#ifndef _SYS_RESOURCE_H
|
||||
#define _SYS_RESOURCE_H
|
||||
|
||||
/* Priority range for the get/setpriority() interface.
|
||||
* It isn't a mapping on the internal minix scheduling
|
||||
* priority.
|
||||
*/
|
||||
#define PRIO_MIN -20
|
||||
#define PRIO_MAX 20
|
||||
|
||||
#define PRIO_PROCESS 0
|
||||
#define PRIO_PGRP 1
|
||||
#define PRIO_USER 2
|
||||
|
||||
int getpriority(int, int);
|
||||
int setpriority(int, int, int);
|
||||
|
||||
#ifdef _POSIX_SOURCE
|
||||
#ifndef _SYS_RESOURCE_H_
|
||||
#define _SYS_RESOURCE_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
typedef unsigned long rlim_t;
|
||||
/*
|
||||
* Process priority specifications to get/setpriority.
|
||||
*/
|
||||
#define PRIO_MIN -20
|
||||
#define PRIO_MAX 20
|
||||
|
||||
#define PRIO_PROCESS 0
|
||||
#define PRIO_PGRP 1
|
||||
#define PRIO_USER 2
|
||||
|
||||
/*
|
||||
* Resource limits
|
||||
*/
|
||||
#define RLIMIT_CORE 1
|
||||
#define RLIMIT_CPU 2
|
||||
#define RLIMIT_DATA 3
|
||||
#define RLIMIT_FSIZE 4
|
||||
#define RLIMIT_NOFILE 5
|
||||
#define RLIMIT_STACK 6
|
||||
#define RLIMIT_AS 7
|
||||
#define RLIMIT_VMEM RLIMIT_AS /* common alias */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define RLIM_NLIMITS 8 /* number of resource limits */
|
||||
#endif
|
||||
|
||||
#define RLIM_INFINITY ((rlim_t) -1)
|
||||
#define RLIM_SAVED_CUR RLIM_INFINITY
|
||||
@@ -31,17 +40,12 @@ struct rlimit
|
||||
rlim_t rlim_max;
|
||||
};
|
||||
|
||||
#define RLIMIT_CORE 1
|
||||
#define RLIMIT_CPU 2
|
||||
#define RLIMIT_DATA 3
|
||||
#define RLIMIT_FSIZE 4
|
||||
#define RLIMIT_NOFILE 5
|
||||
#define RLIMIT_STACK 6
|
||||
#define RLIMIT_AS 7
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#define RLIM_NLIMITS 8
|
||||
int getrlimit(int resource, struct rlimit *rlp);
|
||||
__BEGIN_DECLS
|
||||
int getpriority(int, int);
|
||||
int getrlimit(int, struct rlimit *);
|
||||
int setpriority(int, int, int);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* defined(_POSIX_SOURCE) */
|
||||
|
||||
#endif
|
||||
#endif /* !_SYS_RESOURCE_H_ */
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/* $NetBSD: rmd160.h,v 1.2 2008/02/16 17:37:13 apb Exp $ */
|
||||
/* $KAME: rmd160.h,v 1.2 2003/07/25 09:37:55 itojun Exp $ */
|
||||
/* $OpenBSD: rmd160.h,v 1.3 2002/03/14 01:26:51 millert Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2001 Markus Friedl. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef _RMD160_H
|
||||
#define _RMD160_H
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define RMD160_DIGEST_LENGTH 20
|
||||
#define RMD160_DIGEST_STRING_LENGTH 41
|
||||
|
||||
/* RMD160 context. */
|
||||
typedef struct RMD160Context {
|
||||
uint32_t state[5]; /* state */
|
||||
uint64_t count; /* number of bits, modulo 2^64 */
|
||||
u_char buffer[64]; /* input buffer */
|
||||
} RMD160_CTX;
|
||||
|
||||
__BEGIN_DECLS
|
||||
void RMD160Init(RMD160_CTX *);
|
||||
void RMD160Transform(uint32_t [5], const u_char [64]);
|
||||
void RMD160Update(RMD160_CTX *, const u_char *, uint32_t);
|
||||
void RMD160Final(u_char [RMD160_DIGEST_LENGTH], RMD160_CTX *);
|
||||
#ifndef _KERNEL
|
||||
char *RMD160End(RMD160_CTX *, char *);
|
||||
char *RMD160FileChunk(const char *, char *, off_t, off_t);
|
||||
char *RMD160File(const char *, char *);
|
||||
char *RMD160Data(const u_char *, size_t, char *);
|
||||
#endif /* _KERNEL */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _RMD160_H */
|
||||
+70
-30
@@ -1,47 +1,87 @@
|
||||
#ifndef _SYS_SELECT_H
|
||||
#define _SYS_SELECT_H 1
|
||||
/* $NetBSD: select.h,v 1.36 2009/11/11 09:48:51 rmind Exp $ */
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <minix/types.h>
|
||||
#include <minix/limits.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)select.h 8.2 (Berkeley) 1/4/94
|
||||
*/
|
||||
|
||||
/* Use this datatype as basic storage unit in fd_set */
|
||||
typedef u32_t fd_mask;
|
||||
#ifndef _SYS_SELECT_H_
|
||||
#define _SYS_SELECT_H_
|
||||
|
||||
/* This many bits fit in an fd_set word. */
|
||||
#define _FDSETBITSPERWORD (sizeof(fd_mask)*8)
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/fd_set.h>
|
||||
|
||||
/* Bit manipulation macros */
|
||||
#define _FD_BITMASK(b) (1L << ((b) % _FDSETBITSPERWORD))
|
||||
#define _FD_BITWORD(b) ((b)/_FDSETBITSPERWORD)
|
||||
#ifdef _KERNEL
|
||||
#include <sys/selinfo.h> /* for struct selinfo */
|
||||
#include <sys/signal.h> /* for sigset_t */
|
||||
|
||||
/* Default FD_SETSIZE is OPEN_MAX. */
|
||||
#ifndef FD_SETSIZE
|
||||
#define FD_SETSIZE __MINIX_OPEN_MAX
|
||||
#endif
|
||||
struct lwp;
|
||||
struct proc;
|
||||
struct timespec;
|
||||
struct cpu_info;
|
||||
struct socket;
|
||||
|
||||
/* We want to store FD_SETSIZE bits. */
|
||||
#define _FDSETWORDS(b) (((b)+_FDSETBITSPERWORD-1)/_FDSETBITSPERWORD)
|
||||
int selcommon(register_t *, int, fd_set *, fd_set *, fd_set *,
|
||||
struct timespec *, sigset_t *);
|
||||
void selrecord(struct lwp *selector, struct selinfo *);
|
||||
void selnotify(struct selinfo *, int, long);
|
||||
void selsysinit(struct cpu_info *);
|
||||
void selinit(struct selinfo *);
|
||||
void seldestroy(struct selinfo *);
|
||||
int pollsock(struct socket *, const struct timespec *, int);
|
||||
|
||||
typedef struct {
|
||||
fd_mask fds_bits[_FDSETWORDS(FD_SETSIZE)];
|
||||
} fd_set;
|
||||
#else /* _KERNEL */
|
||||
|
||||
_PROTOTYPE( int select, (int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout) );
|
||||
#include <sys/sigtypes.h>
|
||||
#include <time.h>
|
||||
|
||||
#define FD_ZERO(s) do { int _i; for(_i = 0; _i < _FDSETWORDS(FD_SETSIZE); _i++) { (s)->fds_bits[_i] = 0; } } while(0)
|
||||
#define FD_SET(f, s) do { (s)->fds_bits[_FD_BITWORD(f)] |= _FD_BITMASK(f); } while(0)
|
||||
#define FD_CLR(f, s) do { (s)->fds_bits[_FD_BITWORD(f)] &= ~(_FD_BITMASK(f)); } while(0)
|
||||
#define FD_ISSET(f, s) ((s)->fds_bits[_FD_BITWORD(f)] & _FD_BITMASK(f))
|
||||
__BEGIN_DECLS
|
||||
#ifndef __LIBC12_SOURCE__
|
||||
#ifndef __minix
|
||||
int pselect(int, fd_set * __restrict, fd_set * __restrict,
|
||||
fd_set * __restrict, const struct timespec * __restrict,
|
||||
const sigset_t * __restrict) __RENAME(__pselect50);
|
||||
#endif /* !__minix */
|
||||
int select(int, fd_set * __restrict, fd_set * __restrict,
|
||||
fd_set * __restrict, struct timeval * __restrict) __RENAME(__select50);
|
||||
#endif /* __LIBC12_SOURCE__ */
|
||||
__END_DECLS
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#ifdef _MINIX
|
||||
/* possible select() operation types; read, write, errors */
|
||||
/* (FS/driver internal use only) */
|
||||
#define SEL_RD (1 << 0)
|
||||
#define SEL_WR (1 << 1)
|
||||
#define SEL_ERR (1 << 2)
|
||||
#define SEL_NOTIFY (1 << 3) /* not a real select operation */
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_SELECT_H */
|
||||
|
||||
#endif /* !_SYS_SELECT_H_ */
|
||||
|
||||
+98
-58
@@ -1,20 +1,72 @@
|
||||
#ifndef _SYS_SEM_H
|
||||
#define _SYS_SEM_H
|
||||
/* $NetBSD: sem.h,v 1.29 2009/01/19 19:39:41 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
|
||||
* NASA Ames Research Center.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SVID compatible sem.h file
|
||||
*
|
||||
* Author: Daniel Boulet
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SEM_H_
|
||||
#define _SYS_SEM_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
|
||||
#define SEMMNI 128
|
||||
#define SEMMSL 250
|
||||
#define SEMMNS (SEMMSL*SEMMNI)
|
||||
struct semid_ds {
|
||||
struct ipc_perm sem_perm; /* operation permission struct */
|
||||
time_t sem_otime; /* last semop() time */
|
||||
unsigned long int __unused1;
|
||||
time_t sem_ctime; /* last time changed by semctl() */
|
||||
unsigned long int __unused2;
|
||||
unsigned long int sem_nsems; /* number of semaphores in set */
|
||||
unsigned long int __unused3;
|
||||
unsigned long int __unused4;
|
||||
};
|
||||
|
||||
#define SEMOPM 32
|
||||
#define SEMVMX 32767
|
||||
/*
|
||||
* semop's sops parameter structure
|
||||
*/
|
||||
struct sembuf {
|
||||
unsigned short sem_num; /* semaphore # */
|
||||
short sem_op; /* semaphore operation */
|
||||
short sem_flg; /* operation flags */
|
||||
};
|
||||
#define SEM_UNDO 0x1000 /* undo changes on process exit */
|
||||
|
||||
/* Flags for `semop'. */
|
||||
#define SEM_UNDO 0x1000 /* undo the operation on exit */
|
||||
|
||||
/* Commands for `semctl'. */
|
||||
/*
|
||||
* commands for semctl
|
||||
*/
|
||||
#define GETPID 11 /* get sempid */
|
||||
#define GETVAL 12 /* get semval */
|
||||
#define GETALL 13 /* get all semval's */
|
||||
@@ -23,59 +75,47 @@
|
||||
#define SETVAL 16 /* set semval */
|
||||
#define SETALL 17 /* set all semval's */
|
||||
|
||||
|
||||
/* Data structure describing a set of semaphores. */
|
||||
struct semid_ds
|
||||
{
|
||||
struct ipc_perm sem_perm; /* operation permission struct */
|
||||
time_t sem_otime; /* last semop() time */
|
||||
unsigned long int __unused1;
|
||||
time_t sem_ctime; /* last time changed by semctl() */
|
||||
unsigned long int __unused2;
|
||||
unsigned long int sem_nsems; /* number of semaphores in set */
|
||||
unsigned long int __unused3;
|
||||
unsigned long int __unused4;
|
||||
};
|
||||
|
||||
/* Structure used for argument to `semop' to describe operations. */
|
||||
struct sembuf
|
||||
{
|
||||
unsigned short int sem_num; /* semaphore number */
|
||||
short int sem_op; /* semaphore operation */
|
||||
short int sem_flg; /* operation flag */
|
||||
};
|
||||
|
||||
|
||||
/* Semaphore control operation. */
|
||||
_PROTOTYPE( int semctl, (int __semid, int __semnum, int __cmd, ...));
|
||||
|
||||
/* Get semaphore. */
|
||||
_PROTOTYPE( int semget, (key_t __key, int __nsems, int __semflg));
|
||||
|
||||
/* Operate on semaphore. */
|
||||
_PROTOTYPE( int semop, (int __semid, struct sembuf *__sops, size_t __nsops));
|
||||
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl cmds */
|
||||
# define SEM_STAT 18
|
||||
# define SEM_INFO 19
|
||||
|
||||
struct seminfo
|
||||
{
|
||||
int semmap;
|
||||
int semmni;
|
||||
int semmns;
|
||||
int semmnu;
|
||||
int semmsl;
|
||||
int semopm;
|
||||
int semume;
|
||||
int semusz;
|
||||
int semvmx;
|
||||
int semaem;
|
||||
/*
|
||||
* semaphore info struct
|
||||
*/
|
||||
struct seminfo {
|
||||
int32_t semmap; /* # of entries in semaphore map */
|
||||
int32_t semmni; /* # of semaphore identifiers */
|
||||
int32_t semmns; /* # of semaphores in system */
|
||||
int32_t semmnu; /* # of undo structures in system */
|
||||
int32_t semmsl; /* max # of semaphores per id */
|
||||
int32_t semopm; /* max # of operations per semop call */
|
||||
int32_t semume; /* max # of undo entries per process */
|
||||
int32_t semusz; /* size in bytes of undo structure */
|
||||
int32_t semvmx; /* semaphore maximum value */
|
||||
int32_t semaem; /* adjust on exit max value */
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
||||
|
||||
#endif /* _SYS_SEM_H */
|
||||
/*
|
||||
* Configuration parameters
|
||||
*/
|
||||
#define SEMMNI 128
|
||||
#define SEMMSL 250
|
||||
#define SEMMNS (SEMMSL*SEMMNI)
|
||||
|
||||
#define SEMOPM 32
|
||||
#define SEMVMX 32767
|
||||
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
int semctl(int, int, int, ...);
|
||||
int semget(key_t, int, int);
|
||||
int semop(int, struct sembuf *, size_t);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_SEM_H_ */
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/* $NetBSD: sha1.h,v 1.14 2009/11/06 20:31:19 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* SHA-1 in C
|
||||
* By Steve Reid <steve@edmweb.com>
|
||||
* 100% Public Domain
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SHA1_H_
|
||||
#define _SYS_SHA1_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define SHA1_DIGEST_LENGTH 20
|
||||
#define SHA1_DIGEST_STRING_LENGTH 41
|
||||
|
||||
typedef struct {
|
||||
uint32_t state[5];
|
||||
uint32_t count[2];
|
||||
uint8_t buffer[64];
|
||||
} SHA1_CTX;
|
||||
|
||||
__BEGIN_DECLS
|
||||
void SHA1Transform(uint32_t[5], const uint8_t[64]);
|
||||
void SHA1Init(SHA1_CTX *);
|
||||
void SHA1Update(SHA1_CTX *, const uint8_t *, unsigned int);
|
||||
void SHA1Final(uint8_t[SHA1_DIGEST_LENGTH], SHA1_CTX *);
|
||||
#ifndef _KERNEL
|
||||
char *SHA1End(SHA1_CTX *, char *);
|
||||
char *SHA1FileChunk(const char *, char *, off_t, off_t);
|
||||
char *SHA1File(const char *, char *);
|
||||
char *SHA1Data(const uint8_t *, size_t, char *);
|
||||
#endif /* _KERNEL */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_SHA1_H_ */
|
||||
@@ -0,0 +1,120 @@
|
||||
/* $NetBSD: sha2.h,v 1.3 2009/05/26 08:04:12 joerg Exp $ */
|
||||
/* $KAME: sha2.h,v 1.4 2003/07/20 00:28:38 itojun Exp $ */
|
||||
|
||||
/*
|
||||
* sha2.h
|
||||
*
|
||||
* Version 1.0.0beta1
|
||||
*
|
||||
* Written by Aaron D. Gifford <me@aarongifford.com>
|
||||
*
|
||||
* Copyright 2000 Aaron D. Gifford. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holder nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SHA2_H__
|
||||
#define __SHA2_H__
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/*** SHA-224/256/384/512 Various Length Definitions ***********************/
|
||||
#define SHA224_BLOCK_LENGTH 64
|
||||
#define SHA224_DIGEST_LENGTH 28
|
||||
#define SHA224_DIGEST_STRING_LENGTH (SHA224_DIGEST_LENGTH * 2 + 1)
|
||||
#define SHA256_BLOCK_LENGTH 64
|
||||
#define SHA256_DIGEST_LENGTH 32
|
||||
#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
|
||||
#define SHA384_BLOCK_LENGTH 128
|
||||
#define SHA384_DIGEST_LENGTH 48
|
||||
#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
|
||||
#define SHA512_BLOCK_LENGTH 128
|
||||
#define SHA512_DIGEST_LENGTH 64
|
||||
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
|
||||
|
||||
|
||||
/*** SHA-256/384/512 Context Structures *******************************/
|
||||
typedef struct _SHA256_CTX {
|
||||
uint32_t state[8];
|
||||
uint64_t bitcount;
|
||||
uint8_t buffer[SHA256_BLOCK_LENGTH];
|
||||
} SHA256_CTX;
|
||||
|
||||
typedef struct _SHA512_CTX {
|
||||
uint64_t state[8];
|
||||
uint64_t bitcount[2];
|
||||
uint8_t buffer[SHA512_BLOCK_LENGTH];
|
||||
} SHA512_CTX;
|
||||
|
||||
typedef SHA256_CTX SHA224_CTX;
|
||||
typedef SHA512_CTX SHA384_CTX;
|
||||
|
||||
|
||||
/*** SHA-256/384/512 Function Prototypes ******************************/
|
||||
__BEGIN_DECLS
|
||||
int SHA224_Init(SHA224_CTX *);
|
||||
int SHA224_Update(SHA224_CTX*, const uint8_t*, size_t);
|
||||
int SHA224_Final(uint8_t[SHA224_DIGEST_LENGTH], SHA224_CTX*);
|
||||
#ifndef _KERNEL
|
||||
char *SHA224_End(SHA224_CTX *, char[SHA224_DIGEST_STRING_LENGTH]);
|
||||
char *SHA224_FileChunk(const char *, char *, off_t, off_t);
|
||||
char *SHA224_File(const char *, char *);
|
||||
char *SHA224_Data(const uint8_t *, size_t, char[SHA224_DIGEST_STRING_LENGTH]);
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
int SHA256_Init(SHA256_CTX *);
|
||||
int SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
|
||||
int SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
|
||||
#ifndef _KERNEL
|
||||
char *SHA256_End(SHA256_CTX *, char[SHA256_DIGEST_STRING_LENGTH]);
|
||||
char *SHA256_FileChunk(const char *, char *, off_t, off_t);
|
||||
char *SHA256_File(const char *, char *);
|
||||
char *SHA256_Data(const uint8_t *, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
int SHA384_Init(SHA384_CTX*);
|
||||
int SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
|
||||
int SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
|
||||
#ifndef _KERNEL
|
||||
char *SHA384_End(SHA384_CTX *, char[SHA384_DIGEST_STRING_LENGTH]);
|
||||
char *SHA384_FileChunk(const char *, char *, off_t, off_t);
|
||||
char *SHA384_File(const char *, char *);
|
||||
char *SHA384_Data(const uint8_t *, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
int SHA512_Init(SHA512_CTX*);
|
||||
int SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
|
||||
int SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
|
||||
#ifndef _KERNEL
|
||||
char *SHA512_End(SHA512_CTX *, char[SHA512_DIGEST_STRING_LENGTH]);
|
||||
char *SHA512_FileChunk(const char *, char *, off_t, off_t);
|
||||
char *SHA512_File(const char *, char *);
|
||||
char *SHA512_Data(const uint8_t *, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
|
||||
#endif /* !_KERNEL */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* __SHA2_H__ */
|
||||
+116
-45
@@ -1,35 +1,99 @@
|
||||
#ifndef _SYS_SHM_H
|
||||
#define _SYS_SHM_H
|
||||
/* $NetBSD: shm.h,v 1.48 2009/01/19 19:39:41 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
|
||||
* NASA Ames Research Center.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Adam Glass
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Adam Glass.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* As defined+described in "X/Open System Interfaces and Headers"
|
||||
* Issue 4, p. XXX
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SHM_H_
|
||||
#define _SYS_SHM_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#define SHM_RDONLY 010000 /* Attach read-only (else read-write) */
|
||||
#define SHM_RND 020000 /* Round attach address to SHMLBA */
|
||||
|
||||
typedef unsigned long int shmatt_t;
|
||||
|
||||
#define SHMLBA getpagesize()
|
||||
/* Segment low boundry address multiple */
|
||||
#define SHMLBA getpagesize()
|
||||
#define SHMMNI 4096
|
||||
#define SHMSEG 32 /* max shared segs per process */
|
||||
|
||||
struct shmid_ds
|
||||
{
|
||||
struct ipc_perm shm_perm; /* Ownership and permissions */
|
||||
size_t shm_segsz; /* Size of segment (bytes) */
|
||||
time_t shm_atime; /* Last attach time */
|
||||
time_t shm_dtime; /* Last detach time */
|
||||
time_t shm_ctime; /* Last change time */
|
||||
pid_t shm_cpid; /* PID of creator */
|
||||
pid_t shm_lpid; /* PID of last shmat()/shmdt() */
|
||||
shmatt_t shm_nattch; /* No. of current attaches */
|
||||
typedef unsigned int shmatt_t;
|
||||
|
||||
struct shmid_ds {
|
||||
struct ipc_perm shm_perm; /* operation permission structure */
|
||||
size_t shm_segsz; /* size of segment in bytes */
|
||||
time_t shm_atime; /* time of last shmat() */
|
||||
time_t shm_dtime; /* time of last shmdt() */
|
||||
time_t shm_ctime; /* time of last change by shmctl() */
|
||||
pid_t shm_cpid; /* process ID of creator */
|
||||
pid_t shm_lpid; /* process ID of last shm operation */
|
||||
shmatt_t shm_nattch; /* number of current attaches */
|
||||
};
|
||||
|
||||
/* Permission flag for shmget. */
|
||||
#define SHM_R 0400
|
||||
#define SHM_W 0200
|
||||
|
||||
#define SHM_RDONLY 010000 /* attach read-only else read-write */
|
||||
#define SHM_RND 020000 /* round attach address to SHMLBA */
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
#define SHM_DEST 01000 /* segment will be destroyed on last detach */
|
||||
@@ -39,15 +103,28 @@ struct shmid_ds
|
||||
#define SHM_STAT 13
|
||||
#define SHM_INFO 14
|
||||
|
||||
struct shminfo
|
||||
{
|
||||
unsigned long int shmmax;
|
||||
unsigned long int shmmin;
|
||||
unsigned long int shmmni;
|
||||
unsigned long int shmseg;
|
||||
unsigned long int shmall;
|
||||
|
||||
#if defined(_NETBSD_SOURCE) || defined(__minix)
|
||||
/*
|
||||
* Permission definitions used in shmflag arguments to shmat(2) and shmget(2).
|
||||
* Provided for source compatibility only; do not use in new code!
|
||||
*/
|
||||
#define SHM_R 0400
|
||||
#define SHM_W 0200
|
||||
|
||||
/*
|
||||
* System 5 style catch-all structure for shared memory constants that
|
||||
* might be of interest to user programs. Do we really want/need this?
|
||||
*/
|
||||
struct shminfo {
|
||||
unsigned long int shmmax; /* max shared memory segment size (bytes) */
|
||||
unsigned long int shmmin; /* min shared memory segment size (bytes) */
|
||||
unsigned long int shmmni; /* max number of shared memory identifiers */
|
||||
unsigned long int shmseg; /* max shared memory segments per process */
|
||||
unsigned long int shmall; /* max amount of shared memory (pages) */
|
||||
};
|
||||
|
||||
#ifdef __minix
|
||||
struct shm_info
|
||||
{
|
||||
int used_ids;
|
||||
@@ -57,21 +134,15 @@ struct shm_info
|
||||
unsigned long int swap_attempts;
|
||||
unsigned long int swap_successes;
|
||||
};
|
||||
#endif /* __minix */
|
||||
|
||||
/* The following System V style IPC functions implement a shared memory
|
||||
* facility. The definition is found in XPG4.2.
|
||||
*/
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
/* Shared memory control operation. */
|
||||
_PROTOTYPE( int shmctl, (int __shmid, int __cmd, struct shmid_ds *__buf));
|
||||
__BEGIN_DECLS
|
||||
void *shmat(int, const void *, int);
|
||||
int shmctl(int, int, struct shmid_ds *) __RENAME(__shmctl50);
|
||||
int shmdt(const void *);
|
||||
int shmget(key_t, size_t, int);
|
||||
__END_DECLS
|
||||
|
||||
/* Get shared memory segment. */
|
||||
_PROTOTYPE( int shmget, (key_t __key, size_t __size, int __shmflg));
|
||||
|
||||
/* Attach shared memory segment. */
|
||||
_PROTOTYPE( void *shmat, (int __shmid, const void *__shmaddr, int __shmflg));
|
||||
|
||||
/* Deattach shared memory segment. */
|
||||
_PROTOTYPE( int shmdt, (const void *__shmaddr));
|
||||
|
||||
#endif /* _SYS_SHM_H */
|
||||
#endif /* !_SYS_SHM_H_ */
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
#ifndef _SIGCONTEXT_H
|
||||
#define _SIGCONTEXT_H
|
||||
|
||||
/* The sigcontext structure is used by the sigreturn(2) system call.
|
||||
* sigreturn() is seldom called by user programs, but it is used internally
|
||||
* by the signal catching mechanism.
|
||||
*/
|
||||
|
||||
#ifndef _MINIX_ANSI_H
|
||||
#include <minix/ansi.h>
|
||||
#endif
|
||||
|
||||
#ifndef _MINIX_SYS_CONFIG_H
|
||||
#include <minix/sys_config.h>
|
||||
#endif
|
||||
|
||||
#if !defined(_MINIX_CHIP)
|
||||
#include "error, configuration is not known"
|
||||
#endif
|
||||
|
||||
/* The following structure should match the stackframe_s structure used
|
||||
* by the kernel's context switching code. Floating point registers should
|
||||
* be added in a different struct.
|
||||
*/
|
||||
#if (_MINIX_CHIP == _CHIP_INTEL)
|
||||
#include <machine/stackframe.h>
|
||||
#include <machine/fpu.h>
|
||||
|
||||
typedef struct stackframe_s sigregs;
|
||||
struct sigframe { /* stack frame created for signalled process */
|
||||
_PROTOTYPE( void (*sf_retadr), (void) );
|
||||
int sf_signo;
|
||||
int sf_code;
|
||||
struct sigcontext *sf_scp;
|
||||
int sf_fp;
|
||||
_PROTOTYPE( void (*sf_retadr2), (void) );
|
||||
struct sigcontext *sf_scpcopy;
|
||||
};
|
||||
|
||||
#else
|
||||
#include "error, _MINIX_CHIP is not supported"
|
||||
#endif /* _MINIX_CHIP == _CHIP_INTEL */
|
||||
|
||||
struct sigcontext {
|
||||
int sc_flags; /* sigstack state to restore (including
|
||||
* MF_FPU_INITIALIZED)
|
||||
*/
|
||||
long sc_mask; /* signal mask to restore */
|
||||
sigregs sc_regs; /* register set to restore */
|
||||
#if (_MINIX_CHIP == _CHIP_INTEL)
|
||||
union fpu_state_u sc_fpu_state;
|
||||
#endif
|
||||
};
|
||||
|
||||
#if (_MINIX_CHIP == _CHIP_INTEL)
|
||||
#if _WORD_SIZE == 4
|
||||
#define sc_gs sc_regs.gs
|
||||
#define sc_fs sc_regs.fs
|
||||
#endif /* _WORD_SIZE == 4 */
|
||||
#define sc_es sc_regs.es
|
||||
#define sc_ds sc_regs.ds
|
||||
#define sc_di sc_regs.di
|
||||
#define sc_si sc_regs.si
|
||||
#define sc_fp sc_regs.bp
|
||||
#define sc_st sc_regs.st /* stack top -- used in kernel */
|
||||
#define sc_bx sc_regs.bx
|
||||
#define sc_dx sc_regs.dx
|
||||
#define sc_cx sc_regs.cx
|
||||
#define sc_retreg sc_regs.retreg
|
||||
#define sc_retadr sc_regs.retadr /* return address to caller of
|
||||
save -- used in kernel */
|
||||
#define sc_pc sc_regs.pc
|
||||
#define sc_cs sc_regs.cs
|
||||
#define sc_psw sc_regs.psw
|
||||
#define sc_sp sc_regs.sp
|
||||
#define sc_ss sc_regs.ss
|
||||
#endif /* _MINIX_CHIP == _CHIP_INTEL */
|
||||
|
||||
_PROTOTYPE( int sigreturn, (struct sigcontext *_scp) );
|
||||
|
||||
#endif /* _SIGCONTEXT_H */
|
||||
@@ -0,0 +1,240 @@
|
||||
/* $NetBSD: siginfo.h,v 1.19 2009/03/27 11:05:43 drochner Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Christos Zoulas.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SIGINFO_H_
|
||||
#define _SYS_SIGINFO_H_
|
||||
|
||||
#include <machine/signal.h> /* XXX: __HAVE_SIGINFO */
|
||||
#ifdef _KERNEL
|
||||
#include <sys/queue.h>
|
||||
#endif
|
||||
|
||||
typedef union sigval {
|
||||
int sival_int;
|
||||
void *sival_ptr;
|
||||
} sigval_t;
|
||||
|
||||
struct _ksiginfo {
|
||||
int _signo;
|
||||
int _code;
|
||||
int _errno;
|
||||
#ifdef _LP64
|
||||
/* In _LP64 the union starts on an 8-byte boundary. */
|
||||
int _pad;
|
||||
#endif
|
||||
union {
|
||||
struct {
|
||||
pid_t _pid;
|
||||
uid_t _uid;
|
||||
sigval_t _value;
|
||||
} _rt;
|
||||
|
||||
struct {
|
||||
pid_t _pid;
|
||||
uid_t _uid;
|
||||
int _status;
|
||||
clock_t _utime;
|
||||
clock_t _stime;
|
||||
} _child;
|
||||
|
||||
struct {
|
||||
void *_addr;
|
||||
int _trap;
|
||||
} _fault;
|
||||
|
||||
struct {
|
||||
long _band;
|
||||
int _fd;
|
||||
} _poll;
|
||||
} _reason;
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
typedef struct ksiginfo {
|
||||
u_long ksi_flags; /* 4 or 8 bytes (LP64) */
|
||||
CIRCLEQ_ENTRY(ksiginfo) ksi_list;
|
||||
struct _ksiginfo ksi_info;
|
||||
lwpid_t ksi_lid; /* 0, or directed to LWP */
|
||||
} ksiginfo_t;
|
||||
|
||||
#define KSI_TRAP 0x01 /* signal caused by trap */
|
||||
#define KSI_EMPTY 0x02 /* no additional information */
|
||||
#define KSI_QUEUED 0x04 /* on a sigpend_t queue */
|
||||
#define KSI_FROMPOOL 0x08 /* allocated from the ksiginfo pool */
|
||||
|
||||
/* Macros to initialize a ksiginfo_t. */
|
||||
#define KSI_INIT(ksi) \
|
||||
do { \
|
||||
memset((ksi), 0, sizeof(*(ksi))); \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
#define KSI_INIT_EMPTY(ksi) \
|
||||
do { \
|
||||
KSI_INIT((ksi)); \
|
||||
(ksi)->ksi_flags = KSI_EMPTY; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
#define KSI_INIT_TRAP(ksi) \
|
||||
do { \
|
||||
KSI_INIT((ksi)); \
|
||||
(ksi)->ksi_flags = KSI_TRAP; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
/* Copy the part of ksiginfo_t without the queue pointers */
|
||||
#define KSI_COPY(fksi, tksi) \
|
||||
do { \
|
||||
(tksi)->ksi_info = (fksi)->ksi_info; \
|
||||
(tksi)->ksi_flags = (fksi)->ksi_flags; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
|
||||
/* Predicate macros to test how a ksiginfo_t was generated. */
|
||||
#define KSI_TRAP_P(ksi) (((ksi)->ksi_flags & KSI_TRAP) != 0)
|
||||
#define KSI_EMPTY_P(ksi) (((ksi)->ksi_flags & KSI_EMPTY) != 0)
|
||||
|
||||
/*
|
||||
* Old-style signal handler "code" arguments were only non-zero for
|
||||
* signals caused by traps.
|
||||
*/
|
||||
#define KSI_TRAPCODE(ksi) (KSI_TRAP_P(ksi) ? (ksi)->ksi_trap : 0)
|
||||
#endif /* _KERNEL */
|
||||
|
||||
typedef union siginfo {
|
||||
char si_pad[128]; /* Total size; for future expansion */
|
||||
struct _ksiginfo _info;
|
||||
} siginfo_t;
|
||||
|
||||
/** Field access macros */
|
||||
#define si_signo _info._signo
|
||||
#define si_code _info._code
|
||||
#define si_errno _info._errno
|
||||
|
||||
#define si_value _info._reason._rt._value
|
||||
#define si_pid _info._reason._child._pid
|
||||
#define si_uid _info._reason._child._uid
|
||||
#define si_status _info._reason._child._status
|
||||
#define si_utime _info._reason._child._utime
|
||||
#define si_stime _info._reason._child._stime
|
||||
|
||||
#define si_addr _info._reason._fault._addr
|
||||
#define si_trap _info._reason._fault._trap
|
||||
|
||||
#define si_band _info._reason._poll._band
|
||||
#define si_fd _info._reason._poll._fd
|
||||
|
||||
#ifdef _KERNEL
|
||||
/** Field access macros */
|
||||
#define ksi_signo ksi_info._signo
|
||||
#define ksi_code ksi_info._code
|
||||
#define ksi_errno ksi_info._errno
|
||||
|
||||
#define ksi_value ksi_info._reason._rt._value
|
||||
#define ksi_pid ksi_info._reason._child._pid
|
||||
#define ksi_uid ksi_info._reason._child._uid
|
||||
#define ksi_status ksi_info._reason._child._status
|
||||
#define ksi_utime ksi_info._reason._child._utime
|
||||
#define ksi_stime ksi_info._reason._child._stime
|
||||
|
||||
#define ksi_addr ksi_info._reason._fault._addr
|
||||
#define ksi_trap ksi_info._reason._fault._trap
|
||||
|
||||
#define ksi_band ksi_info._reason._poll._band
|
||||
#define ksi_fd ksi_info._reason._poll._fd
|
||||
#endif /* _KERNEL */
|
||||
|
||||
/** si_code */
|
||||
/* SIGILL */
|
||||
#define ILL_ILLOPC 1 /* Illegal opcode */
|
||||
#define ILL_ILLOPN 2 /* Illegal operand */
|
||||
#define ILL_ILLADR 3 /* Illegal addressing mode */
|
||||
#define ILL_ILLTRP 4 /* Illegal trap */
|
||||
#define ILL_PRVOPC 5 /* Privileged opcode */
|
||||
#define ILL_PRVREG 6 /* Privileged register */
|
||||
#define ILL_COPROC 7 /* Coprocessor error */
|
||||
#define ILL_BADSTK 8 /* Internal stack error */
|
||||
|
||||
/* SIGFPE */
|
||||
#define FPE_INTOVF 1 /* integer divide by zero */
|
||||
#define FPE_INTDIV 2 /* integer overflow */
|
||||
#define FPE_FLTDIV 3 /* floating-point divide by zero */
|
||||
#define FPE_FLTOVF 4 /* floating-point overflow */
|
||||
#define FPE_FLTUND 5 /* floating-point underflow */
|
||||
#define FPE_FLTRES 6 /* floating-point inexact result */
|
||||
#define FPE_FLTINV 7 /* floating-point invalid operation */
|
||||
#define FPE_FLTSUB 8 /* subscript out of range */
|
||||
|
||||
/* SIGSEGV */
|
||||
#define SEGV_MAPERR 1 /* Address not mapped to object */
|
||||
#define SEGV_ACCERR 2 /* Invalid permissions for mapped object*/
|
||||
|
||||
/* SIGBUS */
|
||||
#define BUS_ADRALN 1 /* Invalid address alignment */
|
||||
#define BUS_ADRERR 2 /* Non-existent physical address */
|
||||
#define BUS_OBJERR 3 /* Object specific hardware error */
|
||||
|
||||
/* SIGTRAP */
|
||||
#define TRAP_BRKPT 1 /* Process breakpoint */
|
||||
#define TRAP_TRACE 2 /* Process trace trap */
|
||||
|
||||
/* SIGCHLD */
|
||||
#define CLD_EXITED 1 /* Child has exited */
|
||||
#define CLD_KILLED 2 /* Child has terminated abnormally but */
|
||||
/* did not create a core file */
|
||||
#define CLD_DUMPED 3 /* Child has terminated abnormally and */
|
||||
/* created a core file */
|
||||
#define CLD_TRAPPED 4 /* Traced child has trapped */
|
||||
#define CLD_STOPPED 5 /* Child has stopped */
|
||||
#define CLD_CONTINUED 6 /* Stopped child has continued */
|
||||
|
||||
/* SIGPOLL */
|
||||
#define POLL_IN 1 /* Data input available */
|
||||
#define POLL_OUT 2 /* Output buffers available */
|
||||
#define POLL_MSG 3 /* Input message available */
|
||||
#define POLL_ERR 4 /* I/O Error */
|
||||
#define POLL_PRI 5 /* High priority input available */
|
||||
#define POLL_HUP 6 /* Device disconnected */
|
||||
|
||||
|
||||
/** si_code */
|
||||
#define SI_USER 0 /* Sent by kill(2) */
|
||||
#define SI_QUEUE -1 /* Sent by the sigqueue(2) */
|
||||
#define SI_TIMER -2 /* Generated by expiration of a timer */
|
||||
/* set by timer_settime(2) */
|
||||
#define SI_ASYNCIO -3 /* Generated by completion of an */
|
||||
/* asynchronous I/O signal */
|
||||
#define SI_MESGQ -4 /* Generated by arrival of a message on */
|
||||
/* an empty message queue */
|
||||
#if defined(_KERNEL) || defined(_NETBSD_SOURCE)
|
||||
#define SI_LWP -5 /* Generated by _lwp_kill(2) */
|
||||
#define SI_NOINFO 32767 /* No signal specific info available */
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_SIGINFO_H_ */
|
||||
+206
-1
@@ -1,2 +1,207 @@
|
||||
#include <signal.h>
|
||||
#ifndef _SYS_SIGNAL_H_
|
||||
#define _SYS_SIGNAL_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/sigtypes.h>
|
||||
|
||||
#define _NSIG 26
|
||||
#define NSIG _NSIG
|
||||
|
||||
|
||||
/* Regular signals. */
|
||||
#define SIGHUP 1 /* hangup */
|
||||
#define SIGINT 2 /* interrupt (DEL) */
|
||||
#define SIGQUIT 3 /* quit (ASCII FS) */
|
||||
#define SIGILL 4 /* illegal instruction */
|
||||
#define SIGTRAP 5 /* trace trap (not reset when caught) */
|
||||
#define SIGABRT 6 /* IOT instruction */
|
||||
#define SIGBUS 7 /* bus error */
|
||||
#define SIGFPE 8 /* floating point exception */
|
||||
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
|
||||
#define SIGUSR1 10 /* user defined signal # 1 */
|
||||
#define SIGSEGV 11 /* segmentation violation */
|
||||
#define SIGUSR2 12 /* user defined signal # 2 */
|
||||
#define SIGPIPE 13 /* write on a pipe with no one to read it */
|
||||
#define SIGALRM 14 /* alarm clock */
|
||||
#define SIGTERM 15 /* software termination signal from kill */
|
||||
#define SIGEMT 16 /* EMT instruction */
|
||||
#define SIGCHLD 17 /* child process terminated or stopped */
|
||||
#define SIGWINCH 21 /* window size has changed */
|
||||
#define SIGVTALRM 24 /* virtual alarm */
|
||||
#define SIGPROF 25 /* profiler alarm */
|
||||
|
||||
/* POSIX requires the following signals to be defined, even if they are
|
||||
* not supported. Here are the definitions, but they are not supported.
|
||||
*/
|
||||
#define SIGCONT 18 /* continue if stopped */
|
||||
#define SIGSTOP 19 /* stop signal */
|
||||
#define SIGTSTP 20 /* interactive stop signal */
|
||||
#define SIGTTIN 22 /* background process wants to read */
|
||||
#define SIGTTOU 23 /* background process wants to write */
|
||||
|
||||
#ifdef _MINIX
|
||||
#define SIGIOT SIGABRT /* for people who speak PDP-11 */
|
||||
|
||||
/* MINIX specific signals. These signals are not used by user proceses,
|
||||
* but meant to inform system processes, like the PM, about system events.
|
||||
* The order here determines the order signals are processed by system
|
||||
* processes in user-space. Higher-priority signals should be first.
|
||||
*/
|
||||
/* Signals delivered by a signal manager. */
|
||||
#define SIGSNDELAY 26 /* end of delay for signal delivery */
|
||||
|
||||
#define SIGS_FIRST SIGHUP /* first system signal */
|
||||
#define SIGS_LAST SIGSNDELAY /* last system signal */
|
||||
#define IS_SIGS(signo) (signo>=SIGS_FIRST && signo<=SIGS_LAST)
|
||||
|
||||
/* Signals delivered by the kernel. */
|
||||
#define SIGKMEM 27 /* kernel memory request pending */
|
||||
#define SIGKMESS 28 /* new kernel message */
|
||||
#define SIGKSIGSM 29 /* kernel signal pending for signal manager */
|
||||
#define SIGKSIG 30 /* kernel signal pending */
|
||||
|
||||
#define SIGK_FIRST SIGKMEM /* first kernel signal */
|
||||
#define SIGK_LAST SIGKSIG /* last kernel signal */
|
||||
#define IS_SIGK(signo) (signo>=SIGK_FIRST && signo<=SIGK_LAST)
|
||||
|
||||
/* Termination signals for Minix system processes. */
|
||||
#define SIGS_IS_LETHAL(sig) \
|
||||
(sig == SIGILL || sig == SIGBUS || sig == SIGFPE || sig == SIGSEGV \
|
||||
|| sig == SIGEMT || sig == SIGABRT)
|
||||
#define SIGS_IS_TERMINATION(sig) (SIGS_IS_LETHAL(sig) \
|
||||
|| (sig == SIGKILL || sig == SIGPIPE))
|
||||
#define SIGS_IS_STACKTRACE(sig) (SIGS_IS_LETHAL(sig) && sig != SIGABRT)
|
||||
|
||||
#endif
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
/* Macros used as function pointers. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* error return */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* ignore signal */
|
||||
#define SIG_HOLD ((__sighandler_t) 2) /* block signal */
|
||||
#define SIG_CATCH ((__sighandler_t) 3) /* catch signal */
|
||||
|
||||
#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#include <sys/siginfo.h>
|
||||
#endif
|
||||
|
||||
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
#include <sys/ucontext.h>
|
||||
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* Signal vector "template" used in sigaction call.
|
||||
*/
|
||||
struct sigaction {
|
||||
union {
|
||||
void (*_sa_handler)(int);
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
void (*_sa_sigaction)(int, siginfo_t *, void *);
|
||||
#endif
|
||||
} _sa_u; /* signal handler */
|
||||
sigset_t sa_mask; /* signal mask to apply */
|
||||
int sa_flags; /* see signal options below */
|
||||
};
|
||||
|
||||
#define sa_handler _sa_u._sa_handler
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#define sa_sigaction _sa_u._sa_sigaction
|
||||
#endif
|
||||
|
||||
#include <machine/signal.h> /* sigcontext; codes for SIGILL, SIGFPE */
|
||||
|
||||
/* Fields for sa_flags. */
|
||||
#define SA_ONSTACK 0x0001 /* deliver signal on alternate stack */
|
||||
#define SA_RESETHAND 0x0002 /* reset signal handler when signal caught */
|
||||
#define SA_NODEFER 0x0004 /* don't block signal while catching it */
|
||||
#define SA_RESTART 0x0008 /* automatic system call restart */
|
||||
#define SA_SIGINFO 0x0010 /* extended signal handling */
|
||||
#define SA_NOCLDWAIT 0x0020 /* don't create zombies */
|
||||
#define SA_NOCLDSTOP 0x0040 /* don't receive SIGCHLD when child stops */
|
||||
|
||||
/* POSIX requires these values for use with sigprocmask(2). */
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
#define SIG_INQUIRE 4 /* for internal use only */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
typedef void (*sig_t)(int); /* type of signal function */
|
||||
#endif
|
||||
|
||||
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* Flags used with stack_t/struct sigaltstack.
|
||||
*/
|
||||
#define SS_ONSTACK 1 /* Process is executing on an alternate stack */
|
||||
#define SS_DISABLE 2 /* Alternate stack is disabled */
|
||||
|
||||
#define MINSIGSTKSZ 2048 /* Minimal stack size is 2k */
|
||||
#define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */
|
||||
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
|
||||
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* Structure used in sigstack call.
|
||||
*/
|
||||
struct sigstack {
|
||||
void *ss_sp; /* signal stack pointer */
|
||||
int ss_onstack; /* current status */
|
||||
};
|
||||
#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
|
||||
#if defined(_NETBSD_SOURCE) && !defined(_KERNEL)
|
||||
/*
|
||||
* Macro for converting signal number to a mask suitable for
|
||||
* sigblock().
|
||||
*/
|
||||
#define sigmask(n) __sigmask(n)
|
||||
|
||||
#define BADSIG SIG_ERR
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
struct sigevent {
|
||||
int sigev_notify;
|
||||
int sigev_signo;
|
||||
union sigval sigev_value;
|
||||
void (*sigev_notify_function)(union sigval);
|
||||
void /* pthread_attr_t */ *sigev_notify_attributes;
|
||||
};
|
||||
|
||||
#define SIGEV_NONE 0
|
||||
#define SIGEV_SIGNAL 1
|
||||
#define SIGEV_THREAD 2
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define SIGEV_SA 3
|
||||
#endif
|
||||
#endif /* (_POSIX_C_SOURCE - 0) >= 199309L || ... */
|
||||
|
||||
#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* For historical reasons; programs expect signal's return value to be
|
||||
* defined by <sys/signal.h>.
|
||||
*/
|
||||
__BEGIN_DECLS
|
||||
void (*signal(int, void (*)(int)))(int);
|
||||
__END_DECLS
|
||||
#endif /* !_SYS_SIGNAL_H_ */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#ifndef _SYS_SIGTYPES_H_
|
||||
#define _SYS_SIGTYPES_H_
|
||||
|
||||
/*
|
||||
* This header file defines various signal-related types. We also keep
|
||||
* the macros to manipulate sigset_t here, to encapsulate knowledge of
|
||||
* its internals.
|
||||
*/
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
#include <machine/int_types.h>
|
||||
#include <machine/ansi.h>
|
||||
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
typedef unsigned long sigset_t;
|
||||
|
||||
/*
|
||||
* Macro for manipulating signal masks.
|
||||
*/
|
||||
#ifndef __minix
|
||||
#define __sigmask(n) (1 << (((unsigned int)(n) - 1)))
|
||||
#else /* __minix */
|
||||
#define __sigmask(n) (1 << (unsigned int)(n))
|
||||
#endif /* !__minix */
|
||||
#define __sigaddset(s, n) \
|
||||
do { \
|
||||
*(s) = *(unsigned long *)(s) | __sigmask(n); \
|
||||
} while(0)
|
||||
#define __sigdelset(s, n) \
|
||||
do { \
|
||||
*(s) = *(unsigned long *)(s) & ~__sigmask(n); \
|
||||
} while (0)
|
||||
|
||||
#define __sigismember(s, n) (((*(const unsigned long *)(s)) & __sigmask(n)) != 0)
|
||||
#define __sigemptyset(s) (*(unsigned long *)(s) = 0)
|
||||
#define __sigsetequal(s1, s2) (*(unsigned long *)(s1) = *(unsigned long *)(s2))
|
||||
#define __sigfillset(s) (*(long *)(s) = -1L)
|
||||
#define __sigplusset(s, t) \
|
||||
do { \
|
||||
*(t) = *(unsigned long *)(t) | *(unsigned long *)(s); \
|
||||
} while (0)
|
||||
#define __sigminusset(s, t) \
|
||||
do { \
|
||||
*(t) = *(unsigned long *)(t) & ~*(unsigned long *)(s); \
|
||||
} while (0)
|
||||
#define __sigandset(s, t) \
|
||||
do { \
|
||||
*(t) = *(unsigned long *)(t) & *(unsigned long *)(s); \
|
||||
} while (0)
|
||||
|
||||
#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
typedef struct
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
sigaltstack
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
{
|
||||
void *ss_sp; /* signal stack base */
|
||||
size_t ss_size; /* signal stack length */
|
||||
int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */
|
||||
} stack_t;
|
||||
|
||||
#endif /* _XOPEN_SOURCE_EXTENDED || XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
|
||||
#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || ... */
|
||||
#endif /* !_SYS_SIGTYPES_H_ */
|
||||
+252
-114
@@ -1,77 +1,236 @@
|
||||
#ifndef _SYS_SOCKET_H_
|
||||
#define _SYS_SOCKET_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/*
|
||||
sys/socket.h
|
||||
*/
|
||||
|
||||
#ifndef SYS_SOCKET_H
|
||||
#define SYS_SOCKET_H
|
||||
|
||||
/* Can we include <stdint.h> here or do we need an additional header that is
|
||||
* safe to include?
|
||||
* Definitions related to sockets: types, address families, options.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
#include <sys/ucred.h>
|
||||
/*
|
||||
* Data types.
|
||||
*/
|
||||
#include <sys/ansi.h>
|
||||
|
||||
/* Open Group Base Specifications Issue 6 (not complete) */
|
||||
#include <net/gen/socket.h>
|
||||
#ifndef sa_family_t
|
||||
typedef __sa_family_t sa_family_t;
|
||||
#define sa_family_t __sa_family_t
|
||||
#endif
|
||||
|
||||
#define SOCK_STREAM 1
|
||||
#define SOCK_DGRAM 2
|
||||
#define SOCK_RAW 3
|
||||
#define SOCK_RDM 4
|
||||
#define SOCK_SEQPACKET 5
|
||||
#ifndef socklen_t
|
||||
typedef __socklen_t socklen_t;
|
||||
#define socklen_t __socklen_t
|
||||
#endif
|
||||
|
||||
#define SOL_SOCKET 0xFFFF
|
||||
#include <machine/ansi.h>
|
||||
|
||||
#define SO_DEBUG 0x0001
|
||||
#define SO_REUSEADDR 0x0004
|
||||
#define SO_KEEPALIVE 0x0008
|
||||
#define SO_TYPE 0x0010 /* get socket type, SOCK_STREAM or SOCK_DGRAM */
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SSIZE_T_
|
||||
typedef _BSD_SSIZE_T_ ssize_t;
|
||||
#undef _BSD_SSIZE_T_
|
||||
#endif
|
||||
|
||||
#include <sys/uio.h>
|
||||
|
||||
/*
|
||||
* Socket types.
|
||||
*/
|
||||
#define SOCK_STREAM 1 /* stream socket */
|
||||
#define SOCK_DGRAM 2 /* datagram socket */
|
||||
#define SOCK_RAW 3 /* raw-protocol interface */
|
||||
#define SOCK_RDM 4 /* reliably-delivered message */
|
||||
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
|
||||
|
||||
/*
|
||||
* Option flags per-socket.
|
||||
*/
|
||||
#define SO_DEBUG 0x0001 /* turn on debugging info recording */
|
||||
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
|
||||
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
|
||||
#define SO_TYPE 0x0010 /* get socket type */
|
||||
|
||||
#define SO_PASSCRED 0x0012
|
||||
#define SO_PEERCRED 0x0014
|
||||
|
||||
#define SO_SNDBUF 0x1001 /* send buffer size */
|
||||
#define SO_RCVBUF 0x1002 /* receive buffer size */
|
||||
#define SO_ERROR 0x1007 /* get and clear error status */
|
||||
#define SO_SNDBUF 0x1001 /* send buffer size */
|
||||
#define SO_RCVBUF 0x1002 /* receive buffer size */
|
||||
#define SO_ERROR 0x1007 /* get error status and clear */
|
||||
|
||||
/* The how argument to shutdown */
|
||||
#define SHUT_RD 0 /* No further reads */
|
||||
#define SHUT_WR 1 /* No further writes */
|
||||
#define SHUT_RDWR 2 /* No further reads and writes */
|
||||
|
||||
#ifndef _SA_FAMILY_T
|
||||
#define _SA_FAMILY_T
|
||||
typedef uint8_t sa_family_t;
|
||||
#endif /* _SA_FAMILY_T */
|
||||
/*
|
||||
* Level number for (get/set)sockopt() to apply to socket itself.
|
||||
*/
|
||||
#define SOL_SOCKET 0xffff /* options for socket level */
|
||||
|
||||
#ifndef _SOCKLEN_T
|
||||
#define _SOCKLEN_T
|
||||
typedef int32_t socklen_t;
|
||||
#endif /* _SOCKLEN_T */
|
||||
/*
|
||||
* Address families.
|
||||
*/
|
||||
#define AF_UNSPEC 0 /* unspecified */
|
||||
#define AF_LOCAL 1 /* local to host */
|
||||
#define AF_UNIX AF_LOCAL /* backward compatibility */
|
||||
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
|
||||
#define AF_IMPLINK 3 /* arpanet imp addresses */
|
||||
#define AF_PUP 4 /* pup protocols: e.g. BSP */
|
||||
#define AF_CHAOS 5 /* mit CHAOS protocols */
|
||||
#define AF_NS 6 /* XEROX NS protocols */
|
||||
#define AF_ISO 7 /* ISO protocols */
|
||||
#define AF_OSI AF_ISO
|
||||
#define AF_ECMA 8 /* european computer manufacturers */
|
||||
#define AF_DATAKIT 9 /* datakit protocols */
|
||||
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
|
||||
#define AF_SNA 11 /* IBM SNA */
|
||||
#define AF_DECnet 12 /* DECnet */
|
||||
#define AF_DLI 13 /* DEC Direct data link interface */
|
||||
#define AF_LAT 14 /* LAT */
|
||||
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
||||
#define AF_APPLETALK 16 /* Apple Talk */
|
||||
#define AF_ROUTE 17 /* Internal Routing Protocol */
|
||||
#define AF_LINK 18 /* Link layer interface */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
||||
#endif
|
||||
#define AF_COIP 20 /* connection-oriented IP, aka ST II */
|
||||
#define AF_CNT 21 /* Computer Network Technology */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */
|
||||
#endif
|
||||
#define AF_IPX 23 /* Novell Internet Protocol */
|
||||
#define AF_INET6 24 /* IP version 6 */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define pseudo_AF_PIP 25 /* Help Identify PIP packets */
|
||||
#endif
|
||||
#define AF_ISDN 26 /* Integrated Services Digital Network*/
|
||||
#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */
|
||||
#define AF_NATM 27 /* native ATM access */
|
||||
#define AF_ARP 28 /* (rev.) addr. res. prot. (RFC 826) */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define pseudo_AF_KEY 29 /* Internal key management protocol */
|
||||
#define pseudo_AF_HDRCMPLT 30 /* Used by BPF to not rewrite hdrs
|
||||
in interface output routine */
|
||||
#endif
|
||||
#define AF_BLUETOOTH 31 /* Bluetooth: HCI, SCO, L2CAP, RFCOMM */
|
||||
#define AF_IEEE80211 32 /* IEEE80211 */
|
||||
|
||||
#define AF_MAX 33
|
||||
|
||||
#ifndef gid_t
|
||||
typedef __gid_t gid_t; /* group id */
|
||||
#define gid_t __gid_t
|
||||
#endif
|
||||
|
||||
#ifndef uid_t
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define uid_t __uid_t
|
||||
#endif
|
||||
|
||||
#include <sys/ucred.h>
|
||||
|
||||
/*
|
||||
* Structure used by kernel to store most
|
||||
* addresses.
|
||||
*/
|
||||
struct sockaddr
|
||||
{
|
||||
sa_family_t sa_family;
|
||||
char sa_data[8]; /* Big enough for sockaddr_in */
|
||||
};
|
||||
|
||||
struct msghdr
|
||||
{
|
||||
void *msg_name;
|
||||
socklen_t msg_namelen;
|
||||
struct iovec *msg_iov;
|
||||
size_t msg_iovlen;
|
||||
void *msg_control;
|
||||
socklen_t msg_controllen;
|
||||
int msg_flags;
|
||||
/*
|
||||
* RFC 2553: protocol-independent placeholder for socket addresses
|
||||
*/
|
||||
#define _SS_MAXSIZE 128
|
||||
#define _SS_ALIGNSIZE (sizeof(__int64_t))
|
||||
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 1)
|
||||
#define _SS_PAD2SIZE (_SS_MAXSIZE - 1 - \
|
||||
_SS_PAD1SIZE - _SS_ALIGNSIZE)
|
||||
|
||||
#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
struct sockaddr_storage {
|
||||
sa_family_t ss_family; /* address family */
|
||||
char __ss_pad1[_SS_PAD1SIZE];
|
||||
__int64_t __ss_align;/* force desired structure storage alignment */
|
||||
char __ss_pad2[_SS_PAD2SIZE];
|
||||
};
|
||||
#define sstosa(__ss) ((struct sockaddr *)(__ss))
|
||||
#define sstocsa(__ss) ((const struct sockaddr *)(__ss))
|
||||
#endif /* _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* Protocol families, same as address families for now.
|
||||
*/
|
||||
#define PF_UNSPEC AF_UNSPEC
|
||||
#define PF_LOCAL AF_LOCAL
|
||||
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
||||
#define PF_FILE PF_LOCAL /* Minix compatibility */
|
||||
#define PF_INET AF_INET
|
||||
#define PF_IMPLINK AF_IMPLINK
|
||||
#define PF_PUP AF_PUP
|
||||
#define PF_CHAOS AF_CHAOS
|
||||
#define PF_NS AF_NS
|
||||
#define PF_ISO AF_ISO
|
||||
#define PF_OSI AF_ISO
|
||||
#define PF_ECMA AF_ECMA
|
||||
#define PF_DATAKIT AF_DATAKIT
|
||||
#define PF_CCITT AF_CCITT
|
||||
#define PF_SNA AF_SNA
|
||||
#define PF_DECnet AF_DECnet
|
||||
#define PF_DLI AF_DLI
|
||||
#define PF_LAT AF_LAT
|
||||
#define PF_HYLINK AF_HYLINK
|
||||
#define PF_APPLETALK AF_APPLETALK
|
||||
#define PF_ROUTE AF_ROUTE
|
||||
#define PF_LINK AF_LINK
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
|
||||
#endif
|
||||
#define PF_COIP AF_COIP
|
||||
#define PF_CNT AF_CNT
|
||||
#define PF_INET6 AF_INET6
|
||||
#define PF_IPX AF_IPX /* same format as AF_NS */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */
|
||||
#define PF_PIP pseudo_AF_PIP
|
||||
#endif
|
||||
#define PF_ISDN AF_ISDN /* same as E164 */
|
||||
#define PF_E164 AF_E164
|
||||
#define PF_NATM AF_NATM
|
||||
#define PF_ARP AF_ARP
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define PF_KEY pseudo_AF_KEY /* like PF_ROUTE, only for key mgmt */
|
||||
#endif
|
||||
#define PF_BLUETOOTH AF_BLUETOOTH
|
||||
|
||||
#define PF_MAX AF_MAX
|
||||
|
||||
/*
|
||||
* Message header for recvmsg and sendmsg calls.
|
||||
* Used value-result for recvmsg, value only for sendmsg.
|
||||
*/
|
||||
struct msghdr {
|
||||
void *msg_name; /* optional address */
|
||||
socklen_t msg_namelen; /* size of address */
|
||||
struct iovec *msg_iov; /* scatter/gather array */
|
||||
int msg_iovlen; /* # elements in msg_iov */
|
||||
void *msg_control; /* ancillary data, see below */
|
||||
socklen_t msg_controllen; /* ancillary data buffer len */
|
||||
int msg_flags; /* flags on received message */
|
||||
};
|
||||
|
||||
struct cmsghdr
|
||||
{
|
||||
socklen_t cmsg_len;
|
||||
int cmsg_level;
|
||||
int cmsg_type;
|
||||
/*
|
||||
* Header for ancillary data objects in msg_control buffer.
|
||||
* Used for additional information with/about a datagram
|
||||
* not expressible by flags. The format is a sequence
|
||||
* of message elements headed by cmsghdr structures.
|
||||
*/
|
||||
struct cmsghdr {
|
||||
socklen_t cmsg_len; /* data byte count, including hdr */
|
||||
int cmsg_level; /* originating protocol */
|
||||
int cmsg_type; /* protocol-specific type */
|
||||
/* followed by u_char cmsg_data[]; */
|
||||
};
|
||||
|
||||
#define CMSG_FIRSTHDR(mhdr) \
|
||||
@@ -97,75 +256,54 @@ struct cmsghdr
|
||||
#define CMSG_DATA(cmsg) \
|
||||
( (unsigned char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)) )
|
||||
|
||||
#define CMSG_SPACE(len) \
|
||||
( CMSG_ALIGN(len) + CMSG_ALIGN(sizeof(struct cmsghdr)) )
|
||||
|
||||
#define CMSG_LEN(len) \
|
||||
( len + CMSG_ALIGN(sizeof(struct cmsghdr)) )
|
||||
#define CMSG_SPACE(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(l))
|
||||
#define CMSG_LEN(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||
|
||||
/* "Socket"-level control message types: */
|
||||
#define SCM_RIGHTS 0x01
|
||||
#define SCM_CREDENTIALS 0x02
|
||||
#define SCM_SECURITY 0x04
|
||||
|
||||
_PROTOTYPE( int accept, (int _socket,
|
||||
struct sockaddr *_RESTRICT _address,
|
||||
socklen_t *_RESTRICT _address_len) );
|
||||
_PROTOTYPE( int bind, (int _socket, const struct sockaddr *_address,
|
||||
socklen_t _address_len) );
|
||||
_PROTOTYPE( int connect, (int _socket, const struct sockaddr *_address,
|
||||
socklen_t _address_len) );
|
||||
_PROTOTYPE( int getpeername, (int _socket,
|
||||
struct sockaddr *_RESTRICT _address,
|
||||
socklen_t *_RESTRICT _address_len) );
|
||||
_PROTOTYPE( int getpeereid, (int _socket, uid_t *_euid, gid_t *_egid) );
|
||||
_PROTOTYPE( int getsockname, (int _socket,
|
||||
struct sockaddr *_RESTRICT _address,
|
||||
socklen_t *_RESTRICT _address_len) );
|
||||
_PROTOTYPE( int setsockopt,(int _socket, int _level, int _option_name,
|
||||
const void *_option_value, socklen_t _option_len) );
|
||||
_PROTOTYPE( int getsockopt, (int _socket, int _level, int _option_name,
|
||||
void *_RESTRICT _option_value, socklen_t *_RESTRICT _option_len));
|
||||
_PROTOTYPE( int listen, (int _socket, int _backlog) );
|
||||
_PROTOTYPE( ssize_t recv, (int _socket, void *_buffer, size_t _length,
|
||||
int _flags) );
|
||||
_PROTOTYPE( ssize_t recvfrom, (int _socket, void *_RESTRICT _buffer,
|
||||
size_t _length, int _flags, struct sockaddr *_RESTRICT _address,
|
||||
socklen_t *_RESTRICT _address_len) );
|
||||
_PROTOTYPE( ssize_t recvmsg, (int _socket, struct msghdr *_msg,
|
||||
int _flags) );
|
||||
_PROTOTYPE( ssize_t send, (int _socket, const void *_buffer,
|
||||
size_t _length, int _flags) );
|
||||
_PROTOTYPE( ssize_t sendmsg, (int _socket, const struct msghdr *_msg,
|
||||
int _flags) );
|
||||
_PROTOTYPE( ssize_t sendto, (int _socket, const void *_message,
|
||||
size_t _length, int _flags, const struct sockaddr *_dest_addr,
|
||||
socklen_t _dest_len) );
|
||||
_PROTOTYPE( int shutdown, (int _socket, int _how) );
|
||||
_PROTOTYPE( int socket, (int _domain, int _type, int _protocol) );
|
||||
_PROTOTYPE( int socketpair, (int _domain, int _type, int _protocol,
|
||||
int _sv[2]) );
|
||||
|
||||
/* The following constants are often used in applications, but are not defined
|
||||
* by POSIX.
|
||||
/*
|
||||
* Types of socket shutdown(2).
|
||||
*/
|
||||
#define PF_INET AF_INET
|
||||
#define PF_INET6 AF_INET6
|
||||
#define PF_UNIX AF_UNIX
|
||||
#define PF_LOCAL PF_UNIX
|
||||
#define PF_FILE PF_UNIX
|
||||
#define PF_UNSPEC AF_UNSPEC
|
||||
#define SHUT_RD 0 /* Disallow further receives. */
|
||||
#define SHUT_WR 1 /* Disallow further sends. */
|
||||
#define SHUT_RDWR 2 /* Disallow further sends/receives. */
|
||||
|
||||
/* based on http://tools.ietf.org/html/rfc2553 */
|
||||
struct sockaddr_storage
|
||||
{
|
||||
sa_family_t ss_family;
|
||||
char __ss_pad1[6];
|
||||
#ifdef __LONG_LONG_SUPPORTED
|
||||
int64_t __ss_align;
|
||||
#else
|
||||
int32_t __ss_align[2];
|
||||
#endif
|
||||
char __ss_pad2[112];
|
||||
};
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#endif /* SYS_SOCKET_H */
|
||||
__BEGIN_DECLS
|
||||
int __cmsg_alignbytes(void);
|
||||
__END_DECLS
|
||||
|
||||
__BEGIN_DECLS
|
||||
int accept(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
int bind(int, const struct sockaddr *, socklen_t);
|
||||
int connect(int, const struct sockaddr *, socklen_t);
|
||||
int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict);
|
||||
int listen(int, int);
|
||||
ssize_t recv(int, void *, size_t, int);
|
||||
ssize_t recvfrom(int, void *__restrict, size_t, int,
|
||||
struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
ssize_t recvmsg(int, struct msghdr *, int);
|
||||
ssize_t send(int, const void *, size_t, int);
|
||||
ssize_t sendto(int, const void *,
|
||||
size_t, int, const struct sockaddr *, socklen_t);
|
||||
ssize_t sendmsg(int, const struct msghdr *, int);
|
||||
int setsockopt(int, int, int, const void *, socklen_t);
|
||||
int shutdown(int, int);
|
||||
int sockatmark(int);
|
||||
int socket(int, int, int);
|
||||
int socketpair(int, int, int, int *);
|
||||
__END_DECLS
|
||||
|
||||
#define MSG_OOB 0x0001 /* process out-of-band data */
|
||||
#define MSG_PEEK 0x0002 /* peek at incoming message */
|
||||
#define MSG_DONTROUTE 0x0004 /* send without using routing tables */
|
||||
#define MSG_EOR 0x0008 /* complete record */
|
||||
|
||||
#endif /* !_SYS_SOCKET_H_ */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+134
-81
@@ -1,21 +1,18 @@
|
||||
/* The <sys/stat.h> header defines a struct that is used in the stat() and
|
||||
* fstat functions. The information in this struct comes from the i-node of
|
||||
* some file. These calls are the only approved way to inspect i-nodes.
|
||||
*/
|
||||
#ifndef _SYS_STAT_H_
|
||||
#define _SYS_STAT_H_
|
||||
|
||||
#ifndef _STAT_H
|
||||
#define _STAT_H
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/types.h> /* XXX */
|
||||
|
||||
#ifndef _TYPES_H
|
||||
#include <minix/types.h>
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
|
||||
struct stat {
|
||||
big_dev_t st_dev; /* inode's device */
|
||||
big_mode_t st_mode; /* inode protection mode */
|
||||
ino_t st_ino; /* inode's number */
|
||||
u32_t padding; /* inode's padding */
|
||||
big_ino_t st_ino; /* inode's number */
|
||||
big_nlink_t st_nlink; /* number of hard links */
|
||||
big_uid_t st_uid; /* user ID of the file's owner */
|
||||
big_gid_t st_gid; /* group ID of the file's group */
|
||||
@@ -35,10 +32,8 @@ struct stat {
|
||||
time_t st_birthtime; /* time of creation */
|
||||
long st_birthtimensec; /* nsec of time of creation */
|
||||
#endif
|
||||
off_t st_size; /* file size, in bytes */
|
||||
u32_t padding2; /* size padding */
|
||||
big_off_t st_size; /* file size, in bytes */
|
||||
blkcnt_t st_blocks; /* blocks allocated for file */
|
||||
u32_t padding3; /* blocks padding */
|
||||
blksize_t st_blksize; /* optimal blocksize for I/O */
|
||||
u32_t st_flags; /* user defined flags for file */
|
||||
u32_t st_gen; /* file generation number */
|
||||
@@ -61,80 +56,138 @@ struct minix_prev_stat {
|
||||
};
|
||||
|
||||
|
||||
/* Copy field by field because of st_gid type mismath and
|
||||
* difference in order after atime.
|
||||
*/
|
||||
#define COPY_PREV_STAT_TO_NEW(dest, src)\
|
||||
(dest)->st_dev = (src)->st_dev;\
|
||||
(dest)->st_ino = (src)->st_ino;\
|
||||
(dest)->st_mode = (src)->st_mode;\
|
||||
(dest)->st_nlink = (src)->st_nlink;\
|
||||
(dest)->st_uid = (src)->st_uid;\
|
||||
(dest)->st_gid = (src)->st_gid;\
|
||||
(dest)->st_rdev = (src)->st_rdev;\
|
||||
(dest)->st_size = (src)->st_size;\
|
||||
(dest)->st_atime = (src)->st_atime;\
|
||||
(dest)->st_mtime = (src)->st_mtime;\
|
||||
(dest)->st_ctime = (src)->st_ctime
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/* XXX after updating stat struct we don't want to update all the code */
|
||||
#define st_atime st_atimespec.tv_sec
|
||||
#define st_mtime st_mtimespec.tv_sec
|
||||
#define st_ctime st_ctimespec.tv_sec
|
||||
#define st_birthtime st_birthtimespec.tv_sec
|
||||
#define st_atimensec st_atimespec.tv_nsec
|
||||
#define st_mtimensec st_mtimespec.tv_nsec
|
||||
#define st_ctimensec st_ctimespec.tv_nsec
|
||||
#define st_birthtimensec st_birthtimespec.tv_nsec
|
||||
#endif
|
||||
|
||||
|
||||
#define S_ISUID 0004000 /* set user id on execution */
|
||||
#define S_ISGID 0002000 /* set group id on execution */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define S_ISTXT 0001000 /* sticky bit */
|
||||
#endif
|
||||
|
||||
#define S_IRWXU 0000700 /* RWX mask for owner */
|
||||
#define S_IRUSR 0000400 /* R for owner */
|
||||
#define S_IWUSR 0000200 /* W for owner */
|
||||
#define S_IXUSR 0000100 /* X for owner */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define S_IREAD S_IRUSR
|
||||
#define S_IWRITE S_IWUSR
|
||||
#define S_IEXEC S_IXUSR
|
||||
#endif
|
||||
|
||||
#define S_IRWXG 0000070 /* RWX mask for group */
|
||||
#define S_IRGRP 0000040 /* R for group */
|
||||
#define S_IWGRP 0000020 /* W for group */
|
||||
#define S_IXGRP 0000010 /* X for group */
|
||||
|
||||
#define S_IRWXO 0000007 /* RWX mask for other */
|
||||
#define S_IROTH 0000004 /* R for other */
|
||||
#define S_IWOTH 0000002 /* W for other */
|
||||
#define S_IXOTH 0000001 /* X for other */
|
||||
|
||||
#define _S_IFMT 0170000 /* type of file mask */
|
||||
#define _S_IFIFO 0010000 /* named pipe (fifo) */
|
||||
#define _S_IFCHR 0020000 /* character special */
|
||||
#define _S_IFDIR 0040000 /* directory */
|
||||
#define _S_IFBLK 0060000 /* block special */
|
||||
#define _S_IFREG 0100000 /* regular */
|
||||
#define _S_IFLNK 0120000 /* symbolic link */
|
||||
#define _S_IFSOCK 0140000 /* socket */
|
||||
#define _S_ISVTX 0001000 /* save swapped text even after use */
|
||||
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#define S_IFMT _S_IFMT
|
||||
#define S_IFIFO _S_IFIFO
|
||||
#define S_IFCHR _S_IFCHR
|
||||
#define S_IFDIR _S_IFDIR
|
||||
#define S_IFBLK _S_IFBLK
|
||||
#define S_IFREG _S_IFREG
|
||||
#define S_IFLNK _S_IFLNK
|
||||
#define S_ISVTX _S_ISVTX
|
||||
#endif
|
||||
#if ((_XOPEN_SOURCE - 0) >= 600) || defined(_NETBSD_SOURCE)
|
||||
#define S_IFSOCK _S_IFSOCK
|
||||
#endif
|
||||
|
||||
#define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) /* directory */
|
||||
#define S_ISCHR(m) (((m) & _S_IFMT) == _S_IFCHR) /* char special */
|
||||
#define S_ISBLK(m) (((m) & _S_IFMT) == _S_IFBLK) /* block special */
|
||||
#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) /* regular file */
|
||||
#define S_ISFIFO(m) (((m) & _S_IFMT) == _S_IFIFO) /* fifo */
|
||||
#if ((_POSIX_C_SOURCE - 0) >= 200112L) || defined(_XOPEN_SOURCE) || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#define S_ISLNK(m) (((m) & _S_IFMT) == _S_IFLNK) /* symbolic link */
|
||||
#endif
|
||||
#if ((_POSIX_C_SOURCE - 0) >= 200112L) || ((_XOPEN_SOURCE - 0) >= 600) || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#define S_ISSOCK(m) (((m) & _S_IFMT) == _S_IFSOCK) /* socket */
|
||||
#endif
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
|
||||
/* 7777 */
|
||||
#define ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
|
||||
/* 0666 */
|
||||
#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
|
||||
|
||||
#define S_BLKSIZE 512 /* block size used in the stat struct */
|
||||
|
||||
/* Traditional mask definitions for st_mode. */
|
||||
#define S_IFMT 0170000 /* type of file */
|
||||
#define S_IFSOCK 0140000 /* socket */
|
||||
#define S_IFLNK 0120000 /* symbolic link */
|
||||
#define S_IFREG 0100000 /* regular */
|
||||
#define S_IFBLK 0060000 /* block special */
|
||||
#define S_IFDIR 0040000 /* directory */
|
||||
#define S_IFCHR 0020000 /* character special */
|
||||
#define S_IFIFO 0010000 /* this is a FIFO */
|
||||
#define S_ISUID 0004000 /* set user id on execution */
|
||||
#define S_ISGID 0002000 /* set group id on execution */
|
||||
#define S_ISVTX 0001000 /* save swapped text even after use */
|
||||
/*
|
||||
* Definitions of flags stored in file flags word.
|
||||
*
|
||||
* Super-user and owner changeable flags.
|
||||
*/
|
||||
#define UF_SETTABLE 0x0000ffff /* mask of owner changeable flags */
|
||||
#define UF_NODUMP 0x00000001 /* do not dump file */
|
||||
#define UF_IMMUTABLE 0x00000002 /* file may not be changed */
|
||||
#define UF_APPEND 0x00000004 /* writes to file may only append */
|
||||
#define UF_OPAQUE 0x00000008 /* directory is opaque wrt. union */
|
||||
|
||||
/* POSIX masks for st_mode. */
|
||||
#define S_IRWXU 00700 /* owner: rwx------ */
|
||||
#define S_IRUSR 00400 /* owner: r-------- */
|
||||
#define S_IWUSR 00200 /* owner: -w------- */
|
||||
#define S_IXUSR 00100 /* owner: --x------ */
|
||||
/*
|
||||
* Super-user changeable flags.
|
||||
*/
|
||||
#define SF_SETTABLE 0xffff0000 /* mask of superuser changeable flags */
|
||||
#define SF_ARCHIVED 0x00010000 /* file is archived */
|
||||
#define SF_IMMUTABLE 0x00020000 /* file may not be changed */
|
||||
#define SF_APPEND 0x00040000 /* writes to file may only append */
|
||||
|
||||
#define S_IRWXG 00070 /* group: ---rwx--- */
|
||||
#define S_IRGRP 00040 /* group: ---r----- */
|
||||
#define S_IWGRP 00020 /* group: ----w---- */
|
||||
#define S_IXGRP 00010 /* group: -----x--- */
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
#define S_IRWXO 00007 /* others: ------rwx */
|
||||
#define S_IROTH 00004 /* others: ------r-- */
|
||||
#define S_IWOTH 00002 /* others: -------w- */
|
||||
#define S_IXOTH 00001 /* others: --------x */
|
||||
#if defined(__minix)
|
||||
#include <machine/vmparam.h>
|
||||
/* Convenient constant to use when st_blocksize field is required. */
|
||||
#define MINIX_ST_BLKSIZE PAGE_SIZE
|
||||
#endif
|
||||
|
||||
/* Synonyms for above. */
|
||||
#define S_IEXEC S_IXUSR
|
||||
#define S_IWRITE S_IWUSR
|
||||
#define S_IREAD S_IRUSR
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/* The following macros test st_mode (from POSIX Sec. 5.6.1.1). */
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) /* is a reg file */
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) /* is a directory */
|
||||
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) /* is a char spec */
|
||||
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) /* is a block spec */
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* is a symlink */
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* is a pipe/FIFO */
|
||||
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) /* is a socket */
|
||||
__BEGIN_DECLS
|
||||
int chmod(const char *, mode_t);
|
||||
int mkdir(const char *, mode_t);
|
||||
int mkfifo(const char *, mode_t);
|
||||
#ifndef __LIBC12_SOURCE__
|
||||
int stat(const char *, struct stat *) __RENAME(__stat50);
|
||||
int fstat(int, struct stat *) __RENAME(__fstat50);
|
||||
#endif
|
||||
mode_t umask(mode_t);
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
int fchmod(int, mode_t);
|
||||
#ifndef __LIBC12_SOURCE__
|
||||
int lstat(const char *, struct stat *) __RENAME(__lstat50);
|
||||
int mknod(const char *, mode_t, dev_t) __RENAME(__mknod50);
|
||||
#endif
|
||||
#endif /* defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) */
|
||||
__END_DECLS
|
||||
|
||||
#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
|
||||
#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
|
||||
|
||||
/* Function Prototypes. */
|
||||
_PROTOTYPE( int chmod, (const char *_path, mode_t _mode) );
|
||||
_PROTOTYPE( int fchmod, (int fd, mode_t _mode) );
|
||||
_PROTOTYPE( int fstat, (int _fildes, struct stat *_buf) );
|
||||
_PROTOTYPE( int mkdir, (const char *_path, mode_t _mode) );
|
||||
_PROTOTYPE( int mkfifo, (const char *_path, mode_t _mode) );
|
||||
_PROTOTYPE( int stat, (const char *_path, struct stat *_buf) );
|
||||
_PROTOTYPE( mode_t umask, (mode_t _cmask) );
|
||||
|
||||
/* Open Group Base Specifications Issue 6 (not complete) */
|
||||
_PROTOTYPE( int lstat, (const char *_path, struct stat *_buf) );
|
||||
|
||||
#endif /* _STAT_H */
|
||||
#endif /* !_SYS_STAT_H_ */
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
#ifndef _STATFS_H
|
||||
#define _STATFS_H
|
||||
|
||||
#ifndef _TYPES_H
|
||||
#include <minix/types.h>
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
struct statfs {
|
||||
off_t f_bsize; /* file system block size */
|
||||
};
|
||||
|
||||
_PROTOTYPE( int fstatfs, (int fd, struct statfs *st) );
|
||||
int fstatfs(int fd, struct statfs *st);
|
||||
|
||||
#endif /* _STATFS_H */
|
||||
|
||||
+40
-15
@@ -1,12 +1,35 @@
|
||||
/* Statvfs implementation corresponding to:
|
||||
* http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html
|
||||
*/
|
||||
#ifndef _SYS_STATVFS_H_
|
||||
#define _SYS_STATVFS_H_
|
||||
|
||||
#ifndef _STATVFS_H
|
||||
#define _STATVFS_H
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/stdint.h>
|
||||
#include <machine/ansi.h>
|
||||
#include <sys/ansi.h>
|
||||
|
||||
#include <minix/types.h>
|
||||
#define _VFS_NAMELEN 32
|
||||
#define _VFS_MNAMELEN 1024
|
||||
|
||||
#ifndef fsblkcnt_t
|
||||
typedef __fsblkcnt_t fsblkcnt_t; /* fs block count (statvfs) */
|
||||
#define fsblkcnt_t __fsblkcnt_t
|
||||
#endif
|
||||
|
||||
#ifndef fsfilcnt_t
|
||||
typedef __fsfilcnt_t fsfilcnt_t; /* fs file count */
|
||||
#define fsfilcnt_t __fsfilcnt_t
|
||||
#endif
|
||||
|
||||
#ifndef uid_t
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define uid_t __uid_t
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#define _SIZE_T
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
struct statvfs {
|
||||
unsigned long f_bsize; /* File system block size. */
|
||||
@@ -26,14 +49,16 @@ struct statvfs {
|
||||
unsigned char __padding[32]; /* Padding for future compatibility */
|
||||
};
|
||||
|
||||
_PROTOTYPE( int fstatvfs, (int fd, struct statvfs *st) );
|
||||
_PROTOTYPE( int statvfs, (const char *path, struct statvfs *st));
|
||||
|
||||
/* Possible values for statvfs->f_flag */
|
||||
#define ST_RDONLY 0x001 /* Read-only file system */
|
||||
#define ST_NOSUID 0x002 /* Does not support the semantics of the
|
||||
* ST_ISUID and ST_ISGID file mode bits. */
|
||||
#define ST_NOTRUNC 0x004 /* File system does not truncate file names
|
||||
* longer than NAME_MAX */
|
||||
#define ST_RDONLY 0x1
|
||||
#define ST_NOSUID 0x2
|
||||
#ifdef __minix
|
||||
#define ST_NOTRUNC 0x4
|
||||
#endif /* !__minix*/
|
||||
|
||||
#endif /* _STAVTFS_H */
|
||||
__BEGIN_DECLS
|
||||
int statvfs(const char *__restrict, struct statvfs *__restrict);
|
||||
int fstatvfs(int, struct statvfs *);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_STATVFS_H_ */
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
/* $NetBSD: stdint.h,v 1.6 2008/04/28 20:24:11 martin Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2001, 2004 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Klaus Klein.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
|
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_STDINT_H_
|
||||
#define _SYS_STDINT_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <machine/int_types.h>
|
||||
|
||||
#ifndef int8_t
|
||||
typedef __int8_t int8_t;
|
||||
#define int8_t __int8_t
|
||||
#endif
|
||||
|
||||
#ifndef uint8_t
|
||||
typedef __uint8_t uint8_t;
|
||||
#define uint8_t __uint8_t
|
||||
#endif
|
||||
|
||||
#ifndef int16_t
|
||||
typedef __int16_t int16_t;
|
||||
#define int16_t __int16_t
|
||||
#endif
|
||||
|
||||
#ifndef uint16_t
|
||||
typedef __uint16_t uint16_t;
|
||||
#define uint16_t __uint16_t
|
||||
#endif
|
||||
|
||||
#ifndef int32_t
|
||||
typedef __int32_t int32_t;
|
||||
#define int32_t __int32_t
|
||||
#endif
|
||||
|
||||
#ifndef uint32_t
|
||||
typedef __uint32_t uint32_t;
|
||||
#define uint32_t __uint32_t
|
||||
#endif
|
||||
|
||||
#ifndef int64_t
|
||||
typedef __int64_t int64_t;
|
||||
#define int64_t __int64_t
|
||||
#endif
|
||||
|
||||
#ifndef uint64_t
|
||||
typedef __uint64_t uint64_t;
|
||||
#define uint64_t __uint64_t
|
||||
#endif
|
||||
|
||||
#ifndef intptr_t
|
||||
typedef __intptr_t intptr_t;
|
||||
#define intptr_t __intptr_t
|
||||
#endif
|
||||
|
||||
#ifndef uintptr_t
|
||||
typedef __uintptr_t uintptr_t;
|
||||
#define uintptr_t __uintptr_t
|
||||
#endif
|
||||
|
||||
#include <machine/int_mwgwtypes.h>
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
|
||||
#include <machine/int_limits.h>
|
||||
#endif
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
|
||||
#include <machine/int_const.h>
|
||||
#endif
|
||||
|
||||
#include <machine/wchar_limits.h>
|
||||
|
||||
#endif /* !_SYS_STDINT_H_ */
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef _SYS_SYSCTL_H
|
||||
#define _SYS_SYSCTL_H
|
||||
|
||||
/*
|
||||
* sysctl() is not supported. Warn non-libc programs including this header.
|
||||
*/
|
||||
#ifndef _LIBC
|
||||
#warning Including sysctl.h header. sysctl() is not supported in Minix.
|
||||
#endif /* !_LIBC */
|
||||
|
||||
/*
|
||||
* Used by gmon.
|
||||
*/
|
||||
struct clockinfo {
|
||||
int hz; /* clock frequency */
|
||||
int tick; /* micro-seconds per hz tick */
|
||||
int tickadj; /* clock skew rate for adjtime() */
|
||||
int stathz; /* statistics clock frequency */
|
||||
int profhz; /* profiling clock frequency */
|
||||
};
|
||||
|
||||
#endif /* _SYS_SYSCTL_H */
|
||||
@@ -0,0 +1,72 @@
|
||||
#ifndef _SYS_SYSLIMITS_H_
|
||||
#define _SYS_SYSLIMITS_H_
|
||||
|
||||
#include <minix/limits.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/* Values actually implemented by MINIX (Tables 2-4, 2-5, 2-6, and 2-7). */
|
||||
/* Some of these old names had better be defined when not POSIX. */
|
||||
#define _NO_LIMIT 160 /* arbitrary number; limit not enforced */
|
||||
|
||||
|
||||
#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
|
||||
#if _EM_WSIZE > 2
|
||||
#define ARG_MAX 262144 /* # bytes of args + environ for exec() */
|
||||
#else
|
||||
#define ARG_MAX 4096 /* args + environ on small machines */
|
||||
#endif
|
||||
|
||||
#ifndef CHILD_MAX
|
||||
#define CHILD_MAX _NO_LIMIT /* max simultaneous processes */
|
||||
#endif
|
||||
|
||||
#define GID_MAX USHRT_MAX /* max value for a gid_t */
|
||||
#define LINK_MAX SHRT_MAX /* # links a file may have */
|
||||
#define MAX_CANON 255 /* size of the canonical input queue */
|
||||
#define MAX_INPUT 255 /* size of the type-ahead buffer */
|
||||
#define NAME_MAX 255 /* system-wide max # chars in a file name */
|
||||
#define NGROUPS_MAX 8 /* max. number of supplemental groups */
|
||||
#define UID_MAX USHRT_MAX /* max value for a uid_t */
|
||||
#ifndef OPEN_MAX
|
||||
#define OPEN_MAX __MINIX_OPEN_MAX /* max open files per process */
|
||||
#endif
|
||||
#define PATH_MAX __MINIX_PATH_MAX /* # chars in a path name */
|
||||
#define PIPE_BUF 32768 /* # bytes in atomic write to a pipe */
|
||||
|
||||
#define BC_BASE_MAX INT_MAX /* max ibase/obase values in bc(1) */
|
||||
#define BC_DIM_MAX 65535 /* max array elements in bc(1) */
|
||||
#define BC_SCALE_MAX INT_MAX /* max scale value in bc(1) */
|
||||
#define BC_STRING_MAX INT_MAX /* max const string length in bc(1) */
|
||||
#define COLL_WEIGHTS_MAX 2 /* max weights for order keyword */
|
||||
#define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
|
||||
#define LINE_MAX 2048 /* max bytes in an input line */
|
||||
#define RE_DUP_MAX 255 /* max RE's in interval notation */
|
||||
|
||||
/*
|
||||
* IEEE Std 1003.1c-95, adopted in X/Open CAE Specification Issue 5 Version 2
|
||||
*/
|
||||
#if (_POSIX_C_SOURCE - 0) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#define LOGIN_NAME_MAX 17 /* max login name length incl. NUL */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* X/Open CAE Specification Issue 5 Version 2
|
||||
*/
|
||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
#define IOV_MAX 1024 /* max # of iovec's for readv(2) etc. */
|
||||
#define NZERO 20 /* default "nice" */
|
||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
|
||||
#endif /* !_ANSI_SOURCE */
|
||||
|
||||
#ifdef __minix
|
||||
#define STREAM_MAX 8 /* == _POSIX_STREAM_MAX */
|
||||
#define TZNAME_MAX 6 /* == _POSIX_TZNAME_MAX */
|
||||
#define TIME_MAX LONG_MAX
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_SYSLIMITS_H_ */
|
||||
|
||||
@@ -0,0 +1,241 @@
|
||||
/* $NetBSD: syslog.h,v 1.32 2008/10/31 16:12:18 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)syslog.h 8.1 (Berkeley) 6/2/93
|
||||
*/
|
||||
|
||||
#ifndef _SYS_SYSLOG_H_
|
||||
#define _SYS_SYSLOG_H_
|
||||
|
||||
#define _PATH_LOG "/var/run/log"
|
||||
|
||||
/*
|
||||
* priorities/facilities are encoded into a single 32-bit quantity, where the
|
||||
* bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
|
||||
* (0-big number). Both the priorities and the facilities map roughly
|
||||
* one-to-one to strings in the syslogd(8) source code. This mapping is
|
||||
* included in this file.
|
||||
*
|
||||
* priorities (these are ordered)
|
||||
*/
|
||||
#define LOG_EMERG 0 /* system is unusable */
|
||||
#define LOG_ALERT 1 /* action must be taken immediately */
|
||||
#define LOG_CRIT 2 /* critical conditions */
|
||||
#define LOG_ERR 3 /* error conditions */
|
||||
#define LOG_WARNING 4 /* warning conditions */
|
||||
#define LOG_NOTICE 5 /* normal but significant condition */
|
||||
#define LOG_INFO 6 /* informational */
|
||||
#define LOG_DEBUG 7 /* debug-level messages */
|
||||
|
||||
#define LOG_PRIMASK 0x07 /* mask to extract priority part (internal) */
|
||||
/* extract priority */
|
||||
#define LOG_PRI(p) ((p) & LOG_PRIMASK)
|
||||
#define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
|
||||
|
||||
#ifdef SYSLOG_NAMES
|
||||
#define INTERNAL_NOPRI 0x10 /* the "no priority" priority */
|
||||
/* mark "facility" */
|
||||
#define INTERNAL_MARK LOG_MAKEPRI(LOG_NFACILITIES, 0)
|
||||
typedef struct _code {
|
||||
char *c_name;
|
||||
int c_val;
|
||||
} CODE;
|
||||
|
||||
CODE prioritynames[] = {
|
||||
{ "alert", LOG_ALERT },
|
||||
{ "crit", LOG_CRIT },
|
||||
{ "debug", LOG_DEBUG },
|
||||
{ "emerg", LOG_EMERG },
|
||||
{ "err", LOG_ERR },
|
||||
{ "error", LOG_ERR }, /* DEPRECATED */
|
||||
{ "info", LOG_INFO },
|
||||
{ "none", INTERNAL_NOPRI }, /* INTERNAL */
|
||||
{ "notice", LOG_NOTICE },
|
||||
{ "panic", LOG_EMERG }, /* DEPRECATED */
|
||||
{ "warn", LOG_WARNING }, /* DEPRECATED */
|
||||
{ "warning", LOG_WARNING },
|
||||
{ NULL, -1 }
|
||||
};
|
||||
#endif
|
||||
|
||||
/* facility codes */
|
||||
#define LOG_KERN (0<<3) /* kernel messages */
|
||||
#define LOG_USER (1<<3) /* random user-level messages */
|
||||
#define LOG_MAIL (2<<3) /* mail system */
|
||||
#define LOG_DAEMON (3<<3) /* system daemons */
|
||||
#define LOG_AUTH (4<<3) /* security/authorization messages */
|
||||
#define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */
|
||||
#define LOG_LPR (6<<3) /* line printer subsystem */
|
||||
#define LOG_NEWS (7<<3) /* network news subsystem */
|
||||
#define LOG_UUCP (8<<3) /* UUCP subsystem */
|
||||
#define LOG_CRON (9<<3) /* clock daemon */
|
||||
#define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */
|
||||
#define LOG_FTP (11<<3) /* ftp daemon */
|
||||
|
||||
/* other codes through 15 reserved for system use */
|
||||
#define LOG_LOCAL0 (16<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL1 (17<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL2 (18<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL3 (19<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL4 (20<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL5 (21<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL6 (22<<3) /* reserved for local use */
|
||||
#define LOG_LOCAL7 (23<<3) /* reserved for local use */
|
||||
|
||||
#define LOG_NFACILITIES 24 /* current number of facilities */
|
||||
#define LOG_FACMASK 0x03f8 /* mask to extract facility part */
|
||||
/* facility of pri */
|
||||
#define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3)
|
||||
|
||||
#ifdef SYSLOG_NAMES
|
||||
CODE facilitynames[] = {
|
||||
{ "auth", LOG_AUTH },
|
||||
{ "authpriv", LOG_AUTHPRIV },
|
||||
{ "cron", LOG_CRON },
|
||||
{ "daemon", LOG_DAEMON },
|
||||
{ "ftp", LOG_FTP },
|
||||
{ "kern", LOG_KERN },
|
||||
{ "lpr", LOG_LPR },
|
||||
{ "mail", LOG_MAIL },
|
||||
{ "mark", INTERNAL_MARK }, /* INTERNAL */
|
||||
{ "news", LOG_NEWS },
|
||||
{ "security", LOG_AUTH }, /* DEPRECATED */
|
||||
{ "syslog", LOG_SYSLOG },
|
||||
{ "user", LOG_USER },
|
||||
{ "uucp", LOG_UUCP },
|
||||
{ "local0", LOG_LOCAL0 },
|
||||
{ "local1", LOG_LOCAL1 },
|
||||
{ "local2", LOG_LOCAL2 },
|
||||
{ "local3", LOG_LOCAL3 },
|
||||
{ "local4", LOG_LOCAL4 },
|
||||
{ "local5", LOG_LOCAL5 },
|
||||
{ "local6", LOG_LOCAL6 },
|
||||
{ "local7", LOG_LOCAL7 },
|
||||
{ NULL, -1 }
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
#define LOG_PRINTF -1 /* pseudo-priority to indicate use of printf */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* arguments to setlogmask.
|
||||
*/
|
||||
#define LOG_MASK(pri) (1 << (pri)) /* mask for one priority */
|
||||
#define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) /* all priorities through pri */
|
||||
|
||||
/*
|
||||
* Option flags for openlog.
|
||||
*
|
||||
* LOG_ODELAY no longer does anything.
|
||||
* LOG_NDELAY is the inverse of what it used to be.
|
||||
*/
|
||||
#define LOG_PID 0x01 /* log the pid with each message */
|
||||
#define LOG_CONS 0x02 /* log on the console if errors in sending */
|
||||
#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
|
||||
#define LOG_NDELAY 0x08 /* don't delay open */
|
||||
#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
|
||||
#define LOG_PERROR 0x20 /* log to stderr as well */
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
/* Used by reentrant functions */
|
||||
|
||||
struct syslog_data {
|
||||
int log_file;
|
||||
int connected;
|
||||
int opened;
|
||||
int log_stat;
|
||||
const char *log_tag;
|
||||
int log_fac;
|
||||
int log_mask;
|
||||
};
|
||||
|
||||
#define SYSLOG_DATA_INIT { \
|
||||
.log_file = -1, \
|
||||
.log_fac = LOG_USER, \
|
||||
.log_mask = 0xff, \
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't use va_list in the vsyslog() prototype. Va_list is typedef'd in two
|
||||
* places (<machine/varargs.h> and <machine/stdarg.h>), so if we include one
|
||||
* of them here we may collide with the utility's includes. It's unreasonable
|
||||
* for utilities to have to include one of them to include syslog.h, so we get
|
||||
* _BSD_VA_LIST_ from <machine/ansi.h> and use it.
|
||||
*/
|
||||
#include <machine/ansi.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
void closelog(void);
|
||||
void openlog(const char *, int, int);
|
||||
int setlogmask(int);
|
||||
void syslog(int, const char *, ...)
|
||||
__attribute__((__format__(__printf__,2,3)));
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
void vsyslog(int, const char *, _BSD_VA_LIST_)
|
||||
__attribute__((__format__(__printf__,2,0)));
|
||||
void closelog_r(struct syslog_data *);
|
||||
void openlog_r(const char *, int, int, struct syslog_data *);
|
||||
int setlogmask_r(int, struct syslog_data *);
|
||||
void syslog_r(int, struct syslog_data *, const char *, ...)
|
||||
__attribute__((__format__(__printf__,3,4)));
|
||||
void vsyslog_r(int, struct syslog_data *, const char *, _BSD_VA_LIST_)
|
||||
__attribute__((__format__(__printf__,3,0)));
|
||||
void syslogp(int, const char *, const char *, const char *, ...)
|
||||
__attribute__((__format__(__printf__,4,5)));
|
||||
void vsyslogp(int, const char *, const char *, const char *, _BSD_VA_LIST_)
|
||||
__attribute__((__format__(__printf__,4,0)));
|
||||
void syslogp_r(int, struct syslog_data *, const char *, const char *,
|
||||
const char *, ...)
|
||||
__attribute__((__format__(__printf__,5,6)));
|
||||
void vsyslogp_r(int, struct syslog_data *, const char *, const char *,
|
||||
const char *, _BSD_VA_LIST_)
|
||||
__attribute__((__format__(__printf__,5,0)));
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#else /* !_KERNEL */
|
||||
|
||||
void logpri(int);
|
||||
void log(int, const char *, ...)
|
||||
__attribute__((__format__(__printf__,2,3)));
|
||||
void vlog(int, const char *, _BSD_VA_LIST_)
|
||||
__attribute__((__format__(__printf__,2,0)));
|
||||
void addlog(const char *, ...)
|
||||
__attribute__((__format__(__printf__,1,2)));
|
||||
void logwakeup(void);
|
||||
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* !_SYS_SYSLOG_H_ */
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef _SYS_TERMIOS_H_
|
||||
#define _SYS_TERMIOS_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#include <minix/termios.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
void cfmakeraw(struct termios *);
|
||||
int cfsetspeed(struct termios *, speed_t);
|
||||
#endif /* defined(_NETBSD_SOURCE) */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_TERMIOS_H_ */
|
||||
|
||||
#include <sys/ttydefaults.h>
|
||||
+251
-33
@@ -1,48 +1,266 @@
|
||||
#ifndef _SYS_TIME_H_
|
||||
#define _SYS_TIME_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/*
|
||||
sys/time.h
|
||||
*/
|
||||
|
||||
#ifndef _SYS__TIME_H
|
||||
#define _SYS__TIME_H
|
||||
|
||||
#include <minix/ansi.h>
|
||||
|
||||
/* Open Group Base Specifications Issue 6 (not complete) */
|
||||
struct timeval
|
||||
{
|
||||
long /*time_t*/ tv_sec;
|
||||
long /*useconds_t*/ tv_usec;
|
||||
* Structure returned by gettimeofday(2) system call,
|
||||
* and used in other calls.
|
||||
*/
|
||||
struct timeval {
|
||||
time_t tv_sec; /* seconds */
|
||||
suseconds_t tv_usec; /* and microseconds */
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure defined by POSIX.1b to be like a timeval.
|
||||
*/
|
||||
struct timespec {
|
||||
time_t tv_sec; /* seconds */
|
||||
long tv_nsec; /* and nanoseconds */
|
||||
};
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define TIMEVAL_TO_TIMESPEC(tv, ts) do { \
|
||||
(ts)->tv_sec = (tv)->tv_sec; \
|
||||
(ts)->tv_nsec = (tv)->tv_usec * 1000; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
#define TIMESPEC_TO_TIMEVAL(tv, ts) do { \
|
||||
(tv)->tv_sec = (ts)->tv_sec; \
|
||||
(tv)->tv_usec = (suseconds_t)(ts)->tv_nsec / 1000; \
|
||||
} while (/*CONSTCOND*/0)
|
||||
|
||||
/*
|
||||
* Note: timezone is obsolete. All timezone handling is now in
|
||||
* userland. Its just here for back compatibility.
|
||||
*/
|
||||
struct timezone {
|
||||
int tz_minuteswest; /* minutes west of Greenwich */
|
||||
int tz_dsttime; /* type of dst correction */
|
||||
int tz_minuteswest; /* minutes west of Greenwich */
|
||||
int tz_dsttime; /* type of dst correction */
|
||||
};
|
||||
|
||||
/* Operations on timevals. */
|
||||
#define timerclear(tp) (tp)->tv_sec = (tp)->tv_usec = 0L
|
||||
#define timerisset(tp) ((tp)->tv_sec || (tp)->tv_usec)
|
||||
#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0L
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp, uvp, cmp) \
|
||||
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
|
||||
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec))
|
||||
#define timeradd(tvp, uvp, vvp) \
|
||||
do { \
|
||||
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
|
||||
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
|
||||
if ((vvp)->tv_usec >= 1000000) { \
|
||||
(vvp)->tv_sec++; \
|
||||
(vvp)->tv_usec -= 1000000; \
|
||||
} \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
#define timersub(tvp, uvp, vvp) \
|
||||
do { \
|
||||
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
|
||||
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
|
||||
if ((vvp)->tv_usec < 0) { \
|
||||
(vvp)->tv_sec--; \
|
||||
(vvp)->tv_usec += 1000000; \
|
||||
} \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
|
||||
int gettimeofday(struct timeval *_RESTRICT tp, void *_RESTRICT tzp);
|
||||
|
||||
/* Compatibility with other Unix systems */
|
||||
int settimeofday(const struct timeval *tp, const void *tzp);
|
||||
|
||||
/* setitimer/getitimer interface */
|
||||
struct itimerval
|
||||
{
|
||||
struct timeval it_interval;
|
||||
struct timeval it_value;
|
||||
/*
|
||||
* hide bintime for _STANDALONE because this header is used for hpcboot.exe,
|
||||
* which is built with compilers which don't recognize LL suffix.
|
||||
* http://mail-index.NetBSD.org/tech-userlevel/2008/02/27/msg000181.html
|
||||
*/
|
||||
#if !defined(_STANDALONE)
|
||||
struct bintime {
|
||||
time_t sec;
|
||||
uint64_t frac;
|
||||
};
|
||||
|
||||
#define ITIMER_REAL 0
|
||||
#define ITIMER_VIRTUAL 1 /* Not implemented */
|
||||
#define ITIMER_PROF 2 /* Not implemented */
|
||||
static __inline void
|
||||
bintime_addx(struct bintime *bt, uint64_t x)
|
||||
{
|
||||
uint64_t u;
|
||||
|
||||
int getitimer(int which, struct itimerval *value);
|
||||
int setitimer(int which, const struct itimerval *_RESTRICT value,
|
||||
struct itimerval *_RESTRICT ovalue);
|
||||
u = bt->frac;
|
||||
bt->frac += x;
|
||||
if (u > bt->frac)
|
||||
bt->sec++;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_add(struct bintime *bt, const struct bintime *bt2)
|
||||
{
|
||||
uint64_t u;
|
||||
|
||||
u = bt->frac;
|
||||
bt->frac += bt2->frac;
|
||||
if (u > bt->frac)
|
||||
bt->sec++;
|
||||
bt->sec += bt2->sec;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime_sub(struct bintime *bt, const struct bintime *bt2)
|
||||
{
|
||||
uint64_t u;
|
||||
|
||||
u = bt->frac;
|
||||
bt->frac -= bt2->frac;
|
||||
if (u < bt->frac)
|
||||
bt->sec--;
|
||||
bt->sec -= bt2->sec;
|
||||
}
|
||||
|
||||
/*-
|
||||
* Background information:
|
||||
*
|
||||
* When converting between timestamps on parallel timescales of differing
|
||||
* resolutions it is historical and scientific practice to round down rather
|
||||
* than doing 4/5 rounding.
|
||||
*
|
||||
* The date changes at midnight, not at noon.
|
||||
*
|
||||
* Even at 15:59:59.999999999 it's not four'o'clock.
|
||||
*
|
||||
* time_second ticks after N.999999999 not after N.4999999999
|
||||
*/
|
||||
|
||||
static __inline void
|
||||
bintime2timespec(const struct bintime *bt, struct timespec *ts)
|
||||
{
|
||||
|
||||
ts->tv_sec = bt->sec;
|
||||
ts->tv_nsec =
|
||||
(long)(((uint64_t)1000000000 * (uint32_t)(bt->frac >> 32)) >> 32);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
timespec2bintime(const struct timespec *ts, struct bintime *bt)
|
||||
{
|
||||
|
||||
bt->sec = ts->tv_sec;
|
||||
/* 18446744073 = int(2^64 / 1000000000) */
|
||||
bt->frac = ts->tv_nsec * (uint64_t)18446744073LL;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
bintime2timeval(const struct bintime *bt, struct timeval *tv)
|
||||
{
|
||||
|
||||
tv->tv_sec = bt->sec;
|
||||
tv->tv_usec =
|
||||
(suseconds_t)(((uint64_t)1000000 * (uint32_t)(bt->frac >> 32)) >> 32);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
timeval2bintime(const struct timeval *tv, struct bintime *bt)
|
||||
{
|
||||
|
||||
bt->sec = tv->tv_sec;
|
||||
/* 18446744073709 = int(2^64 / 1000000) */
|
||||
bt->frac = tv->tv_usec * (uint64_t)18446744073709LL;
|
||||
}
|
||||
#endif /* !defined(_STANDALONE) */
|
||||
|
||||
/* Operations on timespecs. */
|
||||
#define timespecclear(tsp) (tsp)->tv_sec = (time_t)((tsp)->tv_nsec = 0L)
|
||||
#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec)
|
||||
#define timespeccmp(tsp, usp, cmp) \
|
||||
(((tsp)->tv_sec == (usp)->tv_sec) ? \
|
||||
((tsp)->tv_nsec cmp (usp)->tv_nsec) : \
|
||||
((tsp)->tv_sec cmp (usp)->tv_sec))
|
||||
#define timespecadd(tsp, usp, vsp) \
|
||||
do { \
|
||||
(vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \
|
||||
(vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \
|
||||
if ((vsp)->tv_nsec >= 1000000000L) { \
|
||||
(vsp)->tv_sec++; \
|
||||
(vsp)->tv_nsec -= 1000000000L; \
|
||||
} \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
#define timespecsub(tsp, usp, vsp) \
|
||||
do { \
|
||||
(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
|
||||
(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
|
||||
if ((vsp)->tv_nsec < 0) { \
|
||||
(vsp)->tv_sec--; \
|
||||
(vsp)->tv_nsec += 1000000000L; \
|
||||
} \
|
||||
} while (/* CONSTCOND */ 0)
|
||||
#define timespec2ns(x) (((uint64_t)(x)->tv_sec) * 1000000000L + (x)->tv_nsec)
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* Names of the interval timers, and structure
|
||||
* defining a timer setting.
|
||||
*/
|
||||
#define ITIMER_REAL 0
|
||||
#define ITIMER_VIRTUAL 1
|
||||
#define ITIMER_PROF 2
|
||||
|
||||
struct itimerval {
|
||||
struct timeval it_interval; /* timer interval */
|
||||
struct timeval it_value; /* current value */
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure defined by POSIX.1b to be like a itimerval, but with
|
||||
* timespecs. Used in the timer_*() system calls.
|
||||
*/
|
||||
struct itimerspec {
|
||||
struct timespec it_interval;
|
||||
struct timespec it_value;
|
||||
};
|
||||
|
||||
#ifndef __minix
|
||||
#define CLOCK_REALTIME 0
|
||||
#define CLOCK_VIRTUAL 1
|
||||
#define CLOCK_PROF 2
|
||||
#define CLOCK_MONOTONIC 3
|
||||
#endif
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define TIMER_RELTIME 0x0 /* relative timer */
|
||||
#endif
|
||||
#define TIMER_ABSTIME 0x1 /* absolute timer */
|
||||
|
||||
#ifdef _KERNEL
|
||||
#include <sys/timevar.h>
|
||||
#else /* !_KERNEL */
|
||||
#ifndef _STANDALONE
|
||||
#if (_POSIX_C_SOURCE - 0) >= 200112L || \
|
||||
(defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
|
||||
(_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#endif /* _SYS__TIME_H */
|
||||
#include <sys/cdefs.h>
|
||||
#include <time.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
#ifndef __LIBC12_SOURCE__
|
||||
#if (_POSIX_C_SOURCE - 0) >= 200112L || \
|
||||
defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
|
||||
int getitimer(int, struct itimerval *) __RENAME(__getitimer50);
|
||||
int gettimeofday(struct timeval * __restrict, void *__restrict);
|
||||
int setitimer(int, const struct itimerval * __restrict,
|
||||
struct itimerval * __restrict) __RENAME(__setitimer50);
|
||||
#endif /* _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE || _NETBSD_SOURCE */
|
||||
|
||||
#if defined(_NETBSD_SOURCE) || defined(HAVE_NBTOOL_CONFIG_H)
|
||||
#ifndef __minix
|
||||
int adjtime(const struct timeval *, struct timeval *) __RENAME(__adjtime50);
|
||||
int futimes(int, const struct timeval [2]) __RENAME(__futimes50);
|
||||
int lutimes(const char *, const struct timeval [2]) __RENAME(__lutimes50);
|
||||
#endif /* !__minix */
|
||||
int settimeofday(const struct timeval * __restrict,
|
||||
const void *__restrict) __RENAME(__settimeofday50);
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
#endif /* __LIBC12_SOURCE__ */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_STANDALONE */
|
||||
#endif /* !_KERNEL */
|
||||
#endif /* !_SYS_TIME_H_ */
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef _SYS__TIMEB_H
|
||||
#define _SYS__TIMEB_H
|
||||
|
||||
#include <time.h>
|
||||
|
||||
struct timeb
|
||||
{
|
||||
time_t time; /* Seconds since epoch, as from `time'. */
|
||||
unsigned short int millitm; /* Additional milliseconds. */
|
||||
short int timezone; /* Minutes west of GMT. */
|
||||
short int dstflag; /* Nonzero if Daylight Savings Time used. */
|
||||
};
|
||||
|
||||
/* Fill in TIMEBUF with information about the current time. */
|
||||
|
||||
_PROTOTYPE( int ftime, (struct timeb *__timebuf));
|
||||
|
||||
#endif /* _SYS__TIMEB_H */
|
||||
+15
-16
@@ -1,25 +1,24 @@
|
||||
/* The <times.h> header is for time times() system call. */
|
||||
#ifndef _SYS_TIMES_H_
|
||||
#define _SYS_TIMES_H_
|
||||
|
||||
#ifndef _TIMES_H
|
||||
#define _TIMES_H
|
||||
#include <machine/ansi.h>
|
||||
|
||||
#ifndef _CLOCK_T
|
||||
#define _CLOCK_T
|
||||
typedef long clock_t; /* unit for system accounting */
|
||||
#ifdef _BSD_CLOCK_T_
|
||||
typedef _BSD_CLOCK_T_ clock_t;
|
||||
#undef _BSD_CLOCK_T_
|
||||
#endif
|
||||
|
||||
struct tms {
|
||||
clock_t tms_utime;
|
||||
clock_t tms_stime;
|
||||
clock_t tms_cutime;
|
||||
clock_t tms_cstime;
|
||||
clock_t tms_utime; /* User CPU time */
|
||||
clock_t tms_stime; /* System CPU time */
|
||||
clock_t tms_cutime; /* User CPU time of terminated child procs */
|
||||
clock_t tms_cstime; /* System CPU time of terminated child procs */
|
||||
};
|
||||
|
||||
/* Function Prototypes. */
|
||||
#ifndef _MINIX_ANSI_H
|
||||
#include <minix/ansi.h>
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
_PROTOTYPE( clock_t times, (struct tms *_buffer) );
|
||||
__BEGIN_DECLS
|
||||
clock_t times(struct tms *);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _TIMES_H */
|
||||
#endif /* !_SYS_TIMES_H_ */
|
||||
|
||||
@@ -0,0 +1,741 @@
|
||||
/* $NetBSD: tree.h,v 1.16 2008/03/21 13:07:15 ad Exp $ */
|
||||
/* $OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $ */
|
||||
/*
|
||||
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TREE_H_
|
||||
#define _SYS_TREE_H_
|
||||
|
||||
/*
|
||||
* This file defines data structures for different types of trees:
|
||||
* splay trees and red-black trees.
|
||||
*
|
||||
* A splay tree is a self-organizing data structure. Every operation
|
||||
* on the tree causes a splay to happen. The splay moves the requested
|
||||
* node to the root of the tree and partly rebalances it.
|
||||
*
|
||||
* This has the benefit that request locality causes faster lookups as
|
||||
* the requested nodes move to the top of the tree. On the other hand,
|
||||
* every lookup causes memory writes.
|
||||
*
|
||||
* The Balance Theorem bounds the total access time for m operations
|
||||
* and n inserts on an initially empty tree as O((m + n)lg n). The
|
||||
* amortized cost for a sequence of m accesses to a splay tree is O(lg n);
|
||||
*
|
||||
* A red-black tree is a binary search tree with the node color as an
|
||||
* extra attribute. It fulfills a set of conditions:
|
||||
* - every search path from the root to a leaf consists of the
|
||||
* same number of black nodes,
|
||||
* - each red node (except for the root) has a black parent,
|
||||
* - each leaf node is black.
|
||||
*
|
||||
* Every operation on a red-black tree is bounded as O(lg n).
|
||||
* The maximum height of a red-black tree is 2lg (n+1).
|
||||
*/
|
||||
|
||||
#define SPLAY_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *sph_root; /* root of the tree */ \
|
||||
}
|
||||
|
||||
#define SPLAY_INITIALIZER(root) \
|
||||
{ NULL }
|
||||
|
||||
#define SPLAY_INIT(root) do { \
|
||||
(root)->sph_root = NULL; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *spe_left; /* left element */ \
|
||||
struct type *spe_right; /* right element */ \
|
||||
}
|
||||
|
||||
#define SPLAY_LEFT(elm, field) (elm)->field.spe_left
|
||||
#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right
|
||||
#define SPLAY_ROOT(head) (head)->sph_root
|
||||
#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL)
|
||||
|
||||
/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */
|
||||
#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \
|
||||
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \
|
||||
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
|
||||
(head)->sph_root = tmp; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \
|
||||
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
|
||||
(head)->sph_root = tmp; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_LINKLEFT(head, tmp, field) do { \
|
||||
SPLAY_LEFT(tmp, field) = (head)->sph_root; \
|
||||
tmp = (head)->sph_root; \
|
||||
(head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_LINKRIGHT(head, tmp, field) do { \
|
||||
SPLAY_RIGHT(tmp, field) = (head)->sph_root; \
|
||||
tmp = (head)->sph_root; \
|
||||
(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \
|
||||
SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \
|
||||
SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/* Generates prototypes and inline functions */
|
||||
|
||||
#define SPLAY_PROTOTYPE(name, type, field, cmp) \
|
||||
void name##_SPLAY(struct name *, struct type *); \
|
||||
void name##_SPLAY_MINMAX(struct name *, int); \
|
||||
struct type *name##_SPLAY_INSERT(struct name *, struct type *); \
|
||||
struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \
|
||||
\
|
||||
/* Finds the node with the same key as elm */ \
|
||||
static __inline struct type * \
|
||||
name##_SPLAY_FIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
if (SPLAY_EMPTY(head)) \
|
||||
return(NULL); \
|
||||
name##_SPLAY(head, elm); \
|
||||
if ((cmp)(elm, (head)->sph_root) == 0) \
|
||||
return (head->sph_root); \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
static __inline struct type * \
|
||||
name##_SPLAY_NEXT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
name##_SPLAY(head, elm); \
|
||||
if (SPLAY_RIGHT(elm, field) != NULL) { \
|
||||
elm = SPLAY_RIGHT(elm, field); \
|
||||
while (SPLAY_LEFT(elm, field) != NULL) { \
|
||||
elm = SPLAY_LEFT(elm, field); \
|
||||
} \
|
||||
} else \
|
||||
elm = NULL; \
|
||||
return (elm); \
|
||||
} \
|
||||
\
|
||||
static __inline struct type * \
|
||||
name##_SPLAY_MIN_MAX(struct name *head, int val) \
|
||||
{ \
|
||||
name##_SPLAY_MINMAX(head, val); \
|
||||
return (SPLAY_ROOT(head)); \
|
||||
}
|
||||
|
||||
/* Main splay operation.
|
||||
* Moves node close to the key of elm to top
|
||||
*/
|
||||
#define SPLAY_GENERATE(name, type, field, cmp) \
|
||||
struct type * \
|
||||
name##_SPLAY_INSERT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
if (SPLAY_EMPTY(head)) { \
|
||||
SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \
|
||||
} else { \
|
||||
int __comp; \
|
||||
name##_SPLAY(head, elm); \
|
||||
__comp = (cmp)(elm, (head)->sph_root); \
|
||||
if(__comp < 0) { \
|
||||
SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field);\
|
||||
SPLAY_RIGHT(elm, field) = (head)->sph_root; \
|
||||
SPLAY_LEFT((head)->sph_root, field) = NULL; \
|
||||
} else if (__comp > 0) { \
|
||||
SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
SPLAY_LEFT(elm, field) = (head)->sph_root; \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = NULL; \
|
||||
} else \
|
||||
return ((head)->sph_root); \
|
||||
} \
|
||||
(head)->sph_root = (elm); \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
struct type * \
|
||||
name##_SPLAY_REMOVE(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *__tmp; \
|
||||
if (SPLAY_EMPTY(head)) \
|
||||
return (NULL); \
|
||||
name##_SPLAY(head, elm); \
|
||||
if ((cmp)(elm, (head)->sph_root) == 0) { \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \
|
||||
(head)->sph_root = SPLAY_RIGHT((head)->sph_root, field);\
|
||||
} else { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
(head)->sph_root = SPLAY_LEFT((head)->sph_root, field);\
|
||||
name##_SPLAY(head, elm); \
|
||||
SPLAY_RIGHT((head)->sph_root, field) = __tmp; \
|
||||
} \
|
||||
return (elm); \
|
||||
} \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
void \
|
||||
name##_SPLAY(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type __node, *__left, *__right, *__tmp; \
|
||||
int __comp; \
|
||||
\
|
||||
SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
|
||||
__left = __right = &__node; \
|
||||
\
|
||||
while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \
|
||||
if (__comp < 0) { \
|
||||
__tmp = SPLAY_LEFT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if ((cmp)(elm, __tmp) < 0){ \
|
||||
SPLAY_ROTATE_RIGHT(head, __tmp, field); \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKLEFT(head, __right, field); \
|
||||
} else if (__comp > 0) { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if ((cmp)(elm, __tmp) > 0){ \
|
||||
SPLAY_ROTATE_LEFT(head, __tmp, field); \
|
||||
if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKRIGHT(head, __left, field); \
|
||||
} \
|
||||
} \
|
||||
SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
|
||||
} \
|
||||
\
|
||||
/* Splay with either the minimum or the maximum element \
|
||||
* Used to find minimum or maximum element in tree. \
|
||||
*/ \
|
||||
void name##_SPLAY_MINMAX(struct name *head, int __comp) \
|
||||
{ \
|
||||
struct type __node, *__left, *__right, *__tmp; \
|
||||
\
|
||||
SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL;\
|
||||
__left = __right = &__node; \
|
||||
\
|
||||
while (1) { \
|
||||
if (__comp < 0) { \
|
||||
__tmp = SPLAY_LEFT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if (__comp < 0){ \
|
||||
SPLAY_ROTATE_RIGHT(head, __tmp, field); \
|
||||
if (SPLAY_LEFT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKLEFT(head, __right, field); \
|
||||
} else if (__comp > 0) { \
|
||||
__tmp = SPLAY_RIGHT((head)->sph_root, field); \
|
||||
if (__tmp == NULL) \
|
||||
break; \
|
||||
if (__comp > 0) { \
|
||||
SPLAY_ROTATE_LEFT(head, __tmp, field); \
|
||||
if (SPLAY_RIGHT((head)->sph_root, field) == NULL)\
|
||||
break; \
|
||||
} \
|
||||
SPLAY_LINKRIGHT(head, __left, field); \
|
||||
} \
|
||||
} \
|
||||
SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \
|
||||
}
|
||||
|
||||
#define SPLAY_NEGINF -1
|
||||
#define SPLAY_INF 1
|
||||
|
||||
#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y)
|
||||
#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y)
|
||||
#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y)
|
||||
#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y)
|
||||
#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \
|
||||
: name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF))
|
||||
#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \
|
||||
: name##_SPLAY_MIN_MAX(x, SPLAY_INF))
|
||||
|
||||
#define SPLAY_FOREACH(x, name, head) \
|
||||
for ((x) = SPLAY_MIN(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = SPLAY_NEXT(name, head, x))
|
||||
|
||||
/* Macros that define a red-black tree */
|
||||
#define RB_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *rbh_root; /* root of the tree */ \
|
||||
}
|
||||
|
||||
#define RB_INITIALIZER(root) \
|
||||
{ NULL }
|
||||
|
||||
#define RB_INIT(root) do { \
|
||||
(root)->rbh_root = NULL; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_BLACK 0
|
||||
#define RB_RED 1
|
||||
#define RB_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *rbe_left; /* left element */ \
|
||||
struct type *rbe_right; /* right element */ \
|
||||
struct type *rbe_parent; /* parent element */ \
|
||||
int rbe_color; /* node color */ \
|
||||
}
|
||||
|
||||
#define RB_LEFT(elm, field) (elm)->field.rbe_left
|
||||
#define RB_RIGHT(elm, field) (elm)->field.rbe_right
|
||||
#define RB_PARENT(elm, field) (elm)->field.rbe_parent
|
||||
#define RB_COLOR(elm, field) (elm)->field.rbe_color
|
||||
#define RB_ROOT(head) (head)->rbh_root
|
||||
#define RB_EMPTY(head) (RB_ROOT(head) == NULL)
|
||||
|
||||
#define RB_SET(elm, parent, field) do { \
|
||||
RB_PARENT(elm, field) = parent; \
|
||||
RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \
|
||||
RB_COLOR(elm, field) = RB_RED; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_SET_BLACKRED(black, red, field) do { \
|
||||
RB_COLOR(black, field) = RB_BLACK; \
|
||||
RB_COLOR(red, field) = RB_RED; \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#ifndef RB_AUGMENT
|
||||
#define RB_AUGMENT(x) (void)(x)
|
||||
#endif
|
||||
|
||||
#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_RIGHT(elm, field); \
|
||||
if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \
|
||||
RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \
|
||||
} \
|
||||
RB_AUGMENT(elm); \
|
||||
if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \
|
||||
if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
|
||||
RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
|
||||
else \
|
||||
RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
|
||||
} else \
|
||||
(head)->rbh_root = (tmp); \
|
||||
RB_LEFT(tmp, field) = (elm); \
|
||||
RB_PARENT(elm, field) = (tmp); \
|
||||
RB_AUGMENT(tmp); \
|
||||
if ((RB_PARENT(tmp, field))) \
|
||||
RB_AUGMENT(RB_PARENT(tmp, field)); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \
|
||||
(tmp) = RB_LEFT(elm, field); \
|
||||
if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \
|
||||
RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \
|
||||
} \
|
||||
RB_AUGMENT(elm); \
|
||||
if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \
|
||||
if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \
|
||||
RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \
|
||||
else \
|
||||
RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \
|
||||
} else \
|
||||
(head)->rbh_root = (tmp); \
|
||||
RB_RIGHT(tmp, field) = (elm); \
|
||||
RB_PARENT(elm, field) = (tmp); \
|
||||
RB_AUGMENT(tmp); \
|
||||
if ((RB_PARENT(tmp, field))) \
|
||||
RB_AUGMENT(RB_PARENT(tmp, field)); \
|
||||
} while (/*CONSTCOND*/ 0)
|
||||
|
||||
/* Generates prototypes and inline functions */
|
||||
#define RB_PROTOTYPE(name, type, field, cmp) \
|
||||
RB_PROTOTYPE_INTERNAL(name, type, field, cmp,)
|
||||
#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \
|
||||
RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __unused static)
|
||||
#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \
|
||||
attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \
|
||||
attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\
|
||||
attr struct type *name##_RB_REMOVE(struct name *, struct type *); \
|
||||
attr struct type *name##_RB_INSERT(struct name *, struct type *); \
|
||||
attr struct type *name##_RB_FIND(struct name *, struct type *); \
|
||||
attr struct type *name##_RB_NFIND(struct name *, struct type *); \
|
||||
attr struct type *name##_RB_NEXT(struct type *); \
|
||||
attr struct type *name##_RB_PREV(struct type *); \
|
||||
attr struct type *name##_RB_MINMAX(struct name *, int); \
|
||||
\
|
||||
|
||||
/* Main rb operation.
|
||||
* Moves node close to the key of elm to top
|
||||
*/
|
||||
#define RB_GENERATE(name, type, field, cmp) \
|
||||
RB_GENERATE_INTERNAL(name, type, field, cmp,)
|
||||
#define RB_GENERATE_STATIC(name, type, field, cmp) \
|
||||
RB_GENERATE_INTERNAL(name, type, field, cmp, __unused static)
|
||||
#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \
|
||||
attr void \
|
||||
name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *parent, *gparent, *tmp; \
|
||||
while ((parent = RB_PARENT(elm, field)) != NULL && \
|
||||
RB_COLOR(parent, field) == RB_RED) { \
|
||||
gparent = RB_PARENT(parent, field); \
|
||||
if (parent == RB_LEFT(gparent, field)) { \
|
||||
tmp = RB_RIGHT(gparent, field); \
|
||||
if (tmp && RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_COLOR(tmp, field) = RB_BLACK; \
|
||||
RB_SET_BLACKRED(parent, gparent, field);\
|
||||
elm = gparent; \
|
||||
continue; \
|
||||
} \
|
||||
if (RB_RIGHT(parent, field) == elm) { \
|
||||
RB_ROTATE_LEFT(head, parent, tmp, field);\
|
||||
tmp = parent; \
|
||||
parent = elm; \
|
||||
elm = tmp; \
|
||||
} \
|
||||
RB_SET_BLACKRED(parent, gparent, field); \
|
||||
RB_ROTATE_RIGHT(head, gparent, tmp, field); \
|
||||
} else { \
|
||||
tmp = RB_LEFT(gparent, field); \
|
||||
if (tmp && RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_COLOR(tmp, field) = RB_BLACK; \
|
||||
RB_SET_BLACKRED(parent, gparent, field);\
|
||||
elm = gparent; \
|
||||
continue; \
|
||||
} \
|
||||
if (RB_LEFT(parent, field) == elm) { \
|
||||
RB_ROTATE_RIGHT(head, parent, tmp, field);\
|
||||
tmp = parent; \
|
||||
parent = elm; \
|
||||
elm = tmp; \
|
||||
} \
|
||||
RB_SET_BLACKRED(parent, gparent, field); \
|
||||
RB_ROTATE_LEFT(head, gparent, tmp, field); \
|
||||
} \
|
||||
} \
|
||||
RB_COLOR(head->rbh_root, field) = RB_BLACK; \
|
||||
} \
|
||||
\
|
||||
attr void \
|
||||
name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp; \
|
||||
while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \
|
||||
elm != RB_ROOT(head)) { \
|
||||
if (RB_LEFT(parent, field) == elm) { \
|
||||
tmp = RB_RIGHT(parent, field); \
|
||||
if (RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_SET_BLACKRED(tmp, parent, field); \
|
||||
RB_ROTATE_LEFT(head, parent, tmp, field);\
|
||||
tmp = RB_RIGHT(parent, field); \
|
||||
} \
|
||||
if ((RB_LEFT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
|
||||
(RB_RIGHT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
elm = parent; \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
} else { \
|
||||
if (RB_RIGHT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) {\
|
||||
struct type *oleft; \
|
||||
if ((oleft = RB_LEFT(tmp, field)) \
|
||||
!= NULL) \
|
||||
RB_COLOR(oleft, field) = RB_BLACK;\
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
RB_ROTATE_RIGHT(head, tmp, oleft, field);\
|
||||
tmp = RB_RIGHT(parent, field); \
|
||||
} \
|
||||
RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
|
||||
RB_COLOR(parent, field) = RB_BLACK; \
|
||||
if (RB_RIGHT(tmp, field)) \
|
||||
RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK;\
|
||||
RB_ROTATE_LEFT(head, parent, tmp, field);\
|
||||
elm = RB_ROOT(head); \
|
||||
break; \
|
||||
} \
|
||||
} else { \
|
||||
tmp = RB_LEFT(parent, field); \
|
||||
if (RB_COLOR(tmp, field) == RB_RED) { \
|
||||
RB_SET_BLACKRED(tmp, parent, field); \
|
||||
RB_ROTATE_RIGHT(head, parent, tmp, field);\
|
||||
tmp = RB_LEFT(parent, field); \
|
||||
} \
|
||||
if ((RB_LEFT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) &&\
|
||||
(RB_RIGHT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) {\
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
elm = parent; \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
} else { \
|
||||
if (RB_LEFT(tmp, field) == NULL || \
|
||||
RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) {\
|
||||
struct type *oright; \
|
||||
if ((oright = RB_RIGHT(tmp, field)) \
|
||||
!= NULL) \
|
||||
RB_COLOR(oright, field) = RB_BLACK;\
|
||||
RB_COLOR(tmp, field) = RB_RED; \
|
||||
RB_ROTATE_LEFT(head, tmp, oright, field);\
|
||||
tmp = RB_LEFT(parent, field); \
|
||||
} \
|
||||
RB_COLOR(tmp, field) = RB_COLOR(parent, field);\
|
||||
RB_COLOR(parent, field) = RB_BLACK; \
|
||||
if (RB_LEFT(tmp, field)) \
|
||||
RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK;\
|
||||
RB_ROTATE_RIGHT(head, parent, tmp, field);\
|
||||
elm = RB_ROOT(head); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
if (elm) \
|
||||
RB_COLOR(elm, field) = RB_BLACK; \
|
||||
} \
|
||||
\
|
||||
attr struct type * \
|
||||
name##_RB_REMOVE(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *child, *parent, *old = elm; \
|
||||
int color; \
|
||||
if (RB_LEFT(elm, field) == NULL) \
|
||||
child = RB_RIGHT(elm, field); \
|
||||
else if (RB_RIGHT(elm, field) == NULL) \
|
||||
child = RB_LEFT(elm, field); \
|
||||
else { \
|
||||
struct type *left; \
|
||||
elm = RB_RIGHT(elm, field); \
|
||||
while ((left = RB_LEFT(elm, field)) != NULL) \
|
||||
elm = left; \
|
||||
child = RB_RIGHT(elm, field); \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
color = RB_COLOR(elm, field); \
|
||||
if (child) \
|
||||
RB_PARENT(child, field) = parent; \
|
||||
if (parent) { \
|
||||
if (RB_LEFT(parent, field) == elm) \
|
||||
RB_LEFT(parent, field) = child; \
|
||||
else \
|
||||
RB_RIGHT(parent, field) = child; \
|
||||
RB_AUGMENT(parent); \
|
||||
} else \
|
||||
RB_ROOT(head) = child; \
|
||||
if (RB_PARENT(elm, field) == old) \
|
||||
parent = elm; \
|
||||
(elm)->field = (old)->field; \
|
||||
if (RB_PARENT(old, field)) { \
|
||||
if (RB_LEFT(RB_PARENT(old, field), field) == old)\
|
||||
RB_LEFT(RB_PARENT(old, field), field) = elm;\
|
||||
else \
|
||||
RB_RIGHT(RB_PARENT(old, field), field) = elm;\
|
||||
RB_AUGMENT(RB_PARENT(old, field)); \
|
||||
} else \
|
||||
RB_ROOT(head) = elm; \
|
||||
RB_PARENT(RB_LEFT(old, field), field) = elm; \
|
||||
if (RB_RIGHT(old, field)) \
|
||||
RB_PARENT(RB_RIGHT(old, field), field) = elm; \
|
||||
if (parent) { \
|
||||
left = parent; \
|
||||
do { \
|
||||
RB_AUGMENT(left); \
|
||||
} while ((left = RB_PARENT(left, field)) != NULL); \
|
||||
} \
|
||||
goto color; \
|
||||
} \
|
||||
parent = RB_PARENT(elm, field); \
|
||||
color = RB_COLOR(elm, field); \
|
||||
if (child) \
|
||||
RB_PARENT(child, field) = parent; \
|
||||
if (parent) { \
|
||||
if (RB_LEFT(parent, field) == elm) \
|
||||
RB_LEFT(parent, field) = child; \
|
||||
else \
|
||||
RB_RIGHT(parent, field) = child; \
|
||||
RB_AUGMENT(parent); \
|
||||
} else \
|
||||
RB_ROOT(head) = child; \
|
||||
color: \
|
||||
if (color == RB_BLACK) \
|
||||
name##_RB_REMOVE_COLOR(head, parent, child); \
|
||||
return (old); \
|
||||
} \
|
||||
\
|
||||
/* Inserts a node into the RB tree */ \
|
||||
attr struct type * \
|
||||
name##_RB_INSERT(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp; \
|
||||
struct type *parent = NULL; \
|
||||
int comp = 0; \
|
||||
tmp = RB_ROOT(head); \
|
||||
while (tmp) { \
|
||||
parent = tmp; \
|
||||
comp = (cmp)(elm, parent); \
|
||||
if (comp < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
RB_SET(elm, parent, field); \
|
||||
if (parent != NULL) { \
|
||||
if (comp < 0) \
|
||||
RB_LEFT(parent, field) = elm; \
|
||||
else \
|
||||
RB_RIGHT(parent, field) = elm; \
|
||||
RB_AUGMENT(parent); \
|
||||
} else \
|
||||
RB_ROOT(head) = elm; \
|
||||
name##_RB_INSERT_COLOR(head, elm); \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
/* Finds the node with the same key as elm */ \
|
||||
attr struct type * \
|
||||
name##_RB_FIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
int comp; \
|
||||
while (tmp) { \
|
||||
comp = cmp(elm, tmp); \
|
||||
if (comp < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
return (NULL); \
|
||||
} \
|
||||
\
|
||||
/* Finds the first node greater than or equal to the search key */ \
|
||||
attr struct type * \
|
||||
name##_RB_NFIND(struct name *head, struct type *elm) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
struct type *res = NULL; \
|
||||
int comp; \
|
||||
while (tmp) { \
|
||||
comp = cmp(elm, tmp); \
|
||||
if (comp < 0) { \
|
||||
res = tmp; \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
} \
|
||||
else if (comp > 0) \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
else \
|
||||
return (tmp); \
|
||||
} \
|
||||
return (res); \
|
||||
} \
|
||||
\
|
||||
/* ARGSUSED */ \
|
||||
attr struct type * \
|
||||
name##_RB_NEXT(struct type *elm) \
|
||||
{ \
|
||||
if (RB_RIGHT(elm, field)) { \
|
||||
elm = RB_RIGHT(elm, field); \
|
||||
while (RB_LEFT(elm, field)) \
|
||||
elm = RB_LEFT(elm, field); \
|
||||
} else { \
|
||||
if (RB_PARENT(elm, field) && \
|
||||
(elm == RB_LEFT(RB_PARENT(elm, field), field))) \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
else { \
|
||||
while (RB_PARENT(elm, field) && \
|
||||
(elm == RB_RIGHT(RB_PARENT(elm, field), field)))\
|
||||
elm = RB_PARENT(elm, field); \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
} \
|
||||
} \
|
||||
return (elm); \
|
||||
} \
|
||||
\
|
||||
/* ARGSUSED */ \
|
||||
attr struct type * \
|
||||
name##_RB_PREV(struct type *elm) \
|
||||
{ \
|
||||
if (RB_LEFT(elm, field)) { \
|
||||
elm = RB_LEFT(elm, field); \
|
||||
while (RB_RIGHT(elm, field)) \
|
||||
elm = RB_RIGHT(elm, field); \
|
||||
} else { \
|
||||
if (RB_PARENT(elm, field) && \
|
||||
(elm == RB_RIGHT(RB_PARENT(elm, field), field))) \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
else { \
|
||||
while (RB_PARENT(elm, field) && \
|
||||
(elm == RB_LEFT(RB_PARENT(elm, field), field)))\
|
||||
elm = RB_PARENT(elm, field); \
|
||||
elm = RB_PARENT(elm, field); \
|
||||
} \
|
||||
} \
|
||||
return (elm); \
|
||||
} \
|
||||
\
|
||||
attr struct type * \
|
||||
name##_RB_MINMAX(struct name *head, int val) \
|
||||
{ \
|
||||
struct type *tmp = RB_ROOT(head); \
|
||||
struct type *parent = NULL; \
|
||||
while (tmp) { \
|
||||
parent = tmp; \
|
||||
if (val < 0) \
|
||||
tmp = RB_LEFT(tmp, field); \
|
||||
else \
|
||||
tmp = RB_RIGHT(tmp, field); \
|
||||
} \
|
||||
return (parent); \
|
||||
}
|
||||
|
||||
#define RB_NEGINF -1
|
||||
#define RB_INF 1
|
||||
|
||||
#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y)
|
||||
#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y)
|
||||
#define RB_FIND(name, x, y) name##_RB_FIND(x, y)
|
||||
#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y)
|
||||
#define RB_NEXT(name, x, y) name##_RB_NEXT(y)
|
||||
#define RB_PREV(name, x, y) name##_RB_PREV(y)
|
||||
#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF)
|
||||
#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF)
|
||||
|
||||
#define RB_FOREACH(x, name, head) \
|
||||
for ((x) = RB_MIN(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = name##_RB_NEXT(x))
|
||||
|
||||
#define RB_FOREACH_REVERSE(x, name, head) \
|
||||
for ((x) = RB_MAX(name, head); \
|
||||
(x) != NULL; \
|
||||
(x) = name##_RB_PREV(x))
|
||||
|
||||
#endif /* _SYS_TREE_H_ */
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _SYS_TERMIOS_H_
|
||||
#define _SYS_TERMIOS_H_
|
||||
|
||||
#include <minix/termios.h>
|
||||
|
||||
#endif /* !_SYS_TERMIOS_H_ */
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* System wide defaults for terminal state.
|
||||
*/
|
||||
#ifndef _SYS_TTYDEFAULTS_H_
|
||||
#define _SYS_TTYDEFAULTS_H_
|
||||
|
||||
/* NetBSD-like definition of values aready set up in termios.h */
|
||||
|
||||
/*
|
||||
* Defaults on "first" open.
|
||||
*/
|
||||
#define TTYDEF_IFLAG (BRKINT | ICRNL | IXON | IXANY)
|
||||
#define TTYDEF_OFLAG (OPOST | ONLCR )
|
||||
#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE)
|
||||
#define TTYDEF_CFLAG (CREAD | CS8 | HUPCL)
|
||||
#define TTYDEF_SPEED (B9600)
|
||||
|
||||
/*
|
||||
* Control Character Defaults
|
||||
*/
|
||||
#define CTRL(x) (x&037)
|
||||
#define CEOF CTRL('d')
|
||||
#define CEOL _POSIX_VDISABLE
|
||||
#define CERASE CTRL('h')
|
||||
#define CINTR CTRL('c')
|
||||
#define CSTATUS CTRL('t')
|
||||
#define CKILL CTRL('u')
|
||||
#define CMIN 1
|
||||
#define CQUIT 034 /* FS, ^\ */
|
||||
#define CSUSP CTRL('z')
|
||||
#define CTIME 0
|
||||
#define CDSUSP CTRL('y')
|
||||
#define CSTART CTRL('q')
|
||||
#define CSTOP CTRL('s')
|
||||
#define CLNEXT CTRL('v')
|
||||
#define CDISCARD CTRL('o')
|
||||
#define CWERASE CTRL('w')
|
||||
#define CREPRINT CTRL('r')
|
||||
#define CEOT CEOF
|
||||
/* compat */
|
||||
#define CBRK CEOL
|
||||
#define CRPRNT CREPRINT
|
||||
#define CFLUSH CDISCARD
|
||||
|
||||
#endif /* _SYS_TTYDEFAULTS_H_ */
|
||||
+398
-10
@@ -1,16 +1,404 @@
|
||||
#ifndef _INCLUDE_SYS_TYPE_H
|
||||
#define _INCLUDE_SYS_TYPE_H
|
||||
/* $NetBSD: types.h,v 1.86 2009/03/07 21:59:25 ad Exp $ */
|
||||
|
||||
/*
|
||||
* this files resolves conflicts between the file of the host system and
|
||||
* the minix specific one. This file is included directly only on Minix
|
||||
* and it is an error to do so on any other system
|
||||
/*-
|
||||
* Copyright (c) 1982, 1986, 1991, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)types.h 8.4 (Berkeley) 1/21/94
|
||||
*/
|
||||
|
||||
#if !defined(_MINIX) && !defined(__minix) && !defined(__ACK__)
|
||||
#error "Including Minix specific file in program targeted for other system"
|
||||
#else
|
||||
#include <minix/types.h>
|
||||
#ifndef _SYS_TYPES_H_
|
||||
#define _SYS_TYPES_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/* Machine type dependent parameters. */
|
||||
#include <machine/types.h>
|
||||
|
||||
#include <machine/ansi.h>
|
||||
#include <machine/int_types.h>
|
||||
|
||||
#include <sys/ansi.h>
|
||||
|
||||
#ifndef int8_t
|
||||
typedef __int8_t int8_t;
|
||||
#define int8_t __int8_t
|
||||
#endif
|
||||
|
||||
#ifndef uint8_t
|
||||
typedef __uint8_t uint8_t;
|
||||
#define uint8_t __uint8_t
|
||||
#endif
|
||||
|
||||
#ifndef int16_t
|
||||
typedef __int16_t int16_t;
|
||||
#define int16_t __int16_t
|
||||
#endif
|
||||
|
||||
#ifndef uint16_t
|
||||
typedef __uint16_t uint16_t;
|
||||
#define uint16_t __uint16_t
|
||||
#endif
|
||||
|
||||
#ifndef int32_t
|
||||
typedef __int32_t int32_t;
|
||||
#define int32_t __int32_t
|
||||
#endif
|
||||
|
||||
#ifndef uint32_t
|
||||
typedef __uint32_t uint32_t;
|
||||
#define uint32_t __uint32_t
|
||||
#endif
|
||||
|
||||
#ifndef int64_t
|
||||
typedef __int64_t int64_t;
|
||||
#define int64_t __int64_t
|
||||
#endif
|
||||
|
||||
#ifndef uint64_t
|
||||
typedef __uint64_t uint64_t;
|
||||
#define uint64_t __uint64_t
|
||||
#endif
|
||||
|
||||
typedef uint8_t u_int8_t;
|
||||
typedef uint16_t u_int16_t;
|
||||
typedef uint32_t u_int32_t;
|
||||
typedef uint64_t u_int64_t;
|
||||
|
||||
#ifdef __minix
|
||||
typedef uint8_t u8_t;
|
||||
typedef uint16_t u16_t;
|
||||
typedef uint32_t u32_t;
|
||||
typedef uint64_t u64_t;
|
||||
|
||||
typedef int8_t i8_t;
|
||||
typedef int16_t i16_t;
|
||||
typedef int32_t i32_t;
|
||||
typedef int64_t i64_t;
|
||||
|
||||
typedef uint64_t big_ino_t;
|
||||
typedef int64_t big_off_t;
|
||||
typedef u32_t big_dev_t;
|
||||
typedef u32_t big_gid_t;
|
||||
typedef u32_t big_mode_t;
|
||||
typedef u32_t big_nlink_t;
|
||||
typedef u32_t big_uid_t;
|
||||
|
||||
|
||||
/* some Minix specific types that do not conflict with posix */
|
||||
typedef u32_t zone_t; /* zone number */
|
||||
typedef u32_t block_t; /* block number */
|
||||
typedef u32_t bit_t; /* bit number in a bit map */
|
||||
typedef u16_t zone1_t; /* zone number for V1 file systems */
|
||||
typedef u32_t bitchunk_t; /* collection of bits in a bitmap */
|
||||
|
||||
/* ANSI C makes writing down the promotion of unsigned types very messy. When
|
||||
* sizeof(short) == sizeof(int), there is no promotion, so the type stays
|
||||
* unsigned. When the compiler is not ANSI, there is usually no loss of
|
||||
* unsignedness, and there are usually no prototypes so the promoted type
|
||||
* doesn't matter. The use of types like Ino_t is an attempt to use ints
|
||||
* (which are not promoted) while providing information to the reader.
|
||||
*/
|
||||
|
||||
typedef unsigned long Ino_t;
|
||||
|
||||
#endif /* __minix */
|
||||
|
||||
#include <machine/endian.h>
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
typedef unsigned char u_char;
|
||||
typedef unsigned short u_short;
|
||||
typedef unsigned int u_int;
|
||||
typedef unsigned long u_long;
|
||||
|
||||
typedef unsigned char unchar; /* Sys V compatibility */
|
||||
typedef unsigned short ushort; /* Sys V compatibility */
|
||||
typedef unsigned int uint; /* Sys V compatibility */
|
||||
typedef unsigned long ulong; /* Sys V compatibility */
|
||||
#endif
|
||||
|
||||
typedef uint64_t u_quad_t; /* quads */
|
||||
typedef int64_t quad_t;
|
||||
typedef quad_t * qaddr_t;
|
||||
|
||||
/*
|
||||
* The types longlong_t and u_longlong_t exist for use with the
|
||||
* Sun-derived XDR routines involving these types, and their usage
|
||||
* in other contexts is discouraged. Further note that these types
|
||||
* may not be equivalent to "long long" and "unsigned long long",
|
||||
* they are only guaranteed to be signed and unsigned 64-bit types
|
||||
* respectively. Portable programs that need 64-bit types should use
|
||||
* the C99 types int64_t and uint64_t instead.
|
||||
*/
|
||||
|
||||
typedef int64_t longlong_t; /* for XDR */
|
||||
typedef uint64_t u_longlong_t; /* for XDR */
|
||||
|
||||
typedef int64_t blkcnt_t; /* fs block count */
|
||||
typedef uint32_t blksize_t; /* fs optimal block size */
|
||||
|
||||
#ifndef fsblkcnt_t
|
||||
typedef __fsblkcnt_t fsblkcnt_t; /* fs block count (statvfs) */
|
||||
#define fsblkcnt_t __fsblkcnt_t
|
||||
#endif
|
||||
|
||||
#ifndef fsfilcnt_t
|
||||
typedef __fsfilcnt_t fsfilcnt_t; /* fs file count */
|
||||
#define fsfilcnt_t __fsfilcnt_t
|
||||
#endif
|
||||
|
||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
||||
/* We don't and shouldn't use caddr_t in the kernel anymore */
|
||||
#ifndef caddr_t
|
||||
typedef __caddr_t caddr_t; /* core address */
|
||||
#define caddr_t __caddr_t
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __daddr_t
|
||||
typedef __daddr_t daddr_t; /* disk address */
|
||||
#undef __daddr_t
|
||||
#else
|
||||
typedef int64_t daddr_t; /* disk address */
|
||||
#endif
|
||||
|
||||
|
||||
typedef uint32_t dev_t; /* device number */
|
||||
typedef uint32_t fixpt_t; /* fixed point number */
|
||||
|
||||
#ifndef gid_t
|
||||
typedef __gid_t gid_t; /* group id */
|
||||
#define gid_t __gid_t
|
||||
#endif
|
||||
|
||||
typedef int idtype_t; /* type of the id */
|
||||
typedef uint32_t id_t; /* group id, process id or user id */
|
||||
typedef unsigned long ino_t; /* inode number */
|
||||
typedef long key_t; /* IPC key (for Sys V IPC) */
|
||||
|
||||
#ifndef mode_t
|
||||
typedef __mode_t mode_t; /* permissions */
|
||||
#define mode_t __mode_t
|
||||
#endif
|
||||
|
||||
typedef short nlink_t; /* link count */
|
||||
|
||||
#ifndef off_t
|
||||
typedef __off_t off_t; /* file offset */
|
||||
#define off_t __off_t
|
||||
#endif
|
||||
|
||||
#ifndef pid_t
|
||||
typedef __pid_t pid_t; /* process id */
|
||||
#define pid_t __pid_t
|
||||
#endif
|
||||
|
||||
typedef int32_t lwpid_t; /* LWP id */
|
||||
typedef unsigned long rlim_t; /* resource limit */
|
||||
typedef int32_t segsz_t; /* segment size */
|
||||
typedef int32_t swblk_t; /* swap offset */
|
||||
|
||||
#ifndef uid_t
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define uid_t __uid_t
|
||||
#endif
|
||||
|
||||
|
||||
typedef int mqd_t;
|
||||
|
||||
typedef unsigned long cpuid_t;
|
||||
|
||||
typedef int psetid_t;
|
||||
|
||||
#if defined(_KERNEL) || defined(_STANDALONE)
|
||||
/*
|
||||
* Boolean type definitions for the kernel environment. User-space
|
||||
* boolean definitions are found in <stdbool.h>.
|
||||
*/
|
||||
#define bool _Bool
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
/*
|
||||
* Deprecated Mach-style boolean_t type. Should not be used by new code.
|
||||
*/
|
||||
typedef int boolean_t;
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#endif /* _KERNEL || _STANDALONE */
|
||||
|
||||
#if defined(_KERNEL) || defined(_LIBC)
|
||||
/*
|
||||
* semctl(2)'s argument structure. This is here for the benefit of
|
||||
* <sys/syscallargs.h>. It is not in the user's namespace in SUSv2.
|
||||
* The SUSv2 semctl(2) takes variable arguments.
|
||||
*/
|
||||
union __semun {
|
||||
int val; /* value for SETVAL */
|
||||
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
|
||||
unsigned short *array; /* array for GETALL & SETALL */
|
||||
};
|
||||
#include <sys/stdint.h>
|
||||
#endif /* _KERNEL || _LIBC */
|
||||
|
||||
/*
|
||||
* These belong in unistd.h, but are placed here too to ensure that
|
||||
* long arguments will be promoted to off_t if the program fails to
|
||||
* include that header or explicitly cast them to off_t.
|
||||
*/
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#ifndef __OFF_T_SYSCALLS_DECLARED
|
||||
#define __OFF_T_SYSCALLS_DECLARED
|
||||
#ifndef _KERNEL
|
||||
#include <sys/cdefs.h>
|
||||
__BEGIN_DECLS
|
||||
off_t lseek(int, off_t, int);
|
||||
int ftruncate(int, off_t);
|
||||
int truncate(const char *, off_t);
|
||||
__END_DECLS
|
||||
#endif /* !_KERNEL */
|
||||
#endif /* __OFF_T_SYSCALLS_DECLARED */
|
||||
#endif /* defined(_NETBSD_SOURCE) */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
typedef int32_t __devmajor_t, __devminor_t;
|
||||
#define devmajor_t __devmajor_t
|
||||
#define devminor_t __devminor_t
|
||||
#define NODEVMAJOR (-1)
|
||||
|
||||
/* Major, minor numbers, dev_t's. */
|
||||
#define MAJOR 8 /* major device = (dev>>MAJOR) & 0377 */
|
||||
#define MINOR 0 /* minor device = (dev>>MINOR) & 0377 */
|
||||
#define minor(dev) ((devminor_t)(((dev) >> MINOR) & 0xff))
|
||||
#define major(dev) ((devmajor_t)(((dev) >> MAJOR) & 0xff))
|
||||
#define makedev(major, minor) \
|
||||
((dev_t) (((major) << MAJOR) | ((minor) << MINOR)))
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_CLOCK_T_
|
||||
typedef _BSD_CLOCK_T_ clock_t;
|
||||
#undef _BSD_CLOCK_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#define _SIZE_T
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SSIZE_T_
|
||||
typedef _BSD_SSIZE_T_ ssize_t;
|
||||
#undef _BSD_SSIZE_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_TIME_T_
|
||||
typedef _BSD_TIME_T_ time_t;
|
||||
#undef _BSD_TIME_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_CLOCKID_T_
|
||||
typedef _BSD_CLOCKID_T_ clockid_t;
|
||||
#undef _BSD_CLOCKID_T_
|
||||
#endif
|
||||
|
||||
#ifndef __minix
|
||||
#ifdef _BSD_TIMER_T_
|
||||
typedef _BSD_TIMER_T_ timer_t;
|
||||
#undef _BSD_TIMER_T_
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_SUSECONDS_T_
|
||||
typedef _BSD_SUSECONDS_T_ suseconds_t;
|
||||
#undef _BSD_SUSECONDS_T_
|
||||
#endif
|
||||
|
||||
#ifdef _BSD_USECONDS_T_
|
||||
typedef _BSD_USECONDS_T_ useconds_t;
|
||||
#undef _BSD_USECONDS_T_
|
||||
#endif
|
||||
|
||||
#ifdef _NETBSD_SOURCE
|
||||
#include <sys/fd_set.h>
|
||||
#define NBBY __NBBY
|
||||
|
||||
typedef struct kauth_cred *kauth_cred_t;
|
||||
|
||||
typedef int pri_t;
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(__STDC__) && (defined(_KERNEL) || defined(_KMEMUSER))
|
||||
/*
|
||||
* Forward structure declarations for function prototypes. We include the
|
||||
* common structures that cross subsystem boundaries here; others are mostly
|
||||
* used in the same place that the structure is defined.
|
||||
*/
|
||||
struct lwp;
|
||||
typedef struct lwp lwp_t;
|
||||
struct user;
|
||||
struct __ucontext;
|
||||
struct proc;
|
||||
typedef struct proc proc_t;
|
||||
struct pgrp;
|
||||
struct rusage;
|
||||
struct file;
|
||||
typedef struct file file_t;
|
||||
struct buf;
|
||||
typedef struct buf buf_t;
|
||||
struct tty;
|
||||
struct uio;
|
||||
#endif
|
||||
|
||||
#ifdef _KERNEL
|
||||
#define SET(t, f) ((t) |= (f))
|
||||
#define ISSET(t, f) ((t) & (f))
|
||||
#define CLR(t, f) ((t) &= ~(f))
|
||||
#endif
|
||||
|
||||
#ifndef __minix
|
||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
||||
#if (_POSIX_C_SOURCE - 0L) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
|
||||
defined(_NETBSD_SOURCE)
|
||||
#include <pthread_types.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif /* !__minix */
|
||||
|
||||
#endif /* !_SYS_TYPES_H_ */
|
||||
|
||||
+25
-9
@@ -1,15 +1,11 @@
|
||||
#ifndef _SYS_UCONTEXT_H
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
#ifndef _SYS_UCONTEXT_H_
|
||||
#define _SYS_UCONTEXT_H_
|
||||
|
||||
#include <signal.h>
|
||||
#include <sys/sigtypes.h>
|
||||
#include <machine/mcontext.h>
|
||||
|
||||
#define NCARGS 6
|
||||
|
||||
#define UCF_SWAPPED 001 /* Context has been swapped in by swapcontext(3) */
|
||||
#define UCF_IGNFPU 002 /* Ignore FPU context by get or setcontext(3) */
|
||||
#define UCF_IGNSIGM 004 /* Ignore signal mask by get or setcontext(3) */
|
||||
typedef struct __ucontext ucontext_t;
|
||||
|
||||
struct __ucontext {
|
||||
unsigned int uc_flags; /* Properties of ucontext */
|
||||
ucontext_t *uc_link; /* Next context to resume when current is finished */
|
||||
@@ -18,5 +14,25 @@ struct __ucontext {
|
||||
stack_t uc_stack; /* The stack used by this context */
|
||||
};
|
||||
|
||||
#endif /* _SYS_UCONTEXT_H */
|
||||
#ifndef _UC_UCONTEXT_ALIGN
|
||||
#define _UC_UCONTEXT_ALIGN (~0)
|
||||
#endif
|
||||
|
||||
#define UCF_SWAPPED 001 /* Context has been swapped in by swapcontext(3) */
|
||||
#define UCF_IGNFPU 002 /* Ignore FPU context by get or setcontext(3) */
|
||||
#define UCF_IGNSIGM 004 /* Ignore signal mask by get or setcontext(3) */
|
||||
|
||||
#define NCARGS 6
|
||||
|
||||
#ifdef __minix
|
||||
__BEGIN_DECLS
|
||||
void resumecontext(ucontext_t *ucp);
|
||||
|
||||
/* These functions get and set ucontext structure through PM/kernel. They don't
|
||||
* manipulate the stack. */
|
||||
int getuctx(ucontext_t *ucp);
|
||||
int setuctx(const ucontext_t *ucp);
|
||||
__END_DECLS
|
||||
#endif /* __minix */
|
||||
|
||||
#endif /* !_SYS_UCONTEXT_H_ */
|
||||
|
||||
+13
-4
@@ -5,14 +5,23 @@ struct ucred_old
|
||||
{
|
||||
pid_t pid;
|
||||
short uid;
|
||||
char gid;
|
||||
char gid;
|
||||
};
|
||||
|
||||
struct ucred
|
||||
{
|
||||
pid_t pid;
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
pid_t pid;
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
};
|
||||
|
||||
/* Userland's view of credentials. This should not change */
|
||||
struct uucred {
|
||||
unsigned short cr_unused; /* not used, compat */
|
||||
uid_t cr_uid; /* effective user id */
|
||||
gid_t cr_gid; /* effective group id */
|
||||
short cr_ngroups; /* number of groups */
|
||||
gid_t cr_groups[NGROUPS_MAX]; /* groups */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+30
-16
@@ -1,23 +1,37 @@
|
||||
/*
|
||||
sys/uio.h
|
||||
#ifndef _SYS_UIO_H_
|
||||
#define _SYS_UIO_H_
|
||||
|
||||
definitions for vector I/O operations
|
||||
*/
|
||||
#include <machine/ansi.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#ifndef _SYS_UIO_H
|
||||
#define _SYS_UIO_H
|
||||
#ifdef _BSD_SIZE_T_
|
||||
typedef _BSD_SIZE_T_ size_t;
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
|
||||
/* Open Group Base Specifications Issue 6 (not complete) */
|
||||
#ifdef _BSD_SSIZE_T_
|
||||
typedef _BSD_SSIZE_T_ ssize_t;
|
||||
#undef _BSD_SSIZE_T_
|
||||
#endif
|
||||
|
||||
struct iovec
|
||||
{
|
||||
void *iov_base;
|
||||
size_t iov_len;
|
||||
struct iovec {
|
||||
void *iov_base; /* Base address. */
|
||||
size_t iov_len; /* Length. */
|
||||
};
|
||||
|
||||
_PROTOTYPE(ssize_t readv, (int _fildes, const struct iovec *_iov,
|
||||
int _iovcnt) );
|
||||
_PROTOTYPE(ssize_t writev, (int _fildes, const struct iovec *_iov,
|
||||
int iovcnt) );
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* Limits
|
||||
*/
|
||||
/* Deprecated: use IOV_MAX from <limits.h> instead. */
|
||||
#define UIO_MAXIOV 1024 /* max 1K of iov's */
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
#endif /* _SYS_UIO_H */
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
ssize_t readv(int, const struct iovec *, int);
|
||||
ssize_t writev(int, const struct iovec *, int);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_UIO_H_ */
|
||||
|
||||
+14
-11
@@ -1,18 +1,21 @@
|
||||
#ifndef SYS_UN_H
|
||||
#define SYS_UN_H
|
||||
#ifndef _SYS_UN_H_
|
||||
#define _SYS_UN_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/ansi.h>
|
||||
#include <sys/featuretest.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef _SA_FAMILY_T
|
||||
#define _SA_FAMILY_T
|
||||
/* Should match corresponding typedef in <sys/socket.h> */
|
||||
typedef uint8_t sa_family_t;
|
||||
#endif /* _SA_FAMILY_T */
|
||||
#ifndef sa_family_t
|
||||
typedef __sa_family_t sa_family_t;
|
||||
#define sa_family_t __sa_family_t
|
||||
#endif
|
||||
|
||||
#define UNIX_PATH_MAX 127
|
||||
|
||||
struct sockaddr_un
|
||||
{
|
||||
/*
|
||||
* Definitions for UNIX IPC domain.
|
||||
*/
|
||||
struct sockaddr_un {
|
||||
sa_family_t sun_family;
|
||||
char sun_path[UNIX_PATH_MAX];
|
||||
};
|
||||
@@ -28,4 +31,4 @@ struct sockaddr_un
|
||||
#define SUN_LEN(unp) \
|
||||
((size_t)((sizeof(*(unp)) - sizeof((unp)->sun_path)) + strlen((unp)->sun_path)))
|
||||
|
||||
#endif
|
||||
#endif /* _SYS_UN_H_ */
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
/* $NetBSD: unistd.h,v 1.52 2009/08/30 16:38:48 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)unistd.h 8.2 (Berkeley) 1/7/94
|
||||
*/
|
||||
|
||||
#ifndef _SYS_UNISTD_H_
|
||||
#define _SYS_UNISTD_H_
|
||||
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/* compile-time symbolic constants */
|
||||
#define _POSIX_JOB_CONTROL 1
|
||||
/* implementation supports job control */
|
||||
|
||||
/*
|
||||
* According to POSIX 1003.1:
|
||||
* "The saved set-user-ID capability allows a program to regain the
|
||||
* effective user ID established at the last exec call."
|
||||
* However, the setuid/setgid function as specified by POSIX 1003.1 does
|
||||
* not allow changing the effective ID from the super-user without also
|
||||
* changed the saved ID, so it is impossible to get super-user privileges
|
||||
* back later. Instead we provide this feature independent of the current
|
||||
* effective ID through the seteuid/setegid function. In addition, we do
|
||||
* not use the saved ID as specified by POSIX 1003.1 in setuid/setgid,
|
||||
* because this would make it impossible for a set-user-ID executable
|
||||
* owned by a user other than the super-user to permanently revoke its
|
||||
* extra privileges.
|
||||
*/
|
||||
#ifdef _NOT_AVAILABLE
|
||||
#define _POSIX_SAVED_IDS 1
|
||||
/* saved set-user-ID and set-group-ID */
|
||||
#endif
|
||||
|
||||
#define _POSIX_VERSION 200112L
|
||||
#define _POSIX2_VERSION 200112L
|
||||
|
||||
/* execution-time symbolic constants */
|
||||
|
||||
/*
|
||||
* POSIX options and option groups we unconditionally do or don't
|
||||
* implement. Those options which are implemented (or not) entirely
|
||||
* in user mode are defined in <unistd.h>. Please keep this list in
|
||||
* alphabetical order.
|
||||
*
|
||||
* Anything which is defined as zero below **must** have an
|
||||
* implementation for the corresponding sysconf() which is able to
|
||||
* determine conclusively whether or not the feature is supported.
|
||||
* Anything which is defined as other than -1 below **must** have
|
||||
* complete headers, types, and function declarations as specified by
|
||||
* the POSIX standard; however, if the relevant sysconf() function
|
||||
* returns -1, the functions may be stubbed out.
|
||||
*/
|
||||
/* Advisory information */
|
||||
#undef _POSIX_ADVISORY_INFO
|
||||
/* asynchronous I/O is available */
|
||||
#define _POSIX_ASYNCHRONOUS_IO 200112L
|
||||
/* barriers */
|
||||
#define _POSIX_BARRIERS 200112L
|
||||
/* chown requires correct privileges */
|
||||
#define _POSIX_CHOWN_RESTRICTED 1
|
||||
/* clock selection */
|
||||
#define _POSIX_CLOCK_SELECTION -1
|
||||
/* CPU type */
|
||||
#undef _POSIX_CPUTYPE
|
||||
/* file synchronization is available */
|
||||
#define _POSIX_FSYNC 1
|
||||
/* support IPv6 */
|
||||
#define _POSIX_IPV6 0
|
||||
/* job control is available */
|
||||
#define _POSIX_JOB_CONTROL 1
|
||||
/* memory mapped files */
|
||||
#define _POSIX_MAPPED_FILES 1
|
||||
/* memory locking whole address space */
|
||||
#define _POSIX_MEMLOCK 1
|
||||
/* memory locking address ranges */
|
||||
#define _POSIX_MEMLOCK_RANGE 1
|
||||
/* memory access protections */
|
||||
#define _POSIX_MEMORY_PROTECTION 1
|
||||
/* message passing is available */
|
||||
#define _POSIX_MESSAGE_PASSING 200112L
|
||||
/* monotonic clock */
|
||||
#define _POSIX_MONOTONIC_CLOCK 200112L
|
||||
/* too-long path comp generate errors */
|
||||
#define _POSIX_NO_TRUNC 1
|
||||
/* prioritized I/O */
|
||||
#define _POSIX_PRIORITIZED_IO -1
|
||||
/* priority scheduling */
|
||||
#define _POSIX_PRIORITY_SCHEDULING 200112L
|
||||
/* raw sockets */
|
||||
#define _POSIX_RAW_SOCKETS 200112L
|
||||
/* read/write locks */
|
||||
#define _POSIX_READER_WRITER_LOCKS 200112L
|
||||
/* realtime signals */
|
||||
#undef _POSIX_REALTIME_SIGNALS
|
||||
/* regular expressions */
|
||||
#define _POSIX_REGEXP 1
|
||||
/* semaphores */
|
||||
#define _POSIX_SEMAPHORES 0
|
||||
/* shared memory */
|
||||
#undef _POSIX_SHARED_MEMORY_OBJECTS
|
||||
/* shell */
|
||||
#define _POSIX_SHELL 1
|
||||
/* spin locks */
|
||||
#define _POSIX_SPIN_LOCKS 200112L
|
||||
/* sporadic server */
|
||||
#undef _POSIX_SPORADIC_SERVER
|
||||
/* synchronized I/O is available */
|
||||
#define _POSIX_SYNCHRONIZED_IO 1
|
||||
/* threads */
|
||||
#define _POSIX_THREADS 200112L
|
||||
/* pthread_attr for stack size */
|
||||
#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
|
||||
/* pthread_attr for stack address */
|
||||
#define _POSIX_THREAD_ATTR_STACKADDR 200112L
|
||||
/* _r functions */
|
||||
#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
|
||||
/* timeouts */
|
||||
#undef _POSIX_TIMEOUTS
|
||||
/* timers */
|
||||
#undef _POSIX_TIMERS
|
||||
/* typed memory objects */
|
||||
#undef _POSIX_TYPED_MEMORY_OBJECTS
|
||||
/* may disable terminal spec chars */
|
||||
#define _POSIX_VDISABLE __CAST(unsigned char, '\377')
|
||||
|
||||
/* C binding */
|
||||
#define _POSIX2_C_BIND 200112L
|
||||
|
||||
/* XPG4.2 shared memory */
|
||||
#define _XOPEN_SHM 0
|
||||
|
||||
/* access function */
|
||||
#define F_OK 0 /* test for existence of file */
|
||||
#define X_OK 0x01 /* test for execute or search permission */
|
||||
#define W_OK 0x02 /* test for write permission */
|
||||
#define R_OK 0x04 /* test for read permission */
|
||||
|
||||
/* whence values for lseek(2) */
|
||||
#define SEEK_SET 0 /* set file offset to offset */
|
||||
#define SEEK_CUR 1 /* set file offset to current plus offset */
|
||||
#define SEEK_END 2 /* set file offset to EOF plus offset */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/* whence values for lseek(2); renamed by POSIX 1003.1 */
|
||||
#define L_SET SEEK_SET
|
||||
#define L_INCR SEEK_CUR
|
||||
#define L_XTND SEEK_END
|
||||
#endif
|
||||
|
||||
/* configurable pathname variables; use as argument to pathconf(3) */
|
||||
#define _PC_LINK_MAX 1 /* link count */
|
||||
#define _PC_MAX_CANON 2 /* size of the canonical input queue */
|
||||
#define _PC_MAX_INPUT 3 /* type-ahead buffer size */
|
||||
#define _PC_NAME_MAX 4 /* file name size */
|
||||
#define _PC_PATH_MAX 5 /* pathname size */
|
||||
#define _PC_PIPE_BUF 6 /* pipe size */
|
||||
#define _PC_NO_TRUNC 7 /* treatment of long name components */
|
||||
#define _PC_VDISABLE 8 /* tty disable */
|
||||
#define _PC_CHOWN_RESTRICTED 9 /* chown restricted or not */
|
||||
|
||||
/* configurable system variables; use as argument to sysconf(3) */
|
||||
/*
|
||||
* XXX The value of _SC_CLK_TCK is embedded in <time.h>.
|
||||
* XXX The value of _SC_PAGESIZE is embedded in <sys/shm.h>.
|
||||
*/
|
||||
#define _SC_ARG_MAX 1
|
||||
#define _SC_CHILD_MAX 2
|
||||
#define _SC_CLOCKS_PER_SEC 3
|
||||
#define _SC_CLK_TCK 3
|
||||
#define _SC_NGROUPS_MAX 4
|
||||
#define _SC_OPEN_MAX 5
|
||||
#define _SC_JOB_CONTROL 6
|
||||
#define _SC_SAVED_IDS 7
|
||||
#define _SC_VERSION 8
|
||||
#define _SC_STREAM_MAX 9
|
||||
#define _SC_TZNAME_MAX 10
|
||||
#define _SC_PAGESIZE 11
|
||||
#define _SC_PAGE_SIZE _SC_PAGESIZE
|
||||
|
||||
#endif /* !_SYS_UNISTD_H_ */
|
||||
+23
-22
@@ -1,32 +1,33 @@
|
||||
/* The <sys/utsname.h> header gives the system name. */
|
||||
#ifndef _SYS_UTSNAME_H_
|
||||
#define _SYS_UTSNAME_H_
|
||||
|
||||
#ifndef _UTSNAME_H
|
||||
#define _UTSNAME_H
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
#ifndef _MINIX_ANSI_H
|
||||
#include <minix/ansi.h>
|
||||
#define _SYS_NMLN 256
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define SYS_NMLN _SYS_NMLN
|
||||
#endif
|
||||
|
||||
#include <minix/types.h>
|
||||
|
||||
struct utsname {
|
||||
char sysname[15+1];
|
||||
char nodename[255+1];
|
||||
char release[11+1];
|
||||
char version[7+1];
|
||||
char machine[11+1];
|
||||
char arch[11+1];
|
||||
char sysname[_SYS_NMLN]; /* Name of this OS. */
|
||||
char nodename[_SYS_NMLN]; /* Name of this network node. */
|
||||
char release[_SYS_NMLN]; /* Release level. */
|
||||
char version[_SYS_NMLN]; /* Version level. */
|
||||
char machine[_SYS_NMLN]; /* Hardware type. */
|
||||
char arch[_SYS_NMLN];
|
||||
};
|
||||
|
||||
/* Function Prototypes. */
|
||||
_PROTOTYPE( int uname, (struct utsname *_name) );
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef _MINIX
|
||||
/* Uname() is implemented with sysuname(). */
|
||||
|
||||
_PROTOTYPE( int sysuname, (int _req, int _field, char *_value,
|
||||
size_t _len));
|
||||
__BEGIN_DECLS
|
||||
int uname(struct utsname *);
|
||||
#ifdef __minix
|
||||
int sysuname(int _req, int _field, char *_value, size_t _len);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#ifdef __minix
|
||||
/* req: Get or set a string. */
|
||||
#define _UTS_GET 0
|
||||
#define _UTS_SET 1
|
||||
@@ -42,6 +43,6 @@ _PROTOTYPE( int sysuname, (int _req, int _field, char *_value,
|
||||
#define _UTS_SYSNAME 7
|
||||
#define _UTS_BUS 8
|
||||
#define _UTS_MAX 9 /* Number of strings. */
|
||||
#endif /* _MINIX */
|
||||
#endif /* __minix */
|
||||
|
||||
#endif /* _UTSNAME_H */
|
||||
#endif /* !_SYS_UTSNAME_H_ */
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/* $NetBSD: uuid.h,v 1.5 2008/11/18 14:01:03 joerg Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2002 Marcel Moolenaar
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: /repoman/r/ncvs/src/sys/sys/uuid.h,v 1.3 2003/05/31 16:47:07 phk Exp $
|
||||
*/
|
||||
|
||||
#ifndef _SYS_UUID_H_
|
||||
#define _SYS_UUID_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/* Length of a node address (an IEEE 802 address). */
|
||||
#define _UUID_NODE_LEN 6
|
||||
|
||||
/* Length of a printed UUID. */
|
||||
#define _UUID_STR_LEN 38
|
||||
|
||||
/*
|
||||
* See also:
|
||||
* http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt
|
||||
* http://www.opengroup.org/onlinepubs/009629399/apdxa.htm
|
||||
*
|
||||
* A DCE 1.1 compatible source representation of UUIDs.
|
||||
*/
|
||||
struct uuid {
|
||||
uint32_t time_low;
|
||||
uint16_t time_mid;
|
||||
uint16_t time_hi_and_version;
|
||||
uint8_t clock_seq_hi_and_reserved;
|
||||
uint8_t clock_seq_low;
|
||||
uint8_t node[_UUID_NODE_LEN];
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#define UUID_NODE_LEN _UUID_NODE_LEN
|
||||
#define UUID_STR_LEN _UUID_STR_LEN
|
||||
|
||||
int uuid_snprintf(char *, size_t, const struct uuid *);
|
||||
int uuid_printf(const struct uuid *);
|
||||
void uuid_dec_be(const void *, struct uuid *);
|
||||
void uuid_dec_le(const void *, struct uuid *);
|
||||
void uuid_enc_be(void *, const struct uuid *);
|
||||
void uuid_enc_le(void *, const struct uuid *);
|
||||
void uuid_init(void);
|
||||
int uuidgen(struct uuid *, int);
|
||||
|
||||
#else /* _KERNEL */
|
||||
|
||||
typedef struct uuid uuid_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
int uuidgen(struct uuid *, int);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* _SYS_UUID_H_ */
|
||||
+37
-13
@@ -1,3 +1,10 @@
|
||||
#ifndef _SYS_WAIT_H_
|
||||
#define _SYS_WAIT_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/featuretest.h>
|
||||
|
||||
/* The <sys/wait.h> header contains macros related to wait(). The value
|
||||
* returned by wait() and waitpid() depends on whether the process
|
||||
* terminated by an exit() call, was killed by a signal, or was stopped
|
||||
@@ -13,19 +20,14 @@
|
||||
* +---------------------+
|
||||
*/
|
||||
|
||||
#ifndef _WAIT_H
|
||||
#define _WAIT_H
|
||||
|
||||
#ifndef _TYPES_H
|
||||
#include <minix/types.h>
|
||||
#endif
|
||||
/*
|
||||
* Macros to test the exit status returned by wait
|
||||
* and extract the relevant values.
|
||||
*/
|
||||
|
||||
#define _LOW(v) ( (v) & 0377)
|
||||
#define _HIGH(v) ( ((v) >> 8) & 0377)
|
||||
|
||||
#define WNOHANG 1 /* do not wait for child to exit */
|
||||
#define WUNTRACED 2 /* for job control; not implemented */
|
||||
|
||||
#define WIFEXITED(s) (_LOW(s) == 0) /* normal exit */
|
||||
#define WEXITSTATUS(s) (_HIGH(s)) /* exit status */
|
||||
#define WTERMSIG(s) (_LOW(s) & 0177) /* sig value */
|
||||
@@ -33,8 +35,30 @@
|
||||
#define WIFSTOPPED(s) (_LOW(s) == 0177) /* stopped */
|
||||
#define WSTOPSIG(s) (_HIGH(s) & 0377) /* stop signal */
|
||||
|
||||
/* Function Prototypes. */
|
||||
_PROTOTYPE( pid_t wait, (int *_stat_loc) );
|
||||
_PROTOTYPE( pid_t waitpid, (pid_t _pid, int *_stat_loc, int _options) );
|
||||
/*
|
||||
* Option bits for the third argument of waitpid. WNOHANG causes the
|
||||
* wait to not hang if there are no stopped or terminated processes, rather
|
||||
* returning an error indication in this case (pid==0). WUNTRACED
|
||||
* indicates that the caller should receive status about untraced children
|
||||
* which stop due to signals. If children are stopped and a wait without
|
||||
* this option is done, it is as though they were still running... nothing
|
||||
* about them is returned.
|
||||
*/
|
||||
#define WNOHANG 0x00000001 /* don't hang in wait */
|
||||
#define WUNTRACED 0x00000002 /* tell about stopped,
|
||||
untraced children */
|
||||
|
||||
#endif /* _WAIT_H */
|
||||
/* POSIX extensions and 4.2/4.3 compatibility: */
|
||||
|
||||
/*
|
||||
* Tokens for special values of the "pid" parameter to waitpid.
|
||||
*/
|
||||
#define WAIT_ANY (-1) /* any process */
|
||||
#define WAIT_MYPGRP 0 /* any process in my process group */
|
||||
|
||||
__BEGIN_DECLS
|
||||
pid_t wait(int *);
|
||||
pid_t waitpid(pid_t, int *, int);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_SYS_WAIT_H_ */
|
||||
|
||||
Reference in New Issue
Block a user