]> Zhao Yanbai Git Server - minix.git/commitdiff
Port NetBSD libc functions to Minix.
authorGianluca Guida <gianluca@minix3.org>
Tue, 15 Feb 2011 12:19:40 +0000 (12:19 +0000)
committerGianluca Guida <gianluca@minix3.org>
Tue, 15 Feb 2011 12:19:40 +0000 (12:19 +0000)
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).

62 files changed:
lib/nbsd_libc/Makefile
lib/nbsd_libc/Makefile.inc
lib/nbsd_libc/arch/i386/Makefile.inc
lib/nbsd_libc/arch/i386/gen/Makefile.inc
lib/nbsd_libc/cdb/cdbr.c
lib/nbsd_libc/citrus/citrus_mmap.c
lib/nbsd_libc/compat-43/Makefile.inc
lib/nbsd_libc/db/db/db.c
lib/nbsd_libc/gdtoa/gdtoa_locks.c
lib/nbsd_libc/gen/Makefile.inc
lib/nbsd_libc/gen/_verr.c
lib/nbsd_libc/gen/_verrx.c
lib/nbsd_libc/gen/_vwarn.c
lib/nbsd_libc/gen/_vwarnx.c
lib/nbsd_libc/gen/_warn.c
lib/nbsd_libc/gen/_warnx.c
lib/nbsd_libc/gen/closedir.c
lib/nbsd_libc/gen/errlist-minix.awk [new file with mode: 0644]
lib/nbsd_libc/gen/fts.c
lib/nbsd_libc/gen/getgrent.c
lib/nbsd_libc/gen/getgroupmembership.c
lib/nbsd_libc/gen/getlogin.c
lib/nbsd_libc/gen/getpwent.c
lib/nbsd_libc/gen/gr_private.h
lib/nbsd_libc/gen/initdir.c
lib/nbsd_libc/gen/opendir.c
lib/nbsd_libc/gen/readdir.c
lib/nbsd_libc/gen/rewinddir.c
lib/nbsd_libc/gen/scandir.c
lib/nbsd_libc/gen/seekdir.c
lib/nbsd_libc/gen/syslog.c
lib/nbsd_libc/gen/telldir.c
lib/nbsd_libc/gen/ttyname.c
lib/nbsd_libc/gen/ttyslot.c
lib/nbsd_libc/gen/ulimit.c
lib/nbsd_libc/gen/utmpx.c
lib/nbsd_libc/gmon/gmon.c
lib/nbsd_libc/include/env.h
lib/nbsd_libc/include/namespace.h
lib/nbsd_libc/libcincludes.mk
lib/nbsd_libc/locale/setlocale.c
lib/nbsd_libc/minix-config.inc [new file with mode: 0644]
lib/nbsd_libc/misc/initfini.c
lib/nbsd_libc/misc/stack_protector.c
lib/nbsd_libc/net/Makefile.inc
lib/nbsd_libc/net/getaddrinfo.c
lib/nbsd_libc/net/getnameinfo.c
lib/nbsd_libc/net/rcmd.c
lib/nbsd_libc/net/send.c
lib/nbsd_libc/nls/catopen.c
lib/nbsd_libc/resolv/res_init.c
lib/nbsd_libc/stdlib/Makefile.inc
lib/nbsd_libc/stdlib/atexit.c
lib/nbsd_libc/stdlib/malloc.c
lib/nbsd_libc/stdlib/system.c
lib/nbsd_libc/termios/Makefile.inc
lib/nbsd_libc/termios/cfmakeraw.c
lib/nbsd_libc/termios/tcflow.c
lib/nbsd_libc/termios/tcflush.c
lib/nbsd_libc/termios/tcsendbreak.c
lib/nbsd_libc/termios/tcsetattr.c
lib/nbsd_libc/yp/yplib.c

index 2bce0bba5018cd9b77f7edd5246ea01f4673f43b..1db3528044c9152e4c29667949c16f051e4439c6 100644 (file)
@@ -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 <bsd.subdir.mk>
-.else
-COMPATDIR=${.CURDIR}/compat
-.include "${.CURDIR}/compat/Makefile.inc"
-.endif
+#BUILDCOLD?= no
+#.if "${BUILDCOLD}" == "yes"
+#SUBDIR=compat
+#.include <bsd.subdir.mk>
+#.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"
index 6837e02c6200b0d7edc0cc8f59318bc91994683a..386b6179dc3999dc83e2f28c6d58f6bc7e5cb23c 100644 (file)
 
 USE_FORT?=     yes
 
-USE_SHLIBDIR=  yes
+USE_SHLIBDIR=  no      
 
 CITRUS?=       yes
 
