From ad4dda469f3fa4909f4993cd07dcb05618139c91 Mon Sep 17 00:00:00 2001 From: Gianluca Guida Date: Tue, 15 Feb 2011 12:19:40 +0000 Subject: [PATCH] Port NetBSD libc functions to Minix. This patch contains changes to NetBSD libc code base to make it compile and work on Minix. Some of them are due to actual NetBSD libc bugs, as we're compiling it in non-reentrant mode and with a.out support, something not exactly frequent in NetBSD. Others are proper fixes to port it to Minix (mostly sa_len parameter missing in socket and a few mmap from files). --- lib/nbsd_libc/Makefile | 27 +++--- lib/nbsd_libc/Makefile.inc | 7 +- lib/nbsd_libc/arch/i386/Makefile.inc | 2 +- lib/nbsd_libc/arch/i386/gen/Makefile.inc | 7 +- lib/nbsd_libc/cdb/cdbr.c | 15 +++ lib/nbsd_libc/citrus/citrus_mmap.c | 13 +++ lib/nbsd_libc/compat-43/Makefile.inc | 9 +- lib/nbsd_libc/db/db/db.c | 6 ++ lib/nbsd_libc/gdtoa/gdtoa_locks.c | 2 + lib/nbsd_libc/gen/Makefile.inc | 47 ++++++---- lib/nbsd_libc/gen/_verr.c | 1 + lib/nbsd_libc/gen/_verrx.c | 1 + lib/nbsd_libc/gen/_vwarn.c | 1 + lib/nbsd_libc/gen/_vwarnx.c | 1 + lib/nbsd_libc/gen/_warn.c | 3 +- lib/nbsd_libc/gen/_warnx.c | 2 +- lib/nbsd_libc/gen/closedir.c | 5 + lib/nbsd_libc/gen/errlist-minix.awk | 113 +++++++++++++++++++++++ lib/nbsd_libc/gen/fts.c | 2 + lib/nbsd_libc/gen/getgrent.c | 39 ++++++-- lib/nbsd_libc/gen/getgroupmembership.c | 24 +++++ lib/nbsd_libc/gen/getlogin.c | 4 + lib/nbsd_libc/gen/getpwent.c | 50 ++++++++++ lib/nbsd_libc/gen/gr_private.h | 4 +- lib/nbsd_libc/gen/initdir.c | 11 +++ lib/nbsd_libc/gen/opendir.c | 13 +++ lib/nbsd_libc/gen/readdir.c | 9 ++ lib/nbsd_libc/gen/rewinddir.c | 5 + lib/nbsd_libc/gen/scandir.c | 4 + lib/nbsd_libc/gen/seekdir.c | 3 + lib/nbsd_libc/gen/syslog.c | 2 + lib/nbsd_libc/gen/telldir.c | 5 + lib/nbsd_libc/gen/ttyname.c | 10 +- lib/nbsd_libc/gen/ttyslot.c | 6 ++ lib/nbsd_libc/gen/ulimit.c | 2 + lib/nbsd_libc/gen/utmpx.c | 34 ++++++- lib/nbsd_libc/gmon/gmon.c | 9 +- lib/nbsd_libc/include/env.h | 2 +- lib/nbsd_libc/include/namespace.h | 84 ++++++++++++++++- lib/nbsd_libc/libcincludes.mk | 8 +- lib/nbsd_libc/locale/setlocale.c | 33 +++++++ lib/nbsd_libc/minix-config.inc | 15 +++ lib/nbsd_libc/misc/initfini.c | 2 + lib/nbsd_libc/misc/stack_protector.c | 7 +- lib/nbsd_libc/net/Makefile.inc | 14 ++- lib/nbsd_libc/net/getaddrinfo.c | 5 + lib/nbsd_libc/net/getnameinfo.c | 13 ++- lib/nbsd_libc/net/rcmd.c | 29 +++++- lib/nbsd_libc/net/send.c | 6 ++ lib/nbsd_libc/nls/catopen.c | 14 +++ lib/nbsd_libc/resolv/res_init.c | 18 +++- lib/nbsd_libc/stdlib/Makefile.inc | 2 +- lib/nbsd_libc/stdlib/atexit.c | 2 + lib/nbsd_libc/stdlib/malloc.c | 8 ++ lib/nbsd_libc/stdlib/system.c | 4 + lib/nbsd_libc/termios/Makefile.inc | 7 +- lib/nbsd_libc/termios/cfmakeraw.c | 4 + lib/nbsd_libc/termios/tcflow.c | 5 + lib/nbsd_libc/termios/tcflush.c | 5 + lib/nbsd_libc/termios/tcsendbreak.c | 7 ++ lib/nbsd_libc/termios/tcsetattr.c | 4 + lib/nbsd_libc/yp/yplib.c | 6 ++ 62 files changed, 730 insertions(+), 72 deletions(-) create mode 100644 lib/nbsd_libc/gen/errlist-minix.awk create mode 100644 lib/nbsd_libc/minix-config.inc diff --git a/lib/nbsd_libc/Makefile b/lib/nbsd_libc/Makefile index 2bce0bba5..1db352804 100644 --- a/lib/nbsd_libc/Makefile +++ b/lib/nbsd_libc/Makefile @@ -17,6 +17,7 @@ # The Hesiod functions are always in libc. To choose that getpwent() and friends # actually call the Hesiod functions, put -DHESIOD on the CPPFLAGS line below. +.include "minix-config.inc" .include "Makefile.inc" LIB= c @@ -44,14 +45,14 @@ assym.h: ${ARCHDIR}/genassym.cf # The following controls how to build compatibility code for old NetBSD # binaries. If BUILDCOLD is yes, then we build a separate library; otherwise # we include the code in libc. -BUILDCOLD?= no -.if "${BUILDCOLD}" == "yes" -SUBDIR=compat -.include -.else -COMPATDIR=${.CURDIR}/compat -.include "${.CURDIR}/compat/Makefile.inc" -.endif +#BUILDCOLD?= no +#.if "${BUILDCOLD}" == "yes" +#SUBDIR=compat +#.include +#.else +#COMPATDIR=${.CURDIR}/compat +#.include "${.CURDIR}/compat/Makefile.inc" +#.endif .include "${.CURDIR}/../../common/lib/libc/Makefile.inc" .include "${.CURDIR}/atomic/Makefile.inc" @@ -61,10 +62,11 @@ COMPATDIR=${.CURDIR}/compat .include "${.CURDIR}/citrus/Makefile.inc" .endif .include "${.CURDIR}/compat-43/Makefile.inc" -.include "${.CURDIR}/dlfcn/Makefile.inc" +#.include "${.CURDIR}/dlfcn/Makefile.inc" .include "${.CURDIR}/gdtoa/Makefile.inc" .include "${.CURDIR}/gen/Makefile.inc" -.include "${.CURDIR}/gmon/Makefile.inc" +# gmon needs profil() +#.include "${.CURDIR}/gmon/Makefile.inc" .include "${.CURDIR}/hash/Makefile.inc" .include "${.CURDIR}/iconv/Makefile.inc" .include "${.CURDIR}/inet/Makefile.inc" @@ -84,7 +86,8 @@ COMPATDIR=${.CURDIR}/compat .include "${.CURDIR}/regex/Makefile.inc" .endif .include "${.CURDIR}/resolv/Makefile.inc" -.include "${.CURDIR}/rpc/Makefile.inc" +# RPC needs pollts and a reserved port allocator. +#.include "${.CURDIR}/rpc/Makefile.inc" .include "${.CURDIR}/ssp/Makefile.inc" .include "${.CURDIR}/stdio/Makefile.inc" .include "${.CURDIR}/stdlib/Makefile.inc" @@ -92,7 +95,7 @@ COMPATDIR=${.CURDIR}/compat .include "${.CURDIR}/termios/Makefile.inc" .include "${.CURDIR}/thread-stub/Makefile.inc" .include "${.CURDIR}/time/Makefile.inc" -.include "${.CURDIR}/sys/Makefile.inc" +.include "${.CURDIR}/sys-minix/Makefile.inc" .include "${.CURDIR}/uuid/Makefile.inc" .if (${MKYP} != "no") .include "${.CURDIR}/yp/Makefile.inc" diff --git a/lib/nbsd_libc/Makefile.inc b/lib/nbsd_libc/Makefile.inc index 6837e02c6..386b6179d 100644 --- a/lib/nbsd_libc/Makefile.inc +++ b/lib/nbsd_libc/Makefile.inc @@ -19,14 +19,17 @@ USE_FORT?= yes -USE_SHLIBDIR= yes +USE_SHLIBDIR= no CITRUS?= yes +USE_LIBTRE= no +NETBSDSRCDIR= ${MINIXSRCDIR} + .include WARNS=4 -CPPFLAGS+= -D_LIBC -DLIBC_SCCS -DSYSLIBC_SCCS -D_REENTRANT +CPPFLAGS+= -D_LIBC -DLIBC_SCCS -DSYSLIBC_SCCS #-D_REENTRANT .if (${USE_HESIOD} != "no") CPPFLAGS+= -DHESIOD diff --git a/lib/nbsd_libc/arch/i386/Makefile.inc b/lib/nbsd_libc/arch/i386/Makefile.inc index 6b78a3bbf..703a6225f 100644 --- a/lib/nbsd_libc/arch/i386/Makefile.inc +++ b/lib/nbsd_libc/arch/i386/Makefile.inc @@ -1,3 +1,3 @@ # $NetBSD: Makefile.inc,v 1.20 2006/06/17 18:04:23 uwe Exp $ -SRCS+= __sigaction14_sigtramp.c __sigtramp2.S +#SRCS+= __sigaction14_sigtramp.c __sigtramp2.S diff --git a/lib/nbsd_libc/arch/i386/gen/Makefile.inc b/lib/nbsd_libc/arch/i386/gen/Makefile.inc index 4c845e75e..c5a417d0c 100644 --- a/lib/nbsd_libc/arch/i386/gen/Makefile.inc +++ b/lib/nbsd_libc/arch/i386/gen/Makefile.inc @@ -7,10 +7,13 @@ SRCS+= alloca.S byte_swap_2.S byte_swap_4.S fabs.S \ SRCS+= setjmp.S _setjmp.S sigsetjmp.S -SRCS+= resumecontext.S swapcontext.S +# Already defined in sys-minix /* __minix */ +#SRCS+= resumecontext.S swapcontext.S # objects built from C sources -SRCS+= bswap64.c _lwp.c makecontext.c +#SRCS+= bswap64.c _lwp.c makecontext.c +# __minix +SRCS+= bswap64.c # Common ieee754 constants and functions SRCS+= infinityf_ieee754.c infinity_ieee754.c diff --git a/lib/nbsd_libc/cdb/cdbr.c b/lib/nbsd_libc/cdb/cdbr.c index a71ac42ae..07300d4e3 100644 --- a/lib/nbsd_libc/cdb/cdbr.c +++ b/lib/nbsd_libc/cdb/cdbr.c @@ -122,7 +122,22 @@ cdbr_open(const char *path, int flags) cdbr->index_size = 4; cdbr->mmap_size = (size_t)sb.st_size; +#ifdef __minix + cdbr->mmap_base = mmap(NULL, cdbr->mmap_size, PROT_READ, MAP_ANON, -1, (off_t)0); + if (cdbr->mmap_base == MAP_FAILED) { + free(cdbr); + return NULL; + } + + if (read(fd, cdbr->mmap_base, cdbr->mmap_size) != cdbr->mmap_size) + { + munmap(cdbr->mmap_base, cdbr->mmap_size); + free(cdbr); + return NULL; + } +#else /* !__minix */ cdbr->mmap_base = mmap(NULL, cdbr->mmap_size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0); +#endif /* __minix */ close(fd); if (cdbr->mmap_base == MAP_FAILED) { diff --git a/lib/nbsd_libc/citrus/citrus_mmap.c b/lib/nbsd_libc/citrus/citrus_mmap.c index 7bbc51800..324a0cc15 100644 --- a/lib/nbsd_libc/citrus/citrus_mmap.c +++ b/lib/nbsd_libc/citrus/citrus_mmap.c @@ -74,12 +74,25 @@ _citrus_map_file(struct _citrus_region * __restrict r, goto error; } +#ifdef __minix + head = mmap(NULL, (size_t)st.st_size, PROT_READ, MAP_ANON, -1, (off_t)0); + if (head == MAP_FAILED) { + ret = errno; + goto error; + } + + if (read(fd, head, st.st_size) != st.st_size) { + ret = errno; + goto error; + } +#else /* !__minix */ head = mmap(NULL, (size_t)st.st_size, PROT_READ, MAP_FILE|MAP_PRIVATE, fd, (off_t)0); if (head == MAP_FAILED) { ret = errno; goto error; } +#endif /* !__minix */ _region_init(r, head, (size_t)st.st_size); error: diff --git a/lib/nbsd_libc/compat-43/Makefile.inc b/lib/nbsd_libc/compat-43/Makefile.inc index 98e5390f3..1dd9b6496 100644 --- a/lib/nbsd_libc/compat-43/Makefile.inc +++ b/lib/nbsd_libc/compat-43/Makefile.inc @@ -4,9 +4,12 @@ # compat-43 sources .PATH: ${ARCHDIR}/compat-43 ${.CURDIR}/compat-43 -SRCS+= creat.c getdtablesize.c gethostid.c \ - killpg.c sethostid.c setpgrp.c \ - setrgid.c setruid.c sigcompat.c +# unsupported by Minix +# gethostid.c sethostid.c setpgrp.c setrgid.c setruid.c sigcompat.c + +SRCS+= creat.c getdtablesize.c \ + killpg.c \ + .if !defined(AUDIT) SRCS+= getwd.c .endif diff --git a/lib/nbsd_libc/db/db/db.c b/lib/nbsd_libc/db/db/db.c index 059183698..fb3155e63 100644 --- a/lib/nbsd_libc/db/db/db.c +++ b/lib/nbsd_libc/db/db/db.c @@ -57,9 +57,15 @@ dbopen(const char *fname, int flags, mode_t mode, DBTYPE type, { #define DB_FLAGS (DB_LOCK | DB_SHMEM | DB_TXN) +#ifdef __minix +#define USE_OPEN_FLAGS \ + (O_CREAT | O_EXCL | O_NONBLOCK | O_RDONLY | \ + O_RDWR | O_TRUNC) +#else /* !__minix */ #define USE_OPEN_FLAGS \ (O_CREAT | O_EXCL | O_EXLOCK | O_NONBLOCK | O_RDONLY | \ O_RDWR | O_SHLOCK | O_TRUNC) +#endif /* __minix */ if ((flags & ~(USE_OPEN_FLAGS | DB_FLAGS)) == 0) switch (type) { diff --git a/lib/nbsd_libc/gdtoa/gdtoa_locks.c b/lib/nbsd_libc/gdtoa/gdtoa_locks.c index 81f521ce8..da449790b 100644 --- a/lib/nbsd_libc/gdtoa/gdtoa_locks.c +++ b/lib/nbsd_libc/gdtoa/gdtoa_locks.c @@ -7,4 +7,6 @@ #include "gdtoaimp.h" +#ifdef _REENTRANT /* !__minix */ mutex_t __gdtoa_locks[2] = { MUTEX_INITIALIZER, MUTEX_INITIALIZER }; +#endif /* _REENTRANT */ diff --git a/lib/nbsd_libc/gen/Makefile.inc b/lib/nbsd_libc/gen/Makefile.inc index 1beaad029..9cce476d9 100644 --- a/lib/nbsd_libc/gen/Makefile.inc +++ b/lib/nbsd_libc/gen/Makefile.inc @@ -2,36 +2,51 @@ # from: @(#)Makefile.inc 8.6 (Berkeley) 5/4/95 # gen sources -.PATH: ${ARCHDIR}/gen ${.CURDIR}/gen +.PATH: ${.CURDIR}/gen/minix ${ARCHDIR}/gen ${.CURDIR}/gen + +# Unsupported by Minix. +# closefrom.c confstr.c extattr.c getdevmajor.c getmntinfo.c \ +# pthread_atfork.c setdomainname.c sethostname.c setproctitle.c \ +# sysctl.c sysctlbyname.c sysctlgetmibinfo.c sysctlnametomib.c \ +# devname.c wait3.c + +# To be ported +# nlist.c nlist_aout.c nlist_coff.c nlist_ecoff.c nlist_elf32.c nlist_elf64.c +# +# Not useful but portable +# disklabel.c +# +# Already in getprogname +# setprogname.c SRCS+= _errno.c alarm.c alphasort.c arc4random.c assert.c basename.c clock.c \ - closedir.c closefrom.c confstr.c ctermid.c ctype_.c daemon.c \ - dehumanize_number.c devname.c dirname.c disklabel.c err.c errx.c \ + closedir.c ctermid.c ctype_.c daemon.c \ + dehumanize_number.c dirname.c err.c errx.c \ errlist.c errno.c execl.c execle.c execlp.c execv.c execvp.c \ - extattr.c fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \ + fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \ fts.c ftw.c getbsize.c getcap.c getcwd.c \ - getdevmajor.c getdomainname.c getgrent.c \ + getdomainname.c getgrent.c \ getgrouplist.c getgroupmembership.c gethostname.c \ - getloadavg.c getlogin.c getmntinfo.c \ + getloadavg.c getlogin.c \ getnetgrent.c getpagesize.c \ getpass.c getprogname.c getpwent.c getttyent.c \ getusershell.c glob.c humanize_number.c initdir.c initgroups.c \ isascii.c isatty.c isctype.c lockf.c nftw.c \ - nice.c nlist.c nlist_aout.c \ - nlist_coff.c nlist_ecoff.c nlist_elf32.c nlist_elf64.c opendir.c \ - pause.c popen.c psignal.c pthread_atfork.c ptree.c pwcache.c \ + nice.c \ + opendir.c \ + pause.c popen.c psignal.c ptree.c pwcache.c \ pw_scan.c raise.c randomid.c rb.c readdir.c rewinddir.c \ - scandir.c seekdir.c setdomainname.c \ - sethostname.c setjmperr.c setmode.c setproctitle.c setprogname.c \ + scandir.c seekdir.c \ + setjmperr.c setmode.c \ shquote.c shquotev.c sighold.c sigignore.c siginterrupt.c \ siglist.c signal.c signame.c sigrelse.c \ sigset.c sigsetops.c sleep.c \ - stringlist.c sysconf.c sysctl.c sysctlbyname.c sysctlgetmibinfo.c \ - sysctlnametomib.c syslog.c telldir.c time.c \ + stringlist.c sysconf.c \ + syslog.c telldir.c time.c \ times.c toascii.c tolower_.c ttyname.c ttyslot.c \ toupper_.c ualarm.c ulimit.c uname.c unvis.c usleep.c utime.c utmp.c \ - utmpx.c valloc.c vis.c wait.c wait3.c waitpid.c warn.c warnx.c \ - vwarn.c vwarnx.c verr.c verrx.c wordexp.c + utmpx.c valloc.c vis.c warn.c warnx.c \ + vwarn.c vwarnx.c verr.c verrx.c wait.c waitpid.c wordexp.c # indirect reference stubs, to be removed soon. SRCS+= _err.c _errx.c \ @@ -163,7 +178,7 @@ CPPFLAGS.isctype.c+= -I${LIBCDIR}/locale CPPFLAGS.tolower_.c+= -I${LIBCDIR}/locale CPPFLAGS.toupper_.c+= -I${LIBCDIR}/locale -errlist.c: errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h +errlist.c: errlist-minix.awk ${NETBSDSRCDIR}/nbsd_include/sys/errno.h ${TOOL_AWK} -f ${.ALLSRC} > ${.TARGET} CLEANFILES+= errlist.c diff --git a/lib/nbsd_libc/gen/_verr.c b/lib/nbsd_libc/gen/_verr.c index 1baab5164..b0e2013ba 100644 --- a/lib/nbsd_libc/gen/_verr.c +++ b/lib/nbsd_libc/gen/_verr.c @@ -13,6 +13,7 @@ __RCSID("$NetBSD: _verr.c,v 1.10 2005/09/13 01:44:09 christos Exp $"); #if defined(__indr_reference) __indr_reference(_verr, verr) #else +#include __dead void _verr(int, const char *, _BSD_VA_LIST_); diff --git a/lib/nbsd_libc/gen/_verrx.c b/lib/nbsd_libc/gen/_verrx.c index 0c161afab..6e3fa6bc0 100644 --- a/lib/nbsd_libc/gen/_verrx.c +++ b/lib/nbsd_libc/gen/_verrx.c @@ -13,6 +13,7 @@ __RCSID("$NetBSD: _verrx.c,v 1.10 2005/09/13 01:44:09 christos Exp $"); #if defined(__indr_reference) __indr_reference(_verrx, verrx) #else +#include __dead void _verrx(int, const char *, _BSD_VA_LIST_); diff --git a/lib/nbsd_libc/gen/_vwarn.c b/lib/nbsd_libc/gen/_vwarn.c index 76cef1c60..c843a8ca8 100644 --- a/lib/nbsd_libc/gen/_vwarn.c +++ b/lib/nbsd_libc/gen/_vwarn.c @@ -13,6 +13,7 @@ __RCSID("$NetBSD: _vwarn.c,v 1.10 2005/09/13 01:44:09 christos Exp $"); #if defined(__indr_reference) __indr_reference(_vwarn, vwarn) #else +#include void _vwarn(const char *, _BSD_VA_LIST_); diff --git a/lib/nbsd_libc/gen/_vwarnx.c b/lib/nbsd_libc/gen/_vwarnx.c index 37cdeaae3..9379f46c4 100644 --- a/lib/nbsd_libc/gen/_vwarnx.c +++ b/lib/nbsd_libc/gen/_vwarnx.c @@ -13,6 +13,7 @@ __RCSID("$NetBSD: _vwarnx.c,v 1.10 2005/09/13 01:44:09 christos Exp $"); #if defined(__indr_reference) __indr_reference(_vwarnx, vwarnx) #else +#include void _vwarnx(const char *, _BSD_VA_LIST_); diff --git a/lib/nbsd_libc/gen/_warn.c b/lib/nbsd_libc/gen/_warn.c index 7fbed081e..cec6cbaf6 100644 --- a/lib/nbsd_libc/gen/_warn.c +++ b/lib/nbsd_libc/gen/_warn.c @@ -13,7 +13,6 @@ __RCSID("$NetBSD: _warn.c,v 1.10 2005/09/13 01:44:09 christos Exp $"); #if defined(__indr_reference) __indr_reference(_warn, warn) #else - #include void _vwarn(const char *, _BSD_VA_LIST_); @@ -24,7 +23,7 @@ warn(const char *fmt, ...) va_list ap; va_start(ap, fmt); - _vwarn(eval, fmt, ap); + _vwarn(fmt, ap); va_end(ap); } #endif diff --git a/lib/nbsd_libc/gen/_warnx.c b/lib/nbsd_libc/gen/_warnx.c index a5fec8ebb..2a892d413 100644 --- a/lib/nbsd_libc/gen/_warnx.c +++ b/lib/nbsd_libc/gen/_warnx.c @@ -24,7 +24,7 @@ warnx(const char *fmt, ...) va_list ap; va_start(ap, fmt); - _vwarnx(eval, fmt, ap); + _vwarnx(fmt, ap); va_end(ap); } diff --git a/lib/nbsd_libc/gen/closedir.c b/lib/nbsd_libc/gen/closedir.c index 432019792..d3da16391 100644 --- a/lib/nbsd_libc/gen/closedir.c +++ b/lib/nbsd_libc/gen/closedir.c @@ -38,6 +38,11 @@ __RCSID("$NetBSD: closedir.c,v 1.16 2010/09/26 02:26:59 yamt Exp $"); #endif #endif /* LIBC_SCCS and not lint */ +#ifdef __minix +/* NetBSD BUG: reentrant.h defines includes. */ +#include +#endif /* !__minix */ + #include "namespace.h" #include "reentrant.h" #include "extern.h" diff --git a/lib/nbsd_libc/gen/errlist-minix.awk b/lib/nbsd_libc/gen/errlist-minix.awk new file mode 100644 index 000000000..1b3f7f27a --- /dev/null +++ b/lib/nbsd_libc/gen/errlist-minix.awk @@ -0,0 +1,113 @@ +#! /usr/bin/awk -f +# $NetBSD: errlist.awk,v 1.4 2010/12/16 22:52:32 joerg Exp $ +# +# Copyright (c) 2010 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. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the NetBSD +# Foundation, Inc. and its contributors. +# 4. Neither the name of The NetBSD Foundation 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 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. +# +function tabs(desc) { + l = length(desc) + 3; + if (concat) + l++ + if (l < 16) + return "\t\t\t\t"; + else if (l < 24) + return "\t\t\t"; + else if (l < 32) + return "\t\t"; + else if (l < 40) + return "\t"; + else + return ""; +} +function perror(name, number, desc) +{ + if (!concat) { + printf("\t[%d] = \"%s\",%s/* %d - %s */\n", number, desc, tabs(desc), number, name); + } else { + offsets[number] = offset; + offset += length(desc) + 1; + printf("\t[%d] = \"%s\\0\"%s/* %d - %s */\n", number, desc, tabs(desc), number, name); + } +} +BEGIN { + printf("/* Automatically generated file; do not edit */\n"); + printf("#include \n"); + printf("__RCSID(\"$NetBSD: errlist.awk,v 1.4 2010/12/16 22:52:32 joerg Exp $\");\n"); + printf("#include \n"); + if (!concat) { + printf("static const char *const errlist[] = {\n"); + } else { + printf("static const char concat_errlist[] = {\n"); + offset = 0; + } + perror("ENOERROR", 0, "Undefined error: 0"); + errno = 1; +} +/^#define/ { + name = $2; + if (name == "ELAST") + next; + number = $4; + if (number < 0 || number == "EAGAIN") + next; + desc = $0; + i1 = index(desc, "/*") + 3; + l = length(desc); + desc = substr(desc, i1, l - i1 - 2); +# if (number != errno) { +# printf("error number mismatch %d != %d\n", number, errno) > "/dev/stderr"; +# exit(1); +# } + perror(name, number, desc); + errno=number; +} +END { + printf("};\n\n"); + if (!concat) { + printf("const int sys_nerr = sizeof(errlist) / sizeof(errlist[0]);\n"); + printf("const char * const *sys_errlist = errlist;\n"); + } else { + printf("static const int concat_nerr = %d;\n", errno); + printf("static const unsigned short concat_offset[] = {\n"); + offsets[errno++] = offset; + for (j = 0; j < errno; j++) { + printf("\t%d,\n", offsets[j]); + } + printf("};\n"); + if (offset > 65535) { + printf("Total errlist size doesn't fit into 16bit\n") > "/dev/stderr"; + exit(1); + } + } +} diff --git a/lib/nbsd_libc/gen/fts.c b/lib/nbsd_libc/gen/fts.c index 1c3bc733e..a6e2cb1e0 100644 --- a/lib/nbsd_libc/gen/fts.c +++ b/lib/nbsd_libc/gen/fts.c @@ -56,8 +56,10 @@ __RCSID("$NetBSD: fts.c,v 1.40 2009/11/02 17:17:34 stacktic Exp $"); #include #if ! HAVE_NBTOOL_CONFIG_H +#ifndef __minix #define HAVE_STRUCT_DIRENT_D_NAMLEN #endif +#endif static FTSENT *fts_alloc(FTS *, const char *, size_t); static FTSENT *fts_build(FTS *, int); diff --git a/lib/nbsd_libc/gen/getgrent.c b/lib/nbsd_libc/gen/getgrent.c index 9e2b6957f..91598165c 100644 --- a/lib/nbsd_libc/gen/getgrent.c +++ b/lib/nbsd_libc/gen/getgrent.c @@ -481,7 +481,11 @@ static int _files_getgrgid(void *nsrv, void *nscb, va_list ap) { struct group **retval = va_arg(ap, struct group **); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); +#endif int rv, rerror; @@ -506,7 +510,11 @@ static int _files_getgrgid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); +#endif struct group *grp = va_arg(ap, struct group *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -801,8 +809,11 @@ static int _dns_getgrgid(void *nsrv, void *nscb, va_list ap) { struct group **retval = va_arg(ap, struct group **); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); - +#endif int rv, rerror; _DIAGASSERT(retval != NULL); @@ -825,7 +836,11 @@ static int _dns_getgrgid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); +#endif struct group *grp = va_arg(ap, struct group *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -1148,8 +1163,11 @@ static int _nis_getgrgid(void *nsrv, void *nscb, va_list ap) { struct group **retval = va_arg(ap, struct group **); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); - +#endif int rv, rerror; _DIAGASSERT(retval != NULL); @@ -1172,7 +1190,11 @@ static int _nis_getgrgid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); +#endif struct group *grp = va_arg(ap, struct group *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -1408,7 +1430,7 @@ __grscan_compat(int *retval, struct group *grp, char *buffer, size_t buflen, crv = nsdispatch(NULL, compatgiddtab, NSDB_GROUP_COMPAT, "getgrgid_r", __nsdefaultnis, - &cretval, gid, + &cretval, (int)gid, &cgrp, filebuf, sizeof(filebuf), &cgrpres); } if (crv != NS_SUCCESS) { /* not found */ @@ -1610,7 +1632,7 @@ static int _compat_getgrgid(void *nsrv, void *nscb, va_list ap) { struct group **retval = va_arg(ap, struct group **); - gid_t gid = va_arg(ap, gid_t); + gid_t gid = va_arg(ap, int); int rv, rerror; @@ -1635,7 +1657,11 @@ static int _compat_getgrgid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + gid_t gid = (gid_t)va_arg(ap, int); +#else gid_t gid = va_arg(ap, gid_t); +#endif struct group *grp = va_arg(ap, struct group *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -1733,7 +1759,6 @@ getgrent(void) NS_COMPAT_CB(_compat_getgrent, NULL) NS_NULL_CB }; - mutex_lock(&__grmutex); rv = nsdispatch(NULL, dtab, NSDB_GROUP, "getgrent", __nsdefaultcompat, &retval); @@ -1785,7 +1810,7 @@ getgrgid(gid_t gid) mutex_lock(&__grmutex); rv = nsdispatch(NULL, dtab, NSDB_GROUP, "getgrgid", __nsdefaultcompat, - &retval, gid); + &retval, (int)gid); mutex_unlock(&__grmutex); return (rv == NS_SUCCESS) ? retval : NULL; } @@ -1812,7 +1837,7 @@ getgrgid_r(gid_t gid, struct group *grp, char *buffer, size_t buflen, retval = 0; mutex_lock(&__grmutex); rv = nsdispatch(NULL, dtab, NSDB_GROUP, "getgrgid_r", __nsdefaultcompat, - &retval, gid, grp, buffer, buflen, result); + &retval, (int)gid, grp, buffer, buflen, result); mutex_unlock(&__grmutex); switch (rv) { case NS_SUCCESS: diff --git a/lib/nbsd_libc/gen/getgroupmembership.c b/lib/nbsd_libc/gen/getgroupmembership.c index 78687c0a5..cc1a6c074 100644 --- a/lib/nbsd_libc/gen/getgroupmembership.c +++ b/lib/nbsd_libc/gen/getgroupmembership.c @@ -101,7 +101,11 @@ _files_getgroupmembership(void *retval, void *cb_data, va_list ap) { int *result = va_arg(ap, int *); const char *uname = va_arg(ap, const char *); +#ifdef __minix + gid_t agroup = (gid_t)va_arg(ap, int); +#else gid_t agroup = va_arg(ap, gid_t); +#endif gid_t *groups = va_arg(ap, gid_t *); int maxgrp = va_arg(ap, int); int *groupc = va_arg(ap, int *); @@ -144,7 +148,11 @@ _dns_getgroupmembership(void *retval, void *cb_data, va_list ap) { int *result = va_arg(ap, int *); const char *uname = va_arg(ap, const char *); +#ifdef __minix + gid_t agroup = (gid_t)va_arg(ap, int); +#else gid_t agroup = va_arg(ap, gid_t); +#endif gid_t *groups = va_arg(ap, gid_t *); int maxgrp = va_arg(ap, int); int *groupc = va_arg(ap, int *); @@ -237,7 +245,11 @@ _nis_getgroupmembership(void *retval, void *cb_data, va_list ap) { int *result = va_arg(ap, int *); const char *uname = va_arg(ap, const char *); +#ifdef __minix + gid_t agroup = (gid_t)va_arg(ap, int); +#else gid_t agroup = va_arg(ap, gid_t); +#endif gid_t *groups = va_arg(ap, gid_t *); int maxgrp = va_arg(ap, int); int *groupc = va_arg(ap, int *); @@ -305,8 +317,12 @@ _compat_ggm_search(void *cookie, struct group **groupres) crv = nsdispatch(NULL, dtab, NSDB_GROUP_COMPAT, "getgroupmembership", __nsdefaultnis, +#ifdef __minix + &rerror, cp->uname, (int)cp->agroup, cp->groups, cp->maxgrp, cp->groupc); +#else &rerror, cp->uname, cp->agroup, cp->groups, cp->maxgrp, cp->groupc); +#endif if (crv == NS_SUCCESS) crv = NS_NOTFOUND; /* indicate "no more +: entries" */ @@ -319,7 +335,11 @@ _compat_getgroupmembership(void *retval, void *cb_data, va_list ap) { int *result = va_arg(ap, int *); const char *uname = va_arg(ap, const char *); +#ifdef __minix + gid_t agroup = (gid_t)va_arg(ap, int); +#else gid_t agroup = va_arg(ap, gid_t); +#endif gid_t *groups = va_arg(ap, gid_t *); int maxgrp = va_arg(ap, int); int *groupc = va_arg(ap, int *); @@ -395,7 +415,11 @@ getgroupmembership(const char *uname, gid_t agroup, */ (void) nsdispatch(NULL, dtab, NSDB_GROUP, "getgroupmembership", __nsdefaultcompat, +#ifdef __minix + &rerror, uname, (int)agroup, groups, maxgrp, groupc); +#else &rerror, uname, agroup, groups, maxgrp, groupc); +#endif mutex_unlock(&__grmutex); if (*groupc > maxgrp) /* too many groups found */ diff --git a/lib/nbsd_libc/gen/getlogin.c b/lib/nbsd_libc/gen/getlogin.c index b0abc58d4..3aeee3077 100644 --- a/lib/nbsd_libc/gen/getlogin.c +++ b/lib/nbsd_libc/gen/getlogin.c @@ -78,7 +78,9 @@ __RCSID("$NetBSD: getlogin.c,v 1.15 2009/01/11 02:46:27 christos Exp $"); #ifdef __weak_alias __weak_alias(getlogin,_getlogin) __weak_alias(getlogin_r,_getlogin_r) +#ifndef __minix __weak_alias(setlogin,_setlogin) +#endif /* !__minix */ #endif int __logname_valid; /* known to setlogin() */ @@ -134,6 +136,7 @@ getlogin_r(char *name, size_t namelen) return (rv); } +#ifndef __minix int setlogin(const char *name) { @@ -144,3 +147,4 @@ setlogin(const char *name) return (retval); } +#endif diff --git a/lib/nbsd_libc/gen/getpwent.c b/lib/nbsd_libc/gen/getpwent.c index c49f5e2de..fca7f27d2 100644 --- a/lib/nbsd_libc/gen/getpwent.c +++ b/lib/nbsd_libc/gen/getpwent.c @@ -671,7 +671,11 @@ static int _files_getpwuid(void *nsrv, void *nscb, va_list ap) { struct passwd **retval = va_arg(ap, struct passwd **); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif int rv, rerror; @@ -696,7 +700,11 @@ static int _files_getpwuid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif struct passwd *pw = va_arg(ap, struct passwd *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -992,7 +1000,11 @@ static int _dns_getpwuid(void *nsrv, void *nscb, va_list ap) { struct passwd **retval = va_arg(ap, struct passwd **); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif int rv, rerror; @@ -1019,7 +1031,11 @@ static int _dns_getpwuid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif struct passwd *pw = va_arg(ap, struct passwd *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -1508,7 +1524,11 @@ static int _nis_getpwuid(void *nsrv, void *nscb, va_list ap) { struct passwd **retval = va_arg(ap, struct passwd **); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif int rv, rerror; @@ -1534,7 +1554,11 @@ static int _nis_getpwuid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif struct passwd *pw = va_arg(ap, struct passwd *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -1896,9 +1920,16 @@ _passwdcompat_pwscan(struct passwd *pw, char *buffer, size_t buflen, &crv, name, pw, buffer, buflen, &cpw); break; case _PW_KEYBYUID: +#ifdef __minix + rv = nsdispatch(NULL, compatuiddtab, + NSDB_PASSWD_COMPAT, "getpwuid_r", __nsdefaultnis, + &crv, (int)uid, pw, buffer, buflen, &cpw); +#else rv = nsdispatch(NULL, compatuiddtab, NSDB_PASSWD_COMPAT, "getpwuid_r", __nsdefaultnis, &crv, uid, pw, buffer, buflen, &cpw); +#endif + break; default: abort(); @@ -2301,7 +2332,11 @@ static int _compat_getpwuid(void *nsrv, void *nscb, va_list ap) { struct passwd **retval = va_arg(ap, struct passwd **); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif int rv, rerror; @@ -2326,7 +2361,11 @@ static int _compat_getpwuid_r(void *nsrv, void *nscb, va_list ap) { int *retval = va_arg(ap, int *); +#ifdef __minix + uid_t uid = (uid_t)va_arg(ap, int); +#else uid_t uid = va_arg(ap, uid_t); +#endif struct passwd *pw = va_arg(ap, struct passwd *); char *buffer = va_arg(ap, char *); size_t buflen = va_arg(ap, size_t); @@ -2482,8 +2521,13 @@ getpwuid(uid_t uid) }; mutex_lock(&_pwmutex); +#ifdef __minix + rv = nsdispatch(NULL, dtab, NSDB_PASSWD, "getpwuid", __nsdefaultcompat, + &retval, (int)uid); +#else rv = nsdispatch(NULL, dtab, NSDB_PASSWD, "getpwuid", __nsdefaultcompat, &retval, uid); +#endif mutex_unlock(&_pwmutex); return (rv == NS_SUCCESS) ? retval : NULL; } @@ -2509,8 +2553,14 @@ getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer, size_t buflen, *result = NULL; retval = 0; mutex_lock(&_pwmutex); +#ifdef __minix + r = nsdispatch(NULL, dtab, NSDB_PASSWD, "getpwuid_r", __nsdefaultcompat, + &retval, (int)uid, pwd, buffer, buflen, result); +#else r = nsdispatch(NULL, dtab, NSDB_PASSWD, "getpwuid_r", __nsdefaultcompat, &retval, uid, pwd, buffer, buflen, result); +#endif + mutex_unlock(&_pwmutex); switch (r) { case NS_SUCCESS: diff --git a/lib/nbsd_libc/gen/gr_private.h b/lib/nbsd_libc/gen/gr_private.h index 560ab9265..ac2c12222 100644 --- a/lib/nbsd_libc/gen/gr_private.h +++ b/lib/nbsd_libc/gen/gr_private.h @@ -39,13 +39,13 @@ #define _GROUP_COMPAT /* "group" defaults to compat, so always provide it */ - +#ifndef __minix /* should be _REENTRANT */ /* * mutex to serialize the public group(5) functions use of the * back-end implementations, which may not be reentrant. */ extern mutex_t __grmutex; - +#endif /* * files methods */ diff --git a/lib/nbsd_libc/gen/initdir.c b/lib/nbsd_libc/gen/initdir.c index a4b9e1e75..66884b0b3 100644 --- a/lib/nbsd_libc/gen/initdir.c +++ b/lib/nbsd_libc/gen/initdir.c @@ -34,7 +34,16 @@ __RCSID("$NetBSD: initdir.c,v 1.1 2010/09/26 02:26:59 yamt Exp $"); #endif /* LIBC_SCCS and not lint */ + + #include "namespace.h" + +#ifdef __minix +/* NetBSD BUG on !_REENTRANT */ +#include +#include +#endif + #include "reentrant.h" #include "extern.h" @@ -221,9 +230,11 @@ retry: xp = dp; else dp->d_fileno = 0; +#ifndef __minix if (dp->d_type == DT_WHT && (flags & DTF_HIDEW)) dp->d_fileno = 0; +#endif } free(dpv); diff --git a/lib/nbsd_libc/gen/opendir.c b/lib/nbsd_libc/gen/opendir.c index 7bb5997b3..1d750470f 100644 --- a/lib/nbsd_libc/gen/opendir.c +++ b/lib/nbsd_libc/gen/opendir.c @@ -40,6 +40,12 @@ __RCSID("$NetBSD: opendir.c,v 1.37 2010/09/26 02:26:59 yamt Exp $"); #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#include +#endif + #include "extern.h" #include @@ -122,6 +128,12 @@ __opendir_common(int fd, const char *name, int flags) * Tweak flags for the underlying filesystem. */ +#ifdef __minix + if (fstatvfs(fd, &sfb) < 0) + goto error; + /* MOUNT_UNION and MOUNT_NFS not supported */ + flags &= ~DTF_NODUP; +#else if (fstatvfs1(fd, &sfb, ST_NOWAIT) < 0) goto error; if ((flags & DTF_NODUP) != 0) { @@ -136,6 +148,7 @@ __opendir_common(int fd, const char *name, int flags) if (!strncmp(sfb.f_fstypename, MOUNT_NFS, sizeof(sfb.f_fstypename))) { flags |= __DTF_READALL | __DTF_RETRY_ON_BADCOOKIE; } +#endif dirp->dd_flags = flags; error = _initdir(dirp, fd, name); diff --git a/lib/nbsd_libc/gen/readdir.c b/lib/nbsd_libc/gen/readdir.c index 13c3eb034..c2b1e3a1c 100644 --- a/lib/nbsd_libc/gen/readdir.c +++ b/lib/nbsd_libc/gen/readdir.c @@ -40,7 +40,14 @@ __RCSID("$NetBSD: readdir.c,v 1.25 2010/09/16 02:38:50 yamt Exp $"); #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#include +#endif + #include "extern.h" + #include #include @@ -81,8 +88,10 @@ _readdir_unlocked(DIR *dirp, int skipdeleted) dirp->dd_loc += dp->d_reclen; if (dp->d_ino == 0 && skipdeleted) continue; +#ifndef __minix if (dp->d_type == DT_WHT && (dirp->dd_flags & DTF_HIDEW)) continue; +#endif return (dp); } } diff --git a/lib/nbsd_libc/gen/rewinddir.c b/lib/nbsd_libc/gen/rewinddir.c index a16685247..ed4195808 100644 --- a/lib/nbsd_libc/gen/rewinddir.c +++ b/lib/nbsd_libc/gen/rewinddir.c @@ -40,6 +40,11 @@ __RCSID("$NetBSD: rewinddir.c,v 1.13 2010/09/26 02:26:59 yamt Exp $"); #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#endif + #include "extern.h" #include diff --git a/lib/nbsd_libc/gen/scandir.c b/lib/nbsd_libc/gen/scandir.c index d89442936..74af88f77 100644 --- a/lib/nbsd_libc/gen/scandir.c +++ b/lib/nbsd_libc/gen/scandir.c @@ -130,9 +130,13 @@ scandir(const char *dirname, struct dirent ***namelist, goto bad2; p->d_fileno = d->d_fileno; p->d_reclen = d->d_reclen; +#ifndef __minix p->d_type = d->d_type; p->d_namlen = d->d_namlen; (void)memmove(p->d_name, d->d_name, (size_t)(p->d_namlen + 1)); +#else + (void)memmove(p->d_name, d->d_name, (size_t)(strlen(d->d_name) + 1)); +#endif names[nitems++] = p; } (void)closedir(dirp); diff --git a/lib/nbsd_libc/gen/seekdir.c b/lib/nbsd_libc/gen/seekdir.c index e70eba635..1ace9798b 100644 --- a/lib/nbsd_libc/gen/seekdir.c +++ b/lib/nbsd_libc/gen/seekdir.c @@ -40,6 +40,9 @@ __RCSID("$NetBSD: seekdir.c,v 1.14 2006/05/17 20:36:50 christos Exp $"); #include "namespace.h" #include "reentrant.h" +#ifdef __minix +#include +#endif #include "extern.h" #include diff --git a/lib/nbsd_libc/gen/syslog.c b/lib/nbsd_libc/gen/syslog.c index 6f961087e..39b4eb64e 100644 --- a/lib/nbsd_libc/gen/syslog.c +++ b/lib/nbsd_libc/gen/syslog.c @@ -492,7 +492,9 @@ connectlog_r(struct syslog_data *data) /* AF_UNIX address of local logger */ static const struct sockaddr_un sun = { .sun_family = AF_LOCAL, +#ifndef __minix .sun_len = sizeof(sun), +#endif .sun_path = _PATH_LOG, }; diff --git a/lib/nbsd_libc/gen/telldir.c b/lib/nbsd_libc/gen/telldir.c index f631642ac..e45351c53 100644 --- a/lib/nbsd_libc/gen/telldir.c +++ b/lib/nbsd_libc/gen/telldir.c @@ -40,6 +40,11 @@ __RCSID("$NetBSD: telldir.c,v 1.19 2008/05/04 18:53:26 tonnerre Exp $"); #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#endif + #include "extern.h" #include diff --git a/lib/nbsd_libc/gen/ttyname.c b/lib/nbsd_libc/gen/ttyname.c index 6002c1e2f..91d648305 100644 --- a/lib/nbsd_libc/gen/ttyname.c +++ b/lib/nbsd_libc/gen/ttyname.c @@ -72,7 +72,9 @@ ttyname_r(int fd, char *buf, size_t len) mode_t type; dev_t dev; } bkey; +#ifndef __minix struct ptmget ptm; +#endif #define DEVSZ (sizeof(_PATH_DEV) - 1) _DIAGASSERT(fd != -1); @@ -80,7 +82,7 @@ ttyname_r(int fd, char *buf, size_t len) if (len <= DEVSZ) { return ERANGE; } - +#ifndef __minix /* If it is a pty, deal with it quickly */ if (ioctl(fd, TIOCPTSNAME, &ptm) != -1) { if (strlcpy(buf, ptm.sn, len) >= len) { @@ -88,6 +90,8 @@ ttyname_r(int fd, char *buf, size_t len) } return 0; } +#endif + /* Must be a terminal. */ if (tcgetattr(fd, &ttyb) == -1) return errno; @@ -136,7 +140,11 @@ oldttyname(const struct stat *sb, char *buf, size_t len) while ((dirp = readdir(dp)) != NULL) { if (dirp->d_fileno != sb->st_ino) continue; +#ifdef __minix + dlen = strlen(dirp->d_name); +#else dlen = dirp->d_namlen + 1; +#endif if (len - DEVSZ <= dlen) { /* * XXX: we return an error if *any* entry does not diff --git a/lib/nbsd_libc/gen/ttyslot.c b/lib/nbsd_libc/gen/ttyslot.c index 33ac4540a..3d1d2b533 100644 --- a/lib/nbsd_libc/gen/ttyslot.c +++ b/lib/nbsd_libc/gen/ttyslot.c @@ -59,14 +59,20 @@ ttyslot(void) char *p; int cnt; char *name; +#ifndef __minix struct ptmget ptm; +#endif setttyent(); for (cnt = 0; cnt < 3; ++cnt) { +#ifndef __minix if (ioctl(cnt, TIOCPTSNAME, &ptm) != -1) { ispty = 1; name = ptm.sn; } else if ((name = ttyname(cnt)) != NULL) { +#else + if ((name = ttyname(cnt)) != NULL) { +#endif ispty = 0; } else continue; diff --git a/lib/nbsd_libc/gen/ulimit.c b/lib/nbsd_libc/gen/ulimit.c index ba61a22f9..30a7ca498 100644 --- a/lib/nbsd_libc/gen/ulimit.c +++ b/lib/nbsd_libc/gen/ulimit.c @@ -54,12 +54,14 @@ ulimit(int cmd, ...) if (getrlimit(RLIMIT_FSIZE, &rlimit) == 0) result = (long int)(rlimit.rlim_cur / 512); break; +#ifndef __minix case UL_SETFSIZE: new_limit = va_arg(ap, long int); rlimit.rlim_cur = rlimit.rlim_max = (rlim_t)new_limit * 512; if (setrlimit(RLIMIT_FSIZE, &rlimit) == 0) result = new_limit; break; +#endif default: errno = EINVAL; } diff --git a/lib/nbsd_libc/gen/utmpx.c b/lib/nbsd_libc/gen/utmpx.c index 779d56512..faa7ea7d7 100644 --- a/lib/nbsd_libc/gen/utmpx.c +++ b/lib/nbsd_libc/gen/utmpx.c @@ -336,16 +336,32 @@ updwtmpx(const char *file, const struct utmpx *utx) _DIAGASSERT(file != NULL); _DIAGASSERT(utx != NULL); +#ifndef __minix fd = open(file, O_WRONLY|O_APPEND|O_SHLOCK); +#else + fd = open(file, O_WRONLY|O_APPEND); +#endif if (fd == -1) { +#ifndef __minix if ((fd = open(file, O_CREAT|O_WRONLY|O_EXLOCK, 0644)) == -1) return -1; +#else + if ((fd = open(file, O_CREAT|O_WRONLY, 0644)) < 0) + return -1; + if (flock(fd, LOCK_EX) < 0) + return -1; +#endif (void)memset(&ut, 0, sizeof(ut)); ut.ut_type = SIGNATURE; (void)memcpy(ut.ut_user, vers, sizeof(vers)); if (write(fd, &ut, sizeof(ut)) == -1) goto failed; + } else { +#ifdef __minix + if (flock(fd, LOCK_SH) < 0 ) + return -1; +#endif } if (write(fd, utx, sizeof(*utx)) == -1) goto failed; @@ -360,7 +376,6 @@ updwtmpx(const char *file, const struct utmpx *utx) return -1; } - int utmpxname(const char *fname) { @@ -425,10 +440,18 @@ getlastlogx(const char *fname, uid_t uid, struct lastlogx *ll) _DIAGASSERT(fname != NULL); _DIAGASSERT(ll != NULL); +#ifdef __minix + db = dbopen(fname, O_RDONLY, 0, DB_HASH, NULL); +#else db = dbopen(fname, O_RDONLY|O_SHLOCK, 0, DB_HASH, NULL); +#endif if (db == NULL) return NULL; +#ifdef __minix + if (flock(db->fd(db), LOCK_SH) < 0) + return NULL; +#endif key.data = &uid; key.size = sizeof(uid); @@ -464,11 +487,20 @@ updlastlogx(const char *fname, uid_t uid, struct lastlogx *ll) _DIAGASSERT(fname != NULL); _DIAGASSERT(ll != NULL); +#ifndef __minix db = dbopen(fname, O_RDWR|O_CREAT|O_EXLOCK, 0644, DB_HASH, NULL); +#else + db = dbopen(fname, O_RDWR|O_CREAT, 0644, DB_HASH, NULL); +#endif if (db == NULL) return -1; +#ifdef __minix + if (flock(db->fd(db), LOCK_EX) < 0) + return -1; +#endif + key.data = &uid; key.size = sizeof(uid); data.data = ll; diff --git a/lib/nbsd_libc/gmon/gmon.c b/lib/nbsd_libc/gmon/gmon.c index 01d017c49..f420df127 100644 --- a/lib/nbsd_libc/gmon/gmon.c +++ b/lib/nbsd_libc/gmon/gmon.c @@ -373,8 +373,10 @@ _mcleanup(void) struct gmonparam *p = &_gmonparam; struct gmonhdr gmonhdr, *hdr; struct clockinfo clockinfo; +#ifndef __minix int mib[2]; size_t size; +#endif char *profdir; const char *proffile; char buf[PATH_MAX]; @@ -396,7 +398,9 @@ _mcleanup(void) if (p->state == GMON_PROF_ERROR) warnx("%s: tos overflow", __func__); - +#ifdef __minix + clockinfo.profhz = sysconf(_SC_CLK_TCK); +#else /* !__minix */ size = sizeof(clockinfo); mib[0] = CTL_KERN; mib[1] = KERN_CLOCKRATE; @@ -411,6 +415,7 @@ _mcleanup(void) else clockinfo.profhz = hertz(); } +#endif /* !__minix */ moncontrol(0); @@ -509,6 +514,7 @@ moncontrol(int mode) } } +#ifndef __minix /* * discover the tick frequency of the machine * if something goes wrong, we return 0, an impossible hertz. @@ -542,3 +548,4 @@ out: (void)timer_delete(t); return rv; } +#endif /* !__minix */ diff --git a/lib/nbsd_libc/include/env.h b/lib/nbsd_libc/include/env.h index 20b6bf95a..7858f9a42 100644 --- a/lib/nbsd_libc/include/env.h +++ b/lib/nbsd_libc/include/env.h @@ -56,7 +56,7 @@ __writelockenv(void) } static __inline bool -__unlocklockenv(void) +__unlockenv(void) { return true; } diff --git a/lib/nbsd_libc/include/namespace.h b/lib/nbsd_libc/include/namespace.h index c4bb6bfc0..6b3e1bf24 100644 --- a/lib/nbsd_libc/include/namespace.h +++ b/lib/nbsd_libc/include/namespace.h @@ -4,7 +4,7 @@ * Copyright (c) 1997-2004 The NetBSD Foundation, Inc. * All rights reserved. * - * Redistribution and use in source and binary forms, with or without + * Redistribution and use in source and binary forms, ith or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright @@ -47,7 +47,9 @@ #define fork _fork #define fseeko _fseeko #define ftello _ftello +#ifndef __minix #define getcontext _getcontext +#endif /* !__minix */ #define getenv_r _getenv_r #define imaxabs _imaxabs #define imaxdiv _imaxdiv @@ -530,7 +532,13 @@ #define seed48 _seed48 #define seekdir _seekdir #define select _select +#ifdef __minix +/* '_send' unfortunately collides with Minix IPC's _send function. + * This solution is fragile, a proper renaming of Minix IPCs should + * be done insted. */ +#else /* !__minix */ #define send _send +#endif /* !__minix */ #define setdomainname _setdomainname #define setenv _setenv #define setfsent _setfsent @@ -845,6 +853,80 @@ #define xprtlist_lock __rpc_xprtlist_lock #define __learn_tree ___learn_tree + +#ifdef __minix +#define _exit __exit +#define access _access +#define bind _bind +#define chdir _chdir +#define chmod _chmod +#define chown _chown +#define chroot _chroot +#define close _close +#define dup _dup +#define dup2 _dup2 +#define execve _execve +#define fchdir _fchdir +#define fchmod _fchmod +#define fchown _fchown +#define fcntl _fcntl +#define flock _flock +#define fstat _fstat +#define fsync _fsync +#define fpathconf _fpathconf +#define getegid _getegid +#define geteuid _geteuid +#define getgroups _getgroups +#define getpid _getpid +#define getpgrp _getpgrp +#define getppid _getppid +#define gettimeofday _gettimeofday +#define getgid _getgid +#define getuid _getuid +#define ioctl _ioctl +#define link _link +#define lstat _lstat +#define mount _mount +#define mkdir _mkdir +#define mkfifo _mkfifo +#define mknod _mknod +#define munmap _munmap +#define munmap_text _munmap_text +#define open _open +#define pathconf _pathconf +#define ptrace _ptrace +#define readv _readv +#define rmdir _rmdir +#define setegid _setegid +#define seteuid _seteuid +#define setgid _setgid +#define setgroups _setgroups +#define setprogname _setprogname +#define setsid _setsid +#define setuid _setuid +#define shmat _shmat +#define shmdt _shmdt +#define shmget _shmget +#define sigreturn _sigreturn +#define socket _socket +#define socketpair _socketpair +#define symlink _symlink +#define sync _sync +#define stat(a, b) _stat(a, b) +#define stime _stime +#define umask _umask +#define umount _umount +#define umount2 _umount2 +#define unlink _unlink +#define vm_remap _vm_remap +#define vm_unmap _vm_unmap +#define vm_getphys _vm_getphys +#define vm_getrefcount _vm_getrefcount +#define truncate _truncate +#define write _write +#define writev _writev +#endif /* __minix */ + #endif /* __weak_alias */ #endif /* !__lint__ */ diff --git a/lib/nbsd_libc/libcincludes.mk b/lib/nbsd_libc/libcincludes.mk index 66afcc3b9..c936a440d 100644 --- a/lib/nbsd_libc/libcincludes.mk +++ b/lib/nbsd_libc/libcincludes.mk @@ -4,11 +4,11 @@ # inside libc's include tree. .if defined(LIBC_MACHINE_ARCH) && \ - exists(${NETBSDSRCDIR}/lib/libc/arch/${LIBC_MACHINE_ARCH}/SYS.h) + exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${LIBC_MACHINE_ARCH}/SYS.h) ARCHSUBDIR= ${LIBC_MACHINE_ARCH} -.elif exists(${NETBSDSRCDIR}/lib/libc/arch/${MACHINE_ARCH}/SYS.h) +.elif exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${MACHINE_ARCH}/SYS.h) ARCHSUBDIR= ${MACHINE_ARCH} -.elif exists(${NETBSDSRCDIR}/lib/libc/arch/${MACHINE_CPU}/SYS.h) +.elif exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${MACHINE_CPU}/SYS.h) ARCHSUBDIR= ${MACHINE_CPU} .else .BEGIN: @@ -16,4 +16,4 @@ ARCHSUBDIR= ${MACHINE_CPU} @false .endif -ARCHDIR= ${NETBSDSRCDIR}/lib/libc/arch/${ARCHSUBDIR} +ARCHDIR= ${MINIXSRCCDIR}/lib/nbsd_libc/arch/${ARCHSUBDIR} diff --git a/lib/nbsd_libc/locale/setlocale.c b/lib/nbsd_libc/locale/setlocale.c index bc3734ed6..63586f0d6 100644 --- a/lib/nbsd_libc/locale/setlocale.c +++ b/lib/nbsd_libc/locale/setlocale.c @@ -61,6 +61,38 @@ extern const _locale_category_t _localeio_LC_TIME_desc; extern const _locale_category_t _localeio_LC_MESSAGES_desc; #endif +#ifdef __minix +/* GNU binutils 2.x a.out support is rotten and link sets are not + supported. Workaround this by explicitely creating the structure + the linker was supposed to create. */ + +struct { + int __ls_length; + _locale_category_t *__ls_items[7]; +} __link_set_all_categories = { + .__ls_length = 7, + .__ls_items = { + [0] = &_generic_LC_ALL_desc, + [1] = &_dummy_LC_COLLATE_desc, +#ifdef WITH_RUNE + [2] = &_citrus_LC_CTYPE_desc, + [3] = &_citrus_LC_MONETARY_desc, + [4] = &_citrus_LC_NUMERIC_desc, + [5] = &_citrus_LC_TIME_desc, + [6] = &_citrus_LC_MESSAGES_desc, +#else + [2] = &_localeio_LC_CTYPE_desc, + [3] = &_localeio_LC_MONETARY_desc, + [4] = &_localeio_LC_NUMERIC_desc, + [5] = &_localeio_LC_TIME_desc, + [6] = &_localeio_LC_MESSAGES_desc, +#endif + }, +}; + +#endif /* __minix */ + + __link_set_add_data(all_categories, _generic_LC_ALL_desc); __link_set_add_data(all_categories, _dummy_LC_COLLATE_desc); #ifdef WITH_RUNE @@ -130,6 +162,7 @@ __setlocale(int category, const char *name) return NULL; } + char * setlocale(int category, const char *locale) { diff --git a/lib/nbsd_libc/minix-config.inc b/lib/nbsd_libc/minix-config.inc new file mode 100644 index 000000000..e597f02ee --- /dev/null +++ b/lib/nbsd_libc/minix-config.inc @@ -0,0 +1,15 @@ +NETBSDSRCDIR= ${MINIXSRCDIR} +NETBSDINCLUDES= /usr/netbsd/include/ +MACHINE_ARCH?= i386 +LIBDIR= /usr/netbsd/lib + +CPPFLAGS+= -nostdinc -O -D__minix -D_POSIX_SOURCE -I${NETBSDINCLUDES} -D_NETBSD_SOURCE -D__NBSD_LIBC +AFLAGS+= -nostdinc -D__minix -I${NETBSDINCLUDES} + + +CITRUS=yes +USE_INET6=no + +MKYP=no #requires RPC +USE_JEMALLOC=no +USE_FORT=no diff --git a/lib/nbsd_libc/misc/initfini.c b/lib/nbsd_libc/misc/initfini.c index 39d7f11f4..d8a6c12f9 100644 --- a/lib/nbsd_libc/misc/initfini.c +++ b/lib/nbsd_libc/misc/initfini.c @@ -55,8 +55,10 @@ __libc_init(void) /* Atomic operations */ __libc_atomic_init(); +#ifdef _REENTRANT /* Threads */ __libc_thr_init(); +#endif /* Initialize the atexit mutexes */ __libc_atexit_init(); diff --git a/lib/nbsd_libc/misc/stack_protector.c b/lib/nbsd_libc/misc/stack_protector.c index 313982c83..e381ef4a6 100644 --- a/lib/nbsd_libc/misc/stack_protector.c +++ b/lib/nbsd_libc/misc/stack_protector.c @@ -56,24 +56,29 @@ void __guard_setup(void); void __guard_setup(void) { +#ifndef __minix int mib[2]; +#endif size_t len; if (__stack_chk_guard[0] != 0) return; - +#ifndef __minix mib[0] = CTL_KERN; mib[1] = KERN_ARND; len = sizeof(__stack_chk_guard); if (__sysctl(mib, 2, __stack_chk_guard, &len, NULL, 0) == -1 || len != sizeof(__stack_chk_guard)) { +#endif /* If sysctl was unsuccessful, use the "terminator canary". */ ((unsigned char *)(void *)__stack_chk_guard)[0] = 0; ((unsigned char *)(void *)__stack_chk_guard)[1] = 0; ((unsigned char *)(void *)__stack_chk_guard)[2] = '\n'; ((unsigned char *)(void *)__stack_chk_guard)[3] = 255; +#ifndef __minix } +#endif } /*ARGSUSED*/ diff --git a/lib/nbsd_libc/net/Makefile.inc b/lib/nbsd_libc/net/Makefile.inc index 7c1f493cd..7ee0fd79b 100644 --- a/lib/nbsd_libc/net/Makefile.inc +++ b/lib/nbsd_libc/net/Makefile.inc @@ -2,7 +2,7 @@ # @(#)Makefile.inc 8.2 (Berkeley) 9/5/93 # net sources -.PATH: ${ARCHDIR}/net ${.CURDIR}/net +.PATH: ${ARCHDIR}/net ${.CURDIR}/net/minix ${.CURDIR}/net SRCS+= __cmsg_alignbytes.c base64.c ethers.c gethnamaddr.c getifaddrs.c \ getnetnamadr.c getnetent.c getpeereid.c \ @@ -10,10 +10,12 @@ SRCS+= __cmsg_alignbytes.c base64.c ethers.c gethnamaddr.c getifaddrs.c \ getprotobyname_r.c getprotobynumber_r.c getprotoent_r.c \ getservbyname.c getservbyport.c getservent.c \ getservbyname_r.c getservbyport_r.c getservent_r.c \ - iso_addr.c linkaddr.c \ nsdispatch.c nslexer.l nsparser.y nsap_addr.c \ - rcmd.c recv.c send.c sethostent.c \ - sockatmark.c + rcmd.c recv.c send.c sethostent.c + + +# Not supported by Minix: +# sockatmark.c .if (${MKHESIOD} != "no") SRCS+= hesiod.c @@ -23,7 +25,9 @@ SRCS+= getaddrinfo.c getnameinfo.c .if (${USE_INET6} != "no") SRCS+= ip6opt.c rthdr.c vars6.c .endif -SRCS+= if_indextoname.c if_nameindex.c if_nametoindex.c +# Not supported by minix +#SRCS+= if_indextoname.c if_nameindex.c if_nametoindex.c +# iso_addr.c linkaddr.c \ LPREFIX=_nsyy YPREFIX=_nsyy diff --git a/lib/nbsd_libc/net/getaddrinfo.c b/lib/nbsd_libc/net/getaddrinfo.c index 41e64882b..eae831679 100644 --- a/lib/nbsd_libc/net/getaddrinfo.c +++ b/lib/nbsd_libc/net/getaddrinfo.c @@ -855,7 +855,12 @@ allocaddrinfo(socklen_t addrlen) ai = calloc(sizeof(struct addrinfo) + addrlen, 1); if (ai) { ai->ai_addr = (void *)(ai+1); +#ifndef __minix ai->ai_addrlen = ai->ai_addr->sa_len = addrlen; +#else /* __minix */ + ai->ai_addrlen = addrlen; +#endif + } return ai; diff --git a/lib/nbsd_libc/net/getnameinfo.c b/lib/nbsd_libc/net/getnameinfo.c index bd373ae12..0340a7651 100644 --- a/lib/nbsd_libc/net/getnameinfo.c +++ b/lib/nbsd_libc/net/getnameinfo.c @@ -54,10 +54,12 @@ __RCSID("$NetBSD: getnameinfo.c,v 1.50 2010/06/29 14:44:19 seanb Exp $"); #include #include #include +#ifndef __minix #include #include #include #include +#endif /* !__minix */ #include #include #include @@ -103,11 +105,13 @@ static int ip6_parsenumeric __P((const struct sockaddr *, const char *, char *, static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int)); #endif +#ifndef __minix static int getnameinfo_atalk __P((const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int)); static int getnameinfo_link __P((const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int)); +#endif /* __minix */ static int hexname __P((const u_int8_t *, size_t, char *, socklen_t)); /* @@ -124,21 +128,26 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) { switch (sa->sa_family) { +#ifndef __minix case AF_APPLETALK: return getnameinfo_atalk(sa, salen, host, hostlen, serv, servlen, flags); +#endif /* !__minix */ case AF_INET: case AF_INET6: return getnameinfo_inet(sa, salen, host, hostlen, serv, servlen, flags); +#ifndef __minix case AF_LINK: return getnameinfo_link(sa, salen, host, hostlen, serv, servlen, flags); +#endif /* !__minix */ default: return EAI_FAMILY; } } +#ifndef __minix /* * getnameinfo_atalk(): * Format an AppleTalk address into a printable format. @@ -198,6 +207,7 @@ errout: return EAI_MEMORY; } +#endif /* !__minix */ /* * getnameinfo_inet(): @@ -490,7 +500,7 @@ ip6_sa2str(sa6, buf, bufsiz, flags) } #endif /* INET6 */ - +#ifndef __minix /* * getnameinfo_link(): * Format a link-layer address into a printable format, paying attention to @@ -568,6 +578,7 @@ getnameinfo_link(const struct sockaddr *sa, socklen_t salen, (size_t)sdl->sdl_alen, host, hostlen); } } +#endif /* !__minix */ static int hexname(cp, len, host, hostlen) diff --git a/lib/nbsd_libc/net/rcmd.c b/lib/nbsd_libc/net/rcmd.c index 8e136ee53..587860692 100644 --- a/lib/nbsd_libc/net/rcmd.c +++ b/lib/nbsd_libc/net/rcmd.c @@ -201,6 +201,7 @@ orcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af) return (error); } + /*ARGSUSED*/ static int resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) @@ -213,7 +214,11 @@ resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) struct addrinfo *r; struct sockaddr_storage from; struct pollfd reads[2]; +#ifdef __minix + /* No support for OOB data in Minix. */ +#else sigset_t nmask, omask; +#endif /* !__minix */ pid_t pid; int s, lport, timo; int pollr; @@ -230,10 +235,14 @@ resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) r = res; refused = 0; pid = getpid(); +#ifndef __minix + /* Minix has no support for OOB data, + no need to block SIGURG. */ sigemptyset(&nmask); sigaddset(&nmask, SIGURG); if (sigprocmask(SIG_BLOCK, &nmask, &omask) == -1) return -1; +#endif /* !__minix */ for (timo = 1, lport = IPPORT_RESERVED - 1;;) { s = rresvport_af(&lport, r->ai_family); if (s < 0) { @@ -245,11 +254,16 @@ resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) r = r->ai_next; continue; } else { +#ifndef __minix (void)sigprocmask(SIG_SETMASK, &omask, NULL); +#endif /* !__minix */ return (-1); } } +#ifndef __minix + /* No OOB support in Minix. */ fcntl(s, F_SETOWN, pid); +#endif /* !__minix */ if (connect(s, r->ai_addr, r->ai_addrlen) >= 0) break; (void)close(s); @@ -286,7 +300,10 @@ resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) } (void)fprintf(stderr, "%s: %s\n", res->ai_canonname, strerror(errno)); +#ifndef __minix + /* No OOB support in Minix. */ (void)sigprocmask(SIG_SETMASK, &omask, NULL); +#endif /* !__minix */ return (-1); } lport--; @@ -363,14 +380,18 @@ resrcmd(res, ahost, rport, locuser, remuser, cmd, fd2p) } goto bad2; } +#ifndef __minix (void)sigprocmask(SIG_SETMASK, &omask, NULL); +#endif /* __minix */ return (s); bad2: if (lport) (void)close(*fd2p); bad: (void)close(s); +#ifndef __minix (void)sigprocmask(SIG_SETMASK, &omask, NULL); +#endif /* __minix */ return (-1); } @@ -522,7 +543,7 @@ rresvport_af(alport, family) sa = (struct sockaddr *)(void *)&ss; switch (family) { case AF_INET: -#ifdef BSD4_4 +#if defined(BSD4_4) && !defined(__minix) sa->sa_len = #endif salen = sizeof(struct sockaddr_in); @@ -530,7 +551,7 @@ rresvport_af(alport, family) break; #ifdef INET6 case AF_INET6: -#ifdef BSD4_4 +#if defined(BSD4_4) && !defined(__minix) sa->sa_len = #endif salen = sizeof(struct sockaddr_in6); @@ -633,7 +654,7 @@ iruserok(raddr, superuser, ruser, luser) memset(&irsin, 0, sizeof(irsin)); irsin.sin_family = AF_INET; -#ifdef BSD4_4 +#if defined(BSD4_4) && !defined(__minix) irsin.sin_len = sizeof(struct sockaddr_in); #endif memcpy(&irsin.sin_addr, &raddr, sizeof(irsin.sin_addr)); @@ -753,7 +774,7 @@ __ivaliduser(hostf, raddr, luser, ruser) memset(&ivusin, 0, sizeof(ivusin)); ivusin.sin_family = AF_INET; -#ifdef BSD4_4 +#if defined(BSD4_4) && !defined(__minix) ivusin.sin_len = sizeof(struct sockaddr_in); #endif memcpy(&ivusin.sin_addr, &raddr, sizeof(ivusin.sin_addr)); diff --git a/lib/nbsd_libc/net/send.c b/lib/nbsd_libc/net/send.c index d7b35141c..82c000ae8 100644 --- a/lib/nbsd_libc/net/send.c +++ b/lib/nbsd_libc/net/send.c @@ -44,9 +44,15 @@ __RCSID("$NetBSD: send.c,v 1.9 2003/08/07 16:43:15 agc Exp $"); #include +#ifdef __minix +/* UGLY: name clash with minix ipc. + * Better solution: redefine minix ipc. + */ +#else /* !__minix */ #ifdef __weak_alias __weak_alias(send, _send) #endif +#endif /* !__minix */ ssize_t send(s, msg, len, flags) diff --git a/lib/nbsd_libc/nls/catopen.c b/lib/nbsd_libc/nls/catopen.c index ac1eabb60..085f8eef9 100644 --- a/lib/nbsd_libc/nls/catopen.c +++ b/lib/nbsd_libc/nls/catopen.c @@ -169,6 +169,19 @@ load_msgcat(path) return (nl_catd)-1; } +#ifdef __minix + data = mmap(0, (size_t)st.st_size, PROT_READ, MAP_ANON, -1, (off_t)0); + if (data == MAP_FAILED) { + return (nl_catd)-1; + } + + if (read(fd, data, st.st_size) != st.st_size) + { + munmap(data, (size_t)st.st_size); + return (nl_catd)-1; + } + close (fd); +#else /* !__minix */ data = mmap(0, (size_t)st.st_size, PROT_READ, MAP_FILE|MAP_SHARED, fd, (off_t)0); close (fd); @@ -176,6 +189,7 @@ load_msgcat(path) if (data == MAP_FAILED) { return (nl_catd)-1; } +#endif /* __minix */ if (ntohl((u_int32_t)((struct _nls_cat_hdr *)data)->__magic) != _NLS_MAGIC) { diff --git a/lib/nbsd_libc/resolv/res_init.c b/lib/nbsd_libc/resolv/res_init.c index 4668c9824..e2590bc6f 100644 --- a/lib/nbsd_libc/resolv/res_init.c +++ b/lib/nbsd_libc/resolv/res_init.c @@ -88,7 +88,9 @@ __RCSID("$NetBSD: res_init.c,v 1.22 2009/10/24 17:24:01 christos Exp $"); #include #include #include +#ifndef __minix #include +#endif /* !__minix */ #include #include @@ -348,7 +350,9 @@ __res_vinit(res_state statp, int preinit) { nserv = 0; if ((fp = fopen(_PATH_RESCONF, "r")) != NULL) { struct stat st; +#ifndef __minix struct kevent kc; +#endif /* !__minix */ /* read the config file */ while (fgets(buf, sizeof(buf), fp) != NULL) { @@ -465,7 +469,7 @@ __res_vinit(res_state statp, int preinit) { *cp++ = n; net = cp; while (*cp && *cp != ';' && - isascii(*cp) && + isascii(*cp) && !isspace((unsigned char)*cp)) cp++; n = *cp; @@ -502,6 +506,7 @@ __res_vinit(res_state statp, int preinit) { if (fstat(statp->_u._ext.ext->resfd, &st) != -1) __res_conf_time = statp->_u._ext.ext->res_conf_time = st.st_mtimespec; +#ifndef __minix statp->_u._ext.ext->kq = kqueue(); (void)fcntl(statp->_u._ext.ext->kq, F_SETFD, FD_CLOEXEC); (void)fcntl(statp->_u._ext.ext->resfd, F_SETFD, FD_CLOEXEC); @@ -509,6 +514,9 @@ __res_vinit(res_state statp, int preinit) { EV_ADD|EV_ENABLE|EV_CLEAR, NOTE_DELETE|NOTE_WRITE| NOTE_EXTEND| NOTE_ATTRIB|NOTE_LINK|NOTE_RENAME|NOTE_REVOKE, 0, 0); (void)kevent(statp->_u._ext.ext->kq, &kc, 1, NULL, 0, &ts); +#else /* __minix */ + statp->_u._ext.ext->kq = -1; +#endif /* !__minix */ } else { statp->_u._ext.ext->kq = -1; statp->_u._ext.ext->resfd = -1; @@ -565,6 +573,12 @@ __res_vinit(res_state statp, int preinit) { int res_check(res_state statp, struct timespec *mtime) { +#ifdef __minix + /* + * XXX: No update on change. + */ + return 0; +#else /* !__minix */ /* * If the times are equal, then we check if there * was a kevent related to resolv.conf and reload. @@ -589,10 +603,12 @@ out: break; } } + (void)__res_vinit(statp, 0); if (mtime) *mtime = __res_conf_time; return 1; +#endif /* !__minix */ } static void diff --git a/lib/nbsd_libc/stdlib/Makefile.inc b/lib/nbsd_libc/stdlib/Makefile.inc index 1067d2c16..0038000fc 100644 --- a/lib/nbsd_libc/stdlib/Makefile.inc +++ b/lib/nbsd_libc/stdlib/Makefile.inc @@ -10,7 +10,7 @@ SRCS+= _env.c _rand48.c \ getenv.c getopt.c getopt_long.c getsubopt.c \ hcreate.c heapsort.c imaxdiv.c insque.c jrand48.c l64a.c lldiv.c \ lcong48.c lrand48.c lsearch.c merge.c mi_vector_hash.c mrand48.c \ - nrand48.c putenv.c qabs.c qdiv.c qsort.c posix_openpt.c pty.c \ + nrand48.c putenv.c qabs.c qdiv.c qsort.c posix_openpt.c \ radixsort.c rand.c rand_r.c random.c remque.c \ seed48.c setenv.c srand48.c strsuftoll.c \ strtoimax.c strtol.c strtoll.c strtoq.c strtoul.c strtoull.c \ diff --git a/lib/nbsd_libc/stdlib/atexit.c b/lib/nbsd_libc/stdlib/atexit.c index 695f0ce46..f350becc1 100644 --- a/lib/nbsd_libc/stdlib/atexit.c +++ b/lib/nbsd_libc/stdlib/atexit.c @@ -120,10 +120,12 @@ atexit_handler_alloc(void *dso) void __libc_atexit_init(void) { +#ifdef _REENTRANT /* !__minix */ mutexattr_t atexit_mutex_attr; mutexattr_init(&atexit_mutex_attr); mutexattr_settype(&atexit_mutex_attr, PTHREAD_MUTEX_RECURSIVE); mutex_init(&atexit_mutex, &atexit_mutex_attr); +#endif /* _REENTRANT */ } /* diff --git a/lib/nbsd_libc/stdlib/malloc.c b/lib/nbsd_libc/stdlib/malloc.c index 7fccd878a..b28bd3ba3 100644 --- a/lib/nbsd_libc/stdlib/malloc.c +++ b/lib/nbsd_libc/stdlib/malloc.c @@ -65,8 +65,10 @@ # define malloc_pageshift 12U # define malloc_minsize 16U # endif +#ifndef __minix # define HAS_UTRACE # define UTRACE_LABEL +#endif /* __minix */ #include void utrace(struct ut *, int); @@ -210,9 +212,11 @@ static size_t malloc_pagemask; #define INIT_MMAP() #endif +#ifndef __minix #ifndef MADV_FREE #define MADV_FREE MADV_DONTNEED #endif +#endif /* !__minix */ /* Number of free pages we cache */ static size_t malloc_cache = 16; @@ -485,8 +489,10 @@ malloc_init(void) case '<': malloc_cache >>= 1; break; case 'a': malloc_abort = 0; break; case 'A': malloc_abort = 1; break; +#ifndef __minix case 'h': malloc_hint = 0; break; case 'H': malloc_hint = 1; break; +#endif /* !__minix */ case 'r': malloc_realloc = 0; break; case 'R': malloc_realloc = 1; break; case 'j': malloc_junk = 0; break; @@ -932,8 +938,10 @@ free_pages(void *ptr, size_t idx, struct pginfo *info) if (malloc_junk) memset(ptr, SOME_JUNK, l); +#ifndef __minix if (malloc_hint) madvise(ptr, l, MADV_FREE); +#endif /* !__minix */ tail = (char *)ptr+l; diff --git a/lib/nbsd_libc/stdlib/system.c b/lib/nbsd_libc/stdlib/system.c index f0fc1207e..e5fefa836 100644 --- a/lib/nbsd_libc/stdlib/system.c +++ b/lib/nbsd_libc/stdlib/system.c @@ -91,7 +91,11 @@ system(command) } (void)__readlockenv(); +#ifdef __minix + switch(pid = fork() ) { +#else /* !__minix */ switch(pid = vfork()) { +#endif /* !__minix */ case -1: /* error */ (void)__unlockenv(); sigaction(SIGINT, &intsa, NULL); diff --git a/lib/nbsd_libc/termios/Makefile.inc b/lib/nbsd_libc/termios/Makefile.inc index c3b62d4a3..e97d8f248 100644 --- a/lib/nbsd_libc/termios/Makefile.inc +++ b/lib/nbsd_libc/termios/Makefile.inc @@ -4,9 +4,12 @@ SRCS+= cfgetispeed.c cfgetospeed.c cfmakeraw.c cfsetispeed.c cfsetospeed.c \ cfsetspeed.c tcdrain.c tcflow.c tcflush.c tcgetattr.c tcgetpgrp.c \ - tcgetsid.c tcsendbreak.c tcsetattr.c tcsetpgrp.c + tcsendbreak.c tcsetattr.c tcsetpgrp.c -MAN+= tcgetpgrp.3 tcgetsid.3 tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 +# Not supported by Minix +# tcgetsid.c + +MAN+= tcgetpgrp.3 tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 MLINKS+=tcsendbreak.3 tcdrain.3 tcsendbreak.3 tcflow.3 \ tcsendbreak.3 tcflush.3 diff --git a/lib/nbsd_libc/termios/cfmakeraw.c b/lib/nbsd_libc/termios/cfmakeraw.c index cb2c1ff36..987dc1062 100644 --- a/lib/nbsd_libc/termios/cfmakeraw.c +++ b/lib/nbsd_libc/termios/cfmakeraw.c @@ -59,7 +59,11 @@ cfmakeraw(t) _DIAGASSERT(t != NULL); +#ifdef __minix + t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); +#else /* !__minix */ t->c_iflag &= ~(IMAXBEL|IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); +#endif /* !__minix */ t->c_oflag &= ~OPOST; t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); t->c_cflag &= ~(CSIZE|PARENB); diff --git a/lib/nbsd_libc/termios/tcflow.c b/lib/nbsd_libc/termios/tcflow.c index c426cd1ba..a8fbc056c 100644 --- a/lib/nbsd_libc/termios/tcflow.c +++ b/lib/nbsd_libc/termios/tcflow.c @@ -54,6 +54,10 @@ int tcflow(fd, action) int fd, action; { +#ifdef __minix + _DIAGASSERT(fd != -1); + return ioctl(fd, TCFLOW, &action); +#else /* !__minix */ struct termios term; u_char c; @@ -77,4 +81,5 @@ tcflow(fd, action) return (-1); } /* NOTREACHED */ +#endif /* !__minix */ } diff --git a/lib/nbsd_libc/termios/tcflush.c b/lib/nbsd_libc/termios/tcflush.c index 6c03f9a5d..5e8fd3240 100644 --- a/lib/nbsd_libc/termios/tcflush.c +++ b/lib/nbsd_libc/termios/tcflush.c @@ -54,6 +54,10 @@ int tcflush(fd, which) int fd, which; { +#ifdef __minix + _DIAGASSERT(fd != -1); + return ioctl(fd, TCFLSH, &which); +#else /* !__minix */ int com; _DIAGASSERT(fd != -1); @@ -73,4 +77,5 @@ tcflush(fd, which) return (-1); } return (ioctl(fd, TIOCFLUSH, &com)); +#endif /* !__minix */ } diff --git a/lib/nbsd_libc/termios/tcsendbreak.c b/lib/nbsd_libc/termios/tcsendbreak.c index 14061477d..521426ee3 100644 --- a/lib/nbsd_libc/termios/tcsendbreak.c +++ b/lib/nbsd_libc/termios/tcsendbreak.c @@ -41,7 +41,9 @@ __RCSID("$NetBSD: tcsendbreak.c,v 1.9 2003/08/07 16:44:14 agc Exp $"); #include "namespace.h" #include #include +#ifndef __minix #include +#endif /* !__minix */ #include #include @@ -57,6 +59,10 @@ int tcsendbreak(fd, len) int fd, len; { +#ifdef __minix + _DIAGASSERT(fd != -1); + return ioctl(fd, TCSBRK, &len); +#else /* !__minix */ static const struct timespec sleepytime = { 0, 400000000 }; _DIAGASSERT(fd != -1); @@ -67,4 +73,5 @@ tcsendbreak(fd, len) if (ioctl(fd, TIOCCBRK, 0) == -1) return (-1); return (0); +#endif /* !__minix */ } diff --git a/lib/nbsd_libc/termios/tcsetattr.c b/lib/nbsd_libc/termios/tcsetattr.c index 8e8d27df4..43f11645b 100644 --- a/lib/nbsd_libc/termios/tcsetattr.c +++ b/lib/nbsd_libc/termios/tcsetattr.c @@ -60,11 +60,15 @@ tcsetattr(fd, opt, t) _DIAGASSERT(fd != -1); _DIAGASSERT(t != NULL); +#ifndef __minix if (opt & TCSASOFT) { localterm = *t; localterm.c_cflag |= CIGNORE; t = &localterm; } +#else /* __minix */ +#define TCSASOFT 0 +#endif /* __minix */ switch (opt & ~TCSASOFT) { case TCSANOW: return (ioctl(fd, TIOCSETA, t)); diff --git a/lib/nbsd_libc/yp/yplib.c b/lib/nbsd_libc/yp/yplib.c index ea92f5078..ceb8251ea 100644 --- a/lib/nbsd_libc/yp/yplib.c +++ b/lib/nbsd_libc/yp/yplib.c @@ -172,8 +172,10 @@ again: } (void)memset(&ysd->dom_server_addr, 0, sizeof ysd->dom_server_addr); +#ifndef __minix ysd->dom_server_addr.sin_len = sizeof(struct sockaddr_in); +#endif /* !__minix */ ysd->dom_server_addr.sin_family = AF_INET; bn = &ybr.ypbind_respbody.ypbind_bindinfo; ysd->dom_server_addr.sin_port = @@ -197,7 +199,9 @@ trynet: if (ysd->dom_vers == -1 || ysd->dom_vers == 0) { struct ypbind_binding *bn; (void)memset(&clnt_sin, 0, sizeof clnt_sin); +#ifndef __minix clnt_sin.sin_len = sizeof(struct sockaddr_in); +#endif /* !__minix */ clnt_sin.sin_family = AF_INET; clnt_sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); @@ -228,7 +232,9 @@ trynet: (void)memset(&ysd->dom_server_addr, 0, sizeof ysd->dom_server_addr); +#ifndef __minix ysd->dom_server_addr.sin_len = sizeof(struct sockaddr_in); +#endif /* !__minix */ ysd->dom_server_addr.sin_family = AF_INET; bn = &ypbr.ypbind_respbody.ypbind_bindinfo; ysd->dom_server_addr.sin_port =