+USE_LIBTRE=    no
+NETBSDSRCDIR=   ${MINIXSRCDIR}
+
 .include <bsd.own.mk>
 
 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
index 6b78a3bbff96c4c6491a2f56289bb058c1d66e4f..703a6225f9292ffce65ed2e9c1331843a224ef49 100644 (file)
@@ -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
index 4c845e75eb9764be4133e68737723d606344355c..c5a417d0c1b44a1922c73d431f1700bf0d2151fe 100644 (file)
@@ -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
index a71ac42aedefd1ccf37820c97c7495895b6e8c29..07300d4e380e43190951a0cea04492fc474bf532 100644 (file)
@@ -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) {
index 7bbc51800b5dda9490befa6fd351477171598a02..324a0cc15ec7a2fc74d4e9c199d734a955985a43 100644 (file)
@@ -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:
index 98e5390f361900e5553320fdc2fda5cdddb56368..1dd9b649611ce4e0034121b493730010fd5abb55 100644 (file)
@@ -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
index 059183698625809dbdfef609bc475a366be20340..fb3155e63b2da18360f51b01d9b719a7f4e08c3f 100644 (file)
@@ -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) {
index 81f521ce8aeb60984c506026caa11803efbef629..da449790b3b64eaf57520f9cfa817a15c0b3a407 100644 (file)
@@ -7,4 +7,6 @@
 
 #include "gdtoaimp.h"
 
+#ifdef _REENTRANT /* !__minix */
 mutex_t __gdtoa_locks[2] = { MUTEX_INITIALIZER, MUTEX_INITIALIZER };
+#endif /* _REENTRANT */
index 1beaad029d72bd5d162eb3ae2d51d0424b37ea0c..9cce476d9c81472040f8b827231f3207621236e8 100644 (file)
@@ -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
index 1baab5164ea43efefc60999c79699c8b637d0ea2..b0e2013badf0f61a0e26c0abe32746ff21dd83d8 100644 (file)
@@ -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 <sys/ansi.h> 
 
 __dead void _verr(int, const char *, _BSD_VA_LIST_);
 
index 0c161afab82a3bdb642b75a4debcf20b1666fd9c..6e3fa6bc039a38d930e19b9d2126ba8667a6174a 100644 (file)
@@ -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 <sys/ansi.h>
 
 __dead void _verrx(int, const char *, _BSD_VA_LIST_);
 
index 76cef1c60b1a826d675aca9772fffc8a4576f31d..c843a8ca8bbc6c3db64bccca7f4854a8f2463fd3 100644 (file)
@@ -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 <stdarg.h>
 
 void _vwarn(const char *, _BSD_VA_LIST_);
 
index 37cdeaae30c7c73dfa3f7d8c07cc123134b17907..9379f46c47971e382ad4e12c954301237b7c5daa 100644 (file)
@@ -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 <stdarg.h>
 
 void _vwarnx(const char *, _BSD_VA_LIST_);
 
index 7fbed081ebd4cdcbd258e1c7cdc31448a4255a7e..cec6cbaf664ff50298f39e4232767512be62b3e3 100644 (file)
@@ -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 <stdarg.h>
 
 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
index a5fec8ebb4bb631691104f3866e3126b6bf8d125..2a892d413242f45243fbae7ae7cede0d18625789 100644 (file)
@@ -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);
 }
 
index 432019792741ab01ef75cf7db07f6e253dfcdf5a..d3da16391a0d4f2ee0b42efceee743a065092eca 100644 (file)
@@ -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 <sys/types.h>
+#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 (file)
index 0000000..1b3f7f2
--- /dev/null
@@ -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 <sys/cdefs.h>\n");
+       printf("__RCSID(\"$NetBSD: errlist.awk,v 1.4 2010/12/16 22:52:32 joerg Exp $\");\n");
+       printf("#include <errno.h>\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);
+               }
+       }
+}
index 1c3bc733e3acfb5fe1f66ff514366e9608c8748c..a6e2cb1e08b5ddc856be9da36d4c0278546f7cfd 100644 (file)
@@ -56,8 +56,10 @@ __RCSID("$NetBSD: fts.c,v 1.40 2009/11/02 17:17:34 stacktic Exp $");
 #include <unistd.h>
 
 #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);
index 9e2b6957fa5d7087ed5b2dcbd1fd1d1022bcfb7b..91598165cb46d6247137e37087fd80c6cf05c3dc 100644 (file)
@@ -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:
index 78687c0a51a20f3632e508dc33de624f1e187ce4..cc1a6c0745892f8cec0082ceb882c441ea69c804 100644 (file)
@@ -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 */
index b0abc58d40e2eff46ca813099c7e67b53a4672be..3aeee307753089b26eeef2e083a0225e8cca7a58 100644 (file)
@@ -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 
index c49f5e2de948c12316819c236a2fa8550e11fe65..fca7f27d2d81b6af3cad54e9a9a7c98c2aa42a58 100644 (file)
@@ -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:
index 560ab92657a66e46b4e87c153f320b1a2f3c7219..ac2c12222ba16abd0877267e7a2d48dea218bd33 100644 (file)
 
 #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
         */
index a4b9e1e75d4553385025ca2bc2a35cd4a9d3b9bd..66884b0b332ff30106fce703378df54eade75a85 100644 (file)
 __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 <sys/cdefs.h>
+#include <sys/types.h>
+#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);
index 7bb5997b318583a2dff6ad6381bb39c70a9189e7..1d750470fe558e41390c5d1fd6e31c944b3cb792 100644 (file)
@@ -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 <sys/cdefs.h>
+#include <sys/types.h>
+#endif
+
 #include "extern.h"
 
 #include <sys/param.h>
@@ -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);
index 13c3eb034930a5822b958d180dde4d26a07cf20f..c2b1e3a1cdd98dc9dd12533a21d81bcd8c96ccee 100644 (file)
@@ -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 <sys/cdefs.h>
+#include <sys/types.h>
+#endif
+
 #include "extern.h"
+
 #include <sys/param.h>
 
 #include <dirent.h>
@@ -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);
        }
 }
index a16685247ea810afcc48243ad3e90fbb4d538956..ed4195808e65b9c58450efdd9ea8d62a25021ad5 100644 (file)
@@ -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 <sys/types.h>
+#endif
+
 #include "extern.h"
 #include <sys/types.h>
 
index d89442936d86360d41239398ce3eb2f6efb09cf4..74af88f7724753cffebfc0f25a7e9143ce6e8c5f 100644 (file)
@@ -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);
index e70eba635e4fc20cb197cc97ae882e1315db3796..1ace9798baf70ed999a0394d9b75d359114377c7 100644 (file)
@@ -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 <sys/types.h>
+#endif
 #include "extern.h"
 #include <sys/param.h>
 
index 6f961087e3231be631c2a33d8cab0f8c9b8009a0..39b4eb64e5692be36dee272bfa5fac99a53fb3ab 100644 (file)
@@ -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,
        };
 
index f631642ac2c4b17d5c1e37aefaea87d2fe6a421d..e45351c53b79d53569744729713a27d89547099c 100644 (file)
@@ -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 <sys/types.h>
+#endif
+
 #include "extern.h"
 #include <sys/param.h>
 
index 6002c1e2ff0651ee2b008e1784aae99c82ee9b2a..91d6483057e7c442b5894d05199e20dccf87da51 100644 (file)
@@ -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
index 33ac4540a55903fc6e62b3d3eff2d5c6f5d05961..3d1d2b5332c2c9247a49491e9be3080c5ed11d31 100644 (file)
@@ -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;
index ba61a22f99d5318f592cc062dfa5590c06e1d777..30a7ca498f1d484ae80ba3d1ad2dc69be6f1c002 100644 (file)
@@ -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;
        }
index 779d56512cee8961fd343498ee729726a4dd7811..faa7ea7d7dde2710a72ff57ea757e8974a7e56a9 100644 (file)
@@ -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;
index 01d017c494bd31a7529abc31dc6aa707f9114e56..f420df12790e315342ee500aa05a32411ab70e26 100644 (file)
@@ -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 */
index 20b6bf95ac2923002dd8b282a5437ee2d41d37e8..7858f9a429d86793c08be18fcc2bef8a38fedf2a 100644 (file)
@@ -56,7 +56,7 @@ __writelockenv(void)
 }
 
 static __inline bool
-__unlocklockenv(void)
+__unlockenv(void)
 {
        return true;
 }
index c4bb6bfc061071fb84f3b98bd8ae8ade66a7bcd7..6b3e1bf24b6399cdac94b66a1dd29ba563d0dee6 100644 (file)
@@ -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
 #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
 #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__ */
 
index 66afcc3b990179f433361ccfa3d56badac722fd4..c936a440dcd707cb744a971ae6e33246b8e7c3c3 100644 (file)
@@ -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}
index bc3734ed6e44b9914520b0ee21daf4bb2830fac5..63586f0d6d5fda18839f7adb92b636de69841556 100644 (file)
@@ -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 (file)
index 0000000..e597f02
--- /dev/null
@@ -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
index 39d7f11f40d6898ce1e6bdbb622d975ea3977d6b..d8a6c12f972f147dbb781db6d5e99e885408a74c 100644 (file)
@@ -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();
index 313982c83ab6a1a1bc1d1ee57268de64b0ca7d91..e381ef4a69c244524ebd798050558382e6a2b6df 100644 (file)
@@ -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*/
index 7c1f493cdfaa886b2a6a7b496dd84fb610a01c49..7ee0fd79b6ed5c4a2443297ea009f4cb4fd737d0 100644 (file)
@@ -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
index 41e64882b236f2d7a8500b0a0e9a8b503455ebbe..eae8316790c9a37aa284faaa7e88db1e15cde87f 100644 (file)
@@ -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;
index bd373ae12aa17ad077eaa55d1185fb1ca88533e4..0340a765153c46aff8d2e3f31a52deb5d12639ab 100644 (file)
@@ -54,10 +54,12 @@ __RCSID("$NetBSD: getnameinfo.c,v 1.50 2010/06/29 14:44:19 seanb Exp $");
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <net/if.h>
+#ifndef __minix
 #include <net/if_dl.h>
 #include <net/if_ieee1394.h>
 #include <net/if_types.h>
 #include <netatalk/at.h>
+#endif /* !__minix */
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
@@ -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)
index 8e136ee5315fb91b11441ddd9d41cadc206f4042..5878606926326e4e2b2c4ace121149501efeeef8 100644 (file)
@@ -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));
index d7b35141ce9eb538862b5f01284f3ea554142d86..82c000ae8ef49c97ea7199498b3be9fdb74882b9 100644 (file)
@@ -44,9 +44,15 @@ __RCSID("$NetBSD: send.c,v 1.9 2003/08/07 16:43:15 agc Exp $");
 
 #include <stddef.h>
 
+#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)
index ac1eabb602243baee762cbb4e47a92fc5c227e71..085f8eef99ca765878cf86e84282a3d2ceac452f 100644 (file)
@@ -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) {
index 4668c9824fea68ebb2e9fb586e95c42a0f5deb32..e2590bc6f9eee0090d714fd2a2a5a83d5f273222 100644 (file)
@@ -88,7 +88,9 @@ __RCSID("$NetBSD: res_init.c,v 1.22 2009/10/24 17:24:01 christos Exp $");
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/time.h>
+#ifndef __minix
 #include <sys/event.h>
+#endif /* !__minix */
 
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -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
index 1067d2c16672aed405f4f616fe873ed7a442f674..0038000fc44f659175d09b1de262c6abf7e72a8b 100644 (file)
@@ -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 \
index 695f0ce46ed793106ce8f38c1dec7bd8f9f499bb..f350becc18220ed94f08e47967ef374499319ee7 100644 (file)
@@ -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 */
 }
 
 /*
index 7fccd878a4c853edac031d55a54338cddabab6ae..b28bd3ba32685bcb364c9983b8559299af709678 100644 (file)
 #       define malloc_pageshift         12U
 #       define malloc_minsize           16U
 #   endif
+#ifndef __minix
 #   define HAS_UTRACE
 #   define UTRACE_LABEL
+#endif /* __minix */
 
 #include <sys/cdefs.h>
 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;
 
index f0fc1207ee8858fce9098604b5c10086a5ed89ea..e5fefa836f4fe16b34b24f9b484e163a240ac642 100644 (file)
@@ -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);
index c3b62d4a388f1f8e10134af7f93a6209faf82624..e97d8f248e8175e6c47ea47d79113bfc3ebda88a 100644 (file)
@@ -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
index cb2c1ff36fe769a583f689fc99f6659c6a8bbd33..987dc10628b867bd820467438e95167b42c0d6b4 100644 (file)
@@ -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);
index c426cd1ba0673036a4a05b129ce8553962c5a4bc..a8fbc056c5a104807a8796fc1586c7545b4513cd 100644 (file)
@@ -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 */
 }
index 6c03f9a5dfc4feae01bb9a6738e807098c3c49bf..5e8fd32406e791069eb3d2f254168878a6ef565d 100644 (file)
@@ -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 */
 }
index 14061477d062cefc181395d6cdb5e3c089704c72..521426ee3c6a0c9f3ee4beecfc92dc4f6662d807 100644 (file)
@@ -41,7 +41,9 @@ __RCSID("$NetBSD: tcsendbreak.c,v 1.9 2003/08/07 16:44:14 agc Exp $");
 #include "namespace.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#ifndef __minix
 #include <sys/time.h>
+#endif /* !__minix */
 
 #include <assert.h>
 #include <errno.h>
@@ -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 */
 }
index 8e8d27df4f4a6a3e6a25eb50e9649f9555ba9038..43f11645babb043962b4ec77c5e50770109d5cfc 100644 (file)
@@ -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));
index ea92f5078c2f3a03173869e595422b59375a112b..ceb8251eaa7bbf18bbd15cdab4a0ff3c17072016 100644 (file)
@@ -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 =