diff -ru nbsdsrc/src/lib/libc/Makefile lib/nbsd_libc/Makefile --- nbsdsrc/src/lib/libc/Makefile +++ lib/nbsd_libc/Makefile @@ -17,6 +17,9 @@ # 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. +.if defined(__MINIX) +.include "minix-config.inc" +.endif .include "Makefile.inc" LIB= c @@ -41,6 +44,7 @@ mv -f assym.h.tmp assym.h .endif +.if !defined(__MINIX) # 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. @@ -52,6 +56,9 @@ COMPATDIR=${.CURDIR}/compat .include "${.CURDIR}/compat/Makefile.inc" .endif +.else +BUILDCOLD= no +.endif .include "${.CURDIR}/../../common/lib/libc/Makefile.inc" .include "${.CURDIR}/atomic/Makefile.inc" @@ -64,7 +71,11 @@ .include "${.CURDIR}/dlfcn/Makefile.inc" .include "${.CURDIR}/gdtoa/Makefile.inc" .include "${.CURDIR}/gen/Makefile.inc" +.if defined(__MINIX) +# gmon needs profil() +.else .include "${.CURDIR}/gmon/Makefile.inc" +.endif .include "${.CURDIR}/hash/Makefile.inc" .include "${.CURDIR}/iconv/Makefile.inc" .include "${.CURDIR}/inet/Makefile.inc" @@ -84,7 +95,11 @@ .include "${.CURDIR}/regex/Makefile.inc" .endif .include "${.CURDIR}/resolv/Makefile.inc" +.if defined(__MINIX) +# RPC needs pollts() and a reserved port allocator. +.else .include "${.CURDIR}/rpc/Makefile.inc" +.endif .include "${.CURDIR}/ssp/Makefile.inc" .include "${.CURDIR}/stdio/Makefile.inc" .include "${.CURDIR}/stdlib/Makefile.inc" @@ -92,7 +107,11 @@ .include "${.CURDIR}/termios/Makefile.inc" .include "${.CURDIR}/thread-stub/Makefile.inc" .include "${.CURDIR}/time/Makefile.inc" +.if defined(__MINIX) +.include "${.CURDIR}/sys-minix/Makefile.inc" +.else .include "${.CURDIR}/sys/Makefile.inc" +.endif .include "${.CURDIR}/uuid/Makefile.inc" .if (${MKYP} != "no") .include "${.CURDIR}/yp/Makefile.inc" @@ -121,7 +140,11 @@ NLS= C.msg Pig.msg ca.msg cs.msg de.msg es.msg fi.msg fr.msg nl.msg \ no.msg pl.msg sk.msg sv.msg +.if defined(__MINIX) +realall: +.else realall: tags +.endif tags: ${.OBJDIR}/tags ${.OBJDIR}/tags: ${SRCS} ${_MKTARGET_CREATE} @@ -130,9 +153,11 @@ sed "s;\([^:]*\):\([^(]*\)(\([^, )]*\)\(.*\);\3 \1 /^\2(\3\4$$/;" \ >> ${.TARGET}; sort -o ${.TARGET} ${.TARGET} +.if !defined(__MINIX) FILES= ${.OBJDIR}/tags FILESNAME= libc.tags FILESDIR= /var/db +.endif # workaround for I18N stuffs: build singlebyte setlocale() for libc.a, @@ -146,4 +171,8 @@ # force the dynamic linker to initialize libc first SHLIB_SHFLAGS+= -Wl,-z,initfirst + +.include +SUBDIR+= pkgconfig +.include diff -ru nbsdsrc/src/lib/libc/Makefile.inc lib/nbsd_libc/Makefile.inc --- nbsdsrc/src/lib/libc/Makefile.inc +++ lib/nbsd_libc/Makefile.inc @@ -19,14 +19,22 @@ USE_FORT?= yes +.if defined(__MINIX) +USE_SHLIBDIR= no +.else USE_SHLIBDIR= yes +.endif CITRUS?= yes .include WARNS=4 +.if defined(__MINIX) +CPPFLAGS+= -D_LIBC +.else CPPFLAGS+= -D_LIBC -DLIBC_SCCS -DSYSLIBC_SCCS -D_REENTRANT +.endif .if (${USE_HESIOD} != "no") CPPFLAGS+= -DHESIOD diff -ru nbsdsrc/src/lib/libc/arch/i386/Makefile.inc lib/nbsd_libc/arch/i386/Makefile.inc --- nbsdsrc/src/lib/libc/arch/i386/Makefile.inc +++ lib/nbsd_libc/arch/i386/Makefile.inc @@ -1,3 +1,5 @@ # $NetBSD: Makefile.inc,v 1.20 2006/06/17 18:04:23 uwe Exp $ +.if !defined(__MINIX) SRCS+= __sigaction14_sigtramp.c __sigtramp2.S +.endif diff -ru nbsdsrc/src/lib/libc/arch/i386/gen/Makefile.inc lib/nbsd_libc/arch/i386/gen/Makefile.inc --- nbsdsrc/src/lib/libc/arch/i386/gen/Makefile.inc +++ lib/nbsd_libc/arch/i386/gen/Makefile.inc @@ -7,10 +7,18 @@ SRCS+= setjmp.S _setjmp.S sigsetjmp.S +.if defined(__MINIX) +# Already defined in sys-minix +.else SRCS+= resumecontext.S swapcontext.S +.endif # objects built from C sources +.if defined(__MINIX) +SRCS+= bswap64.c +.else SRCS+= bswap64.c _lwp.c makecontext.c +.endif # Common ieee754 constants and functions SRCS+= infinityf_ieee754.c infinity_ieee754.c diff -ru nbsdsrc/src/lib/libc/arch/i386/gen/setjmp.S lib/nbsd_libc/arch/i386/gen/setjmp.S --- nbsdsrc/src/lib/libc/arch/i386/gen/setjmp.S +++ lib/nbsd_libc/arch/i386/gen/setjmp.S @@ -85,7 +85,11 @@ PIC_PROLOGUE pushl $0 pushl %edx +#ifdef __minix + pushl $2 /* SIG_SETMASK */ +#else pushl $3 /* SIG_SETMASK */ +#endif #ifdef PIC call PIC_PLT(_C_LABEL(__sigprocmask14)) #else diff -ru nbsdsrc/src/lib/libc/arch/i386/gen/sigsetjmp.S lib/nbsd_libc/arch/i386/gen/sigsetjmp.S --- nbsdsrc/src/lib/libc/arch/i386/gen/sigsetjmp.S +++ lib/nbsd_libc/arch/i386/gen/sigsetjmp.S @@ -85,7 +85,11 @@ PIC_PROLOGUE pushl $0 pushl %edx +#ifdef __minix + pushl $2 /* SIG_SETMASK */ +#else pushl $3 /* SIG_SETMASK */ +#endif #ifdef PIC call PIC_PLT(_C_LABEL(__sigprocmask14)) #else diff -ru nbsdsrc/src/lib/libc/cdb/cdbr.c lib/nbsd_libc/cdb/cdbr.c --- nbsdsrc/src/lib/libc/cdb/cdbr.c +++ lib/nbsd_libc/cdb/cdbr.c @@ -122,7 +122,22 @@ 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 -ru nbsdsrc/src/lib/libc/citrus/Makefile.inc lib/nbsd_libc/citrus/Makefile.inc --- nbsdsrc/src/lib/libc/citrus/Makefile.inc +++ lib/nbsd_libc/citrus/Makefile.inc @@ -3,8 +3,8 @@ # sources .PATH: ${ARCHDIR}/citrus ${.CURDIR}/citrus -MODULE_SHLIB_MAJOR!= . ${NETBSDSRCDIR}/lib/i18n_module/shlib_version ; echo $$major -CPPFLAGS.citrus_module.c+=-DI18NMODULE_MAJOR=${MODULE_SHLIB_MAJOR} +#MODULE_SHLIB_MAJOR!= . ${NETBSDSRCDIR}/lib/i18n_module/shlib_version ; echo $$major +#CPPFLAGS.citrus_module.c+=-DI18NMODULE_MAJOR=${MODULE_SHLIB_MAJOR} SRCS+= citrus_bcs.c citrus_bcs_strtol.c citrus_bcs_strtoul.c \ citrus_csmapper.c citrus_ctype.c citrus_ctype_fallback.c \ citrus_db.c citrus_db_hash.c citrus_esdb.c citrus_hash.c \ diff -ru nbsdsrc/src/lib/libc/citrus/citrus_mmap.c lib/nbsd_libc/citrus/citrus_mmap.c --- nbsdsrc/src/lib/libc/citrus/citrus_mmap.c +++ lib/nbsd_libc/citrus/citrus_mmap.c @@ -74,12 +74,25 @@ 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 -ru nbsdsrc/src/lib/libc/compat-43/Makefile.inc lib/nbsd_libc/compat-43/Makefile.inc --- nbsdsrc/src/lib/libc/compat-43/Makefile.inc +++ lib/nbsd_libc/compat-43/Makefile.inc @@ -4,11 +4,19 @@ # compat-43 sources .PATH: ${ARCHDIR}/compat-43 ${.CURDIR}/compat-43 +.if defined(__MINIX) +# Unsupported by Minix +# gethostid.c sethostid.c setpgrp.c setrgid.c setruid.c sigcompat.c + +SRCS+= creat.c getdtablesize.c killpg.c + +.else SRCS+= creat.c getdtablesize.c gethostid.c \ killpg.c sethostid.c setpgrp.c \ setrgid.c setruid.c sigcompat.c .if !defined(AUDIT) SRCS+= getwd.c +.endif .endif # XXX this is to get diff -ru nbsdsrc/src/lib/libc/db/btree/bt_open.c lib/nbsd_libc/db/btree/bt_open.c --- nbsdsrc/src/lib/libc/db/btree/bt_open.c +++ lib/nbsd_libc/db/btree/bt_open.c @@ -262,7 +262,11 @@ * Don't overflow the page offset type. */ if (b.psize == 0) { +#ifdef __minix + b.psize = MINIX_ST_BLKSIZE; +#else b.psize = sb.st_blksize; +#endif if (b.psize < MINPSIZE) b.psize = MINPSIZE; if (b.psize > MAX_PAGE_OFFSET + 1) diff -ru nbsdsrc/src/lib/libc/db/db/db.c lib/nbsd_libc/db/db/db.c --- nbsdsrc/src/lib/libc/db/db/db.c +++ lib/nbsd_libc/db/db/db.c @@ -57,9 +57,15 @@ { #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 -ru nbsdsrc/src/lib/libc/db/hash/hash.c lib/nbsd_libc/db/hash/hash.c --- nbsdsrc/src/lib/libc/db/hash/hash.c +++ lib/nbsd_libc/db/hash/hash.c @@ -301,7 +301,11 @@ if (file != NULL) { if (stat(file, &statbuf)) return (NULL); +#ifdef __minix + hashp->BSIZE = MIN(MINIX_ST_BLKSIZE, MAX_BSIZE); +#else hashp->BSIZE = MIN(statbuf.st_blksize, MAX_BSIZE); +#endif hashp->BSHIFT = __log2((uint32_t)hashp->BSIZE); } diff -ru nbsdsrc/src/lib/libc/dlfcn/dlfcn_elf.c lib/nbsd_libc/dlfcn/dlfcn_elf.c --- nbsdsrc/src/lib/libc/dlfcn/dlfcn_elf.c +++ lib/nbsd_libc/dlfcn/dlfcn_elf.c @@ -48,7 +48,12 @@ #define dl_iterate_phdr ___dl_iterate_phdr #define ELFSIZE ARCH_ELFSIZE +#ifdef __minix +#include +#include +#else #include "rtld.h" +#endif #ifdef __weak_alias __weak_alias(dlopen,___dlopen) @@ -128,6 +133,7 @@ return -1; } +#ifndef __minix /*ARGSUSED*/ int dl_iterate_phdr(int (*callback)(struct dl_phdr_info *, size_t, void *), @@ -136,3 +142,4 @@ return 0; } +#endif diff -ru nbsdsrc/src/lib/libc/gdtoa/gdtoa_locks.c lib/nbsd_libc/gdtoa/gdtoa_locks.c --- nbsdsrc/src/lib/libc/gdtoa/gdtoa_locks.c +++ 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 -ru nbsdsrc/src/lib/libc/gdtoa/gdtoaimp.h lib/nbsd_libc/gdtoa/gdtoaimp.h --- nbsdsrc/src/lib/libc/gdtoa/gdtoaimp.h +++ lib/nbsd_libc/gdtoa/gdtoaimp.h @@ -1,4 +1,4 @@ -/* $NetBSD: gdtoaimp.h,v 1.7 2009/05/07 20:31:44 christos Exp $ */ +/* $NetBSD: gdtoaimp.h,v 1.8 2011/01/21 23:36:49 christos Exp $ */ /**************************************************************** @@ -276,7 +276,7 @@ Exactly one of IEEE_LITTLE_ENDIAN, IEEE_BIG_ENDIAN, VAX, or IBM should be defined. #endif -typedef union { double d; ULong L[2]; } U; +typedef union { double d; ULong L[2]; } __attribute__((__may_alias__)) U; #ifdef YES_ALIAS #define dval(x) x diff -ru nbsdsrc/src/lib/libc/gen/Makefile.inc lib/nbsd_libc/gen/Makefile.inc --- nbsdsrc/src/lib/libc/gen/Makefile.inc +++ lib/nbsd_libc/gen/Makefile.inc @@ -2,9 +2,57 @@ # from: @(#)Makefile.inc 8.6 (Berkeley) 5/4/95 # gen sources +.if defined(__MINIX) +.PATH: ${.CURDIR}/gen/minix +.endif .PATH: ${ARCHDIR}/gen ${.CURDIR}/gen +.if defined(__MINIX) +# 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 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 \ + fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \ + fts.c ftw.c getbsize.c getcap.c getcwd.c \ + getdomainname.c getgrent.c \ + getgrouplist.c getgroupmembership.c gethostname.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 \ + 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 \ + 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 \ + 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 warn.c warnx.c \ + vwarn.c vwarnx.c verr.c verrx.c wait.c waitpid.c wordexp.c +.else +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 \ errlist.c errno.c execl.c execle.c execlp.c execv.c execvp.c \ @@ -32,6 +80,7 @@ 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 +.endif # indirect reference stubs, to be removed soon. SRCS+= _err.c _errx.c \ @@ -163,7 +212,12 @@ CPPFLAGS.tolower_.c+= -I${LIBCDIR}/locale CPPFLAGS.toupper_.c+= -I${LIBCDIR}/locale +.if defined(__MINIX) +errlist.c: errlist-minix.awk ${MINIXSRCDIR}/nbsd_include/sys/errno.h + ${TOOL_AWK} -f ${.ALLSRC} > ${.TARGET} +.else errlist.c: errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h ${TOOL_AWK} -f ${.ALLSRC} > ${.TARGET} +.endif CLEANFILES+= errlist.c diff -ru nbsdsrc/src/lib/libc/gen/_verr.c lib/nbsd_libc/gen/_verr.c --- nbsdsrc/src/lib/libc/gen/_verr.c +++ lib/nbsd_libc/gen/_verr.c @@ -13,6 +13,9 @@ #if defined(__indr_reference) __indr_reference(_verr, verr) #else +#ifdef __minix +#include +#endif __dead void _verr(int, const char *, _BSD_VA_LIST_); diff -ru nbsdsrc/src/lib/libc/gen/_verrx.c lib/nbsd_libc/gen/_verrx.c --- nbsdsrc/src/lib/libc/gen/_verrx.c +++ lib/nbsd_libc/gen/_verrx.c @@ -13,6 +13,9 @@ #if defined(__indr_reference) __indr_reference(_verrx, verrx) #else +#ifdef __minix +#include +#endif __dead void _verrx(int, const char *, _BSD_VA_LIST_); diff -ru nbsdsrc/src/lib/libc/gen/_vwarn.c lib/nbsd_libc/gen/_vwarn.c --- nbsdsrc/src/lib/libc/gen/_vwarn.c +++ lib/nbsd_libc/gen/_vwarn.c @@ -13,6 +13,9 @@ #if defined(__indr_reference) __indr_reference(_vwarn, vwarn) #else +#ifdef __minix +#include +#endif void _vwarn(const char *, _BSD_VA_LIST_); diff -ru nbsdsrc/src/lib/libc/gen/_vwarnx.c lib/nbsd_libc/gen/_vwarnx.c --- nbsdsrc/src/lib/libc/gen/_vwarnx.c +++ lib/nbsd_libc/gen/_vwarnx.c @@ -13,6 +13,9 @@ #if defined(__indr_reference) __indr_reference(_vwarnx, vwarnx) #else +#ifdef __minix +#include +#endif void _vwarnx(const char *, _BSD_VA_LIST_); diff -ru nbsdsrc/src/lib/libc/gen/_warn.c lib/nbsd_libc/gen/_warn.c --- nbsdsrc/src/lib/libc/gen/_warn.c +++ lib/nbsd_libc/gen/_warn.c @@ -24,7 +24,11 @@ va_list ap; va_start(ap, fmt); +#ifdef __minix + _vwarn(fmt, ap); +#else _vwarn(eval, fmt, ap); +#endif va_end(ap); } #endif diff -ru nbsdsrc/src/lib/libc/gen/_warnx.c lib/nbsd_libc/gen/_warnx.c --- nbsdsrc/src/lib/libc/gen/_warnx.c +++ lib/nbsd_libc/gen/_warnx.c @@ -24,7 +24,11 @@ va_list ap; va_start(ap, fmt); +#ifdef __minix + _vwarnx(fmt, ap); +#else _vwarnx(eval, fmt, ap); +#endif va_end(ap); } diff -ru nbsdsrc/src/lib/libc/gen/closedir.c lib/nbsd_libc/gen/closedir.c --- nbsdsrc/src/lib/libc/gen/closedir.c +++ lib/nbsd_libc/gen/closedir.c @@ -38,6 +38,11 @@ #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 -ru nbsdsrc/src/lib/libc/gen/fts.c lib/nbsd_libc/gen/fts.c --- nbsdsrc/src/lib/libc/gen/fts.c +++ lib/nbsd_libc/gen/fts.c @@ -56,7 +56,9 @@ #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); diff -ru nbsdsrc/src/lib/libc/gen/getcwd.c lib/nbsd_libc/gen/getcwd.c --- nbsdsrc/src/lib/libc/gen/getcwd.c +++ lib/nbsd_libc/gen/getcwd.c @@ -54,8 +54,12 @@ #include "extern.h" #ifdef __weak_alias +#ifdef __minix +__weak_alias(getcwd,_getcwd) +#else __weak_alias(getcwd,_sys_getcwd) __weak_alias(_getcwd,_sys_getcwd) +#endif __weak_alias(realpath,_realpath) #if defined(_FORTIFY_SOURCE) && !defined(__lint__) diff -ru nbsdsrc/src/lib/libc/gen/getgrent.c lib/nbsd_libc/gen/getgrent.c --- nbsdsrc/src/lib/libc/gen/getgrent.c +++ lib/nbsd_libc/gen/getgrent.c @@ -481,7 +481,11 @@ _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 @@ _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,7 +809,11 @@ _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; @@ -825,7 +837,11 @@ _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,7 +1164,11 @@ _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; @@ -1172,7 +1192,11 @@ _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 +1432,11 @@ crv = nsdispatch(NULL, compatgiddtab, NSDB_GROUP_COMPAT, "getgrgid_r", __nsdefaultnis, +#ifdef __minix + &cretval, (int)gid, +#else &cretval, gid, +#endif &cgrp, filebuf, sizeof(filebuf), &cgrpres); } if (crv != NS_SUCCESS) { /* not found */ @@ -1610,7 +1638,11 @@ _compat_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; @@ -1635,7 +1667,11 @@ _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); @@ -1785,7 +1821,11 @@ mutex_lock(&__grmutex); rv = nsdispatch(NULL, dtab, NSDB_GROUP, "getgrgid", __nsdefaultcompat, +#ifdef __minix + &retval, (int)gid); +#else &retval, gid); +#endif mutex_unlock(&__grmutex); return (rv == NS_SUCCESS) ? retval : NULL; } @@ -1812,7 +1852,11 @@ retval = 0; mutex_lock(&__grmutex); rv = nsdispatch(NULL, dtab, NSDB_GROUP, "getgrgid_r", __nsdefaultcompat, +#ifdef __minix + &retval, (int)gid, grp, buffer, buflen, result); +#else &retval, gid, grp, buffer, buflen, result); +#endif mutex_unlock(&__grmutex); switch (rv) { case NS_SUCCESS: diff -ru nbsdsrc/src/lib/libc/gen/getgroupmembership.c lib/nbsd_libc/gen/getgroupmembership.c --- nbsdsrc/src/lib/libc/gen/getgroupmembership.c +++ lib/nbsd_libc/gen/getgroupmembership.c @@ -101,7 +101,11 @@ { 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 @@ { 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 @@ { 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,7 +317,11 @@ 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 @@ { 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 @@ */ (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 -ru nbsdsrc/src/lib/libc/gen/getlogin.c lib/nbsd_libc/gen/getlogin.c --- nbsdsrc/src/lib/libc/gen/getlogin.c +++ lib/nbsd_libc/gen/getlogin.c @@ -78,7 +78,9 @@ #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 @@ return (rv); } +#ifndef __minix int setlogin(const char *name) { @@ -144,3 +147,4 @@ return (retval); } +#endif diff -ru nbsdsrc/src/lib/libc/gen/getpwent.c lib/nbsd_libc/gen/getpwent.c --- nbsdsrc/src/lib/libc/gen/getpwent.c +++ lib/nbsd_libc/gen/getpwent.c @@ -671,7 +671,11 @@ _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 @@ _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 @@ _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 @@ _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 @@ _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 @@ _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,15 @@ &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 +2331,11 @@ _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 +2360,11 @@ _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 +2520,13 @@ }; 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 +2552,14 @@ *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 -ru nbsdsrc/src/lib/libc/gen/glob.c lib/nbsd_libc/gen/glob.c --- nbsdsrc/src/lib/libc/gen/glob.c +++ lib/nbsd_libc/gen/glob.c @@ -1,4 +1,4 @@ -/* $NetBSD: glob.c,v 1.27 2010/09/06 14:40:25 christos Exp $ */ +/* $NetBSD: glob.c,v 1.28 2011/01/21 23:30:31 christos Exp $ */ /* * Copyright (c) 1989, 1993 @@ -37,7 +37,7 @@ #if 0 static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93"; #else -__RCSID("$NetBSD: glob.c,v 1.27 2010/09/06 14:40:25 christos Exp $"); +__RCSID("$NetBSD: glob.c,v 1.28 2011/01/21 23:30:31 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -87,13 +87,18 @@ #define NO_GETPW_R #endif -#define GLOB_LIMIT_MALLOC 65536 -#define GLOB_LIMIT_STAT 128 -#define GLOB_LIMIT_READDIR 16384 +#define GLOB_LIMIT_STRING 65536 /* number of readdirs */ +#define GLOB_LIMIT_STAT 128 /* number of stat system calls */ +#define GLOB_LIMIT_READDIR 16384 /* total buffer size of path strings */ +#define GLOB_LIMIT_PATH 1024 /* number of path elements */ +#define GLOB_LIMIT_BRACE 128 /* Number of brace calls */ -#define GLOB_INDEX_MALLOC 0 -#define GLOB_INDEX_STAT 1 -#define GLOB_INDEX_READDIR 2 +struct glob_limit { + size_t l_string; + size_t l_stat; + size_t l_readdir; + size_t l_brace; +}; /* * XXX: For NetBSD 1.4.x compatibility. (kill me l8r) @@ -158,17 +163,17 @@ static DIR *g_opendir(Char *, glob_t *); static Char *g_strchr(const Char *, int); static int g_stat(Char *, __gl_stat_t *, glob_t *); -static int glob0(const Char *, glob_t *, size_t *); -static int glob1(Char *, glob_t *, size_t *); +static int glob0(const Char *, glob_t *, struct glob_limit *); +static int glob1(Char *, glob_t *, struct glob_limit *); static int glob2(Char *, Char *, Char *, const Char *, glob_t *, - size_t *); + struct glob_limit *); static int glob3(Char *, Char *, Char *, const Char *, const Char *, - const Char *, glob_t *, size_t *); -static int globextend(const Char *, glob_t *, size_t *); + const Char *, glob_t *, struct glob_limit *); +static int globextend(const Char *, glob_t *, struct glob_limit *); static const Char *globtilde(const Char *, Char *, size_t, glob_t *); -static int globexp1(const Char *, glob_t *, size_t *); +static int globexp1(const Char *, glob_t *, struct glob_limit *); static int globexp2(const Char *, const Char *, glob_t *, int *, - size_t *); + struct glob_limit *); static int match(const Char *, const Char *, const Char *); #ifdef DEBUG static void qprintf(const char *, Char *); @@ -181,8 +186,7 @@ const u_char *patnext; int c; Char *bufnext, *bufend, patbuf[MAXPATHLEN+1]; - /* 0 = malloc(), 1 = stat(), 2 = readdir() */ - size_t limit[] = { 0, 0, 0 }; + struct glob_limit limit = { 0, 0, 0, 0 }; _DIAGASSERT(pattern != NULL); @@ -218,9 +222,9 @@ *bufnext = EOS; if (flags & GLOB_BRACE) - return globexp1(patbuf, pglob, limit); + return globexp1(patbuf, pglob, &limit); else - return glob0(patbuf, pglob, limit); + return glob0(patbuf, pglob, &limit); } /* @@ -229,7 +233,7 @@ * characters */ static int -globexp1(const Char *pattern, glob_t *pglob, size_t *limit) +globexp1(const Char *pattern, glob_t *pglob, struct glob_limit *limit) { const Char* ptr = pattern; int rv; @@ -237,6 +241,12 @@ _DIAGASSERT(pattern != NULL); _DIAGASSERT(pglob != NULL); + if ((pglob->gl_flags & GLOB_LIMIT) && + limit->l_brace++ >= GLOB_LIMIT_BRACE) { + errno = 0; + return GLOB_NOSPACE; + } + /* Protect a single {}, for find(1), like csh */ if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS) return glob0(pattern, pglob, limit); @@ -256,7 +266,7 @@ */ static int globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv, - size_t *limit) + struct glob_limit *limit) { int i; Char *lm, *ls; @@ -461,7 +471,7 @@ * to find no matches. */ static int -glob0(const Char *pattern, glob_t *pglob, size_t *limit) +glob0(const Char *pattern, glob_t *pglob, struct glob_limit *limit) { const Char *qpatnext; int c, error; @@ -570,7 +580,7 @@ } static int -glob1(Char *pattern, glob_t *pglob, size_t *limit) +glob1(Char *pattern, glob_t *pglob, struct glob_limit *limit) { Char pathbuf[MAXPATHLEN+1]; @@ -596,7 +606,7 @@ */ static int glob2(Char *pathbuf, Char *pathend, Char *pathlim, const Char *pattern, - glob_t *pglob, size_t *limit) + glob_t *pglob, struct glob_limit *limit) { __gl_stat_t sb; const Char *p; @@ -624,10 +634,11 @@ return 0; if ((pglob->gl_flags & GLOB_LIMIT) && - limit[GLOB_INDEX_STAT]++ >= GLOB_LIMIT_STAT) { + limit->l_stat++ >= GLOB_LIMIT_STAT) { errno = 0; *pathend++ = SEP; *pathend = EOS; +printf("stat limit\n"); return GLOB_NOSPACE; } if (((pglob->gl_flags & GLOB_MARK) && @@ -692,7 +703,7 @@ static int glob3(Char *pathbuf, Char *pathend, Char *pathlim, const Char *pattern, const Char *restpattern, const Char *pglobstar, glob_t *pglob, - size_t *limit) + struct glob_limit *limit) { struct dirent *dp; DIR *dirp; @@ -785,7 +796,7 @@ Char *dc; if ((pglob->gl_flags & GLOB_LIMIT) && - limit[GLOB_INDEX_READDIR]++ >= GLOB_LIMIT_READDIR) { + limit->l_readdir++ >= GLOB_LIMIT_READDIR) { errno = 0; *pathend++ = SEP; *pathend = EOS; @@ -894,7 +905,7 @@ * gl_pathv points to (gl_offs + gl_pathc + 1) items. */ static int -globextend(const Char *path, glob_t *pglob, size_t *limit) +globextend(const Char *path, glob_t *pglob, struct glob_limit *limit) { char **pathv; size_t i, newsize, len; @@ -905,6 +916,9 @@ _DIAGASSERT(pglob != NULL); newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); + if ((pglob->gl_flags & GLOB_LIMIT) && + newsize > GLOB_LIMIT_PATH * sizeof(*pathv)) + goto nospace; pathv = pglob->gl_pathv ? realloc(pglob->gl_pathv, newsize) : malloc(newsize); if (pathv == NULL) @@ -921,7 +935,7 @@ for (p = path; *p++;) continue; len = (size_t)(p - path); - limit[GLOB_INDEX_MALLOC] += len; + limit->l_string += len; if ((copy = malloc(len)) != NULL) { if (g_Ctoc(path, copy, len)) { free(copy); @@ -932,12 +946,13 @@ pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; if ((pglob->gl_flags & GLOB_LIMIT) && - (newsize + limit[GLOB_INDEX_MALLOC]) >= GLOB_LIMIT_MALLOC) { - errno = 0; - return GLOB_NOSPACE; - } + (newsize + limit->l_string) >= GLOB_LIMIT_STRING) + goto nospace; return copy == NULL ? GLOB_NOSPACE : 0; +nospace: + errno = 0; + return GLOB_NOSPACE; } diff -ru nbsdsrc/src/lib/libc/gen/gr_private.h lib/nbsd_libc/gen/gr_private.h --- nbsdsrc/src/lib/libc/gen/gr_private.h +++ lib/nbsd_libc/gen/gr_private.h @@ -40,11 +40,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 -ru nbsdsrc/src/lib/libc/gen/initdir.c lib/nbsd_libc/gen/initdir.c --- nbsdsrc/src/lib/libc/gen/initdir.c +++ lib/nbsd_libc/gen/initdir.c @@ -35,6 +35,14 @@ #endif /* LIBC_SCCS and not lint */ #include "namespace.h" + +#ifdef __minix +/* NetBSD BUG on !_REENTRANT */ +#include +#include +#include +#endif + #include "reentrant.h" #include "extern.h" @@ -221,9 +229,11 @@ 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 -ru nbsdsrc/src/lib/libc/gen/opendir.c lib/nbsd_libc/gen/opendir.c --- nbsdsrc/src/lib/libc/gen/opendir.c +++ lib/nbsd_libc/gen/opendir.c @@ -40,6 +40,12 @@ #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#include +#endif + #include "extern.h" #include @@ -97,7 +103,9 @@ DIR *dirp = NULL; int serrno; struct stat sb; +#ifndef __minix struct statvfs sfb; +#endif int error; if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) @@ -122,6 +130,10 @@ * Tweak flags for the underlying filesystem. */ +#ifdef __minix + /* 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 @@ 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 -ru nbsdsrc/src/lib/libc/gen/readdir.c lib/nbsd_libc/gen/readdir.c --- nbsdsrc/src/lib/libc/gen/readdir.c +++ lib/nbsd_libc/gen/readdir.c @@ -40,6 +40,12 @@ #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#include +#endif + #include "extern.h" #include @@ -81,8 +87,10 @@ 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 -ru nbsdsrc/src/lib/libc/gen/rewinddir.c lib/nbsd_libc/gen/rewinddir.c --- nbsdsrc/src/lib/libc/gen/rewinddir.c +++ lib/nbsd_libc/gen/rewinddir.c @@ -40,6 +40,11 @@ #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#endif + #include "extern.h" #include diff -ru nbsdsrc/src/lib/libc/gen/scandir.c lib/nbsd_libc/gen/scandir.c --- nbsdsrc/src/lib/libc/gen/scandir.c +++ lib/nbsd_libc/gen/scandir.c @@ -130,9 +130,13 @@ 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 -ru nbsdsrc/src/lib/libc/gen/seekdir.c lib/nbsd_libc/gen/seekdir.c --- nbsdsrc/src/lib/libc/gen/seekdir.c +++ lib/nbsd_libc/gen/seekdir.c @@ -40,6 +40,9 @@ #include "namespace.h" #include "reentrant.h" +#ifdef __minix +#include +#endif #include "extern.h" #include diff -ru nbsdsrc/src/lib/libc/gen/syslog.c lib/nbsd_libc/gen/syslog.c --- nbsdsrc/src/lib/libc/gen/syslog.c +++ lib/nbsd_libc/gen/syslog.c @@ -492,7 +492,9 @@ /* 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 -ru nbsdsrc/src/lib/libc/gen/telldir.c lib/nbsd_libc/gen/telldir.c --- nbsdsrc/src/lib/libc/gen/telldir.c +++ lib/nbsd_libc/gen/telldir.c @@ -40,6 +40,11 @@ #include "namespace.h" #include "reentrant.h" + +#ifdef __minix +#include +#endif + #include "extern.h" #include diff -ru nbsdsrc/src/lib/libc/gen/ttyname.c lib/nbsd_libc/gen/ttyname.c --- nbsdsrc/src/lib/libc/gen/ttyname.c +++ lib/nbsd_libc/gen/ttyname.c @@ -72,7 +72,9 @@ mode_t type; dev_t dev; } bkey; +#ifndef __minix struct ptmget ptm; +#endif #define DEVSZ (sizeof(_PATH_DEV) - 1) _DIAGASSERT(fd != -1); @@ -81,6 +83,7 @@ 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 +91,7 @@ } return 0; } +#endif /* Must be a terminal. */ if (tcgetattr(fd, &ttyb) == -1) return errno; @@ -136,7 +140,11 @@ 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 -ru nbsdsrc/src/lib/libc/gen/ttyslot.c lib/nbsd_libc/gen/ttyslot.c --- nbsdsrc/src/lib/libc/gen/ttyslot.c +++ lib/nbsd_libc/gen/ttyslot.c @@ -59,14 +59,20 @@ 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 -ru nbsdsrc/src/lib/libc/gen/ulimit.c lib/nbsd_libc/gen/ulimit.c --- nbsdsrc/src/lib/libc/gen/ulimit.c +++ lib/nbsd_libc/gen/ulimit.c @@ -54,12 +54,14 @@ 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 -ru nbsdsrc/src/lib/libc/gen/utmpx.c lib/nbsd_libc/gen/utmpx.c --- nbsdsrc/src/lib/libc/gen/utmpx.c +++ lib/nbsd_libc/gen/utmpx.c @@ -336,16 +336,32 @@ _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; @@ -425,10 +441,18 @@ _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 +488,19 @@ _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 -ru nbsdsrc/src/lib/libc/gmon/gmon.c lib/nbsd_libc/gmon/gmon.c --- nbsdsrc/src/lib/libc/gmon/gmon.c +++ lib/nbsd_libc/gmon/gmon.c @@ -373,8 +373,10 @@ 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]; @@ -397,6 +399,9 @@ 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 +416,7 @@ else clockinfo.profhz = hertz(); } +#endif /* !__minix */ moncontrol(0); @@ -509,6 +515,7 @@ } } +#ifndef __minix /* * discover the tick frequency of the machine * if something goes wrong, we return 0, an impossible hertz. @@ -542,3 +549,4 @@ (void)timer_delete(t); return rv; } +#endif /* !__minix */ diff -ru nbsdsrc/src/lib/libc/include/env.h lib/nbsd_libc/include/env.h --- nbsdsrc/src/lib/libc/include/env.h +++ lib/nbsd_libc/include/env.h @@ -56,7 +56,11 @@ } static __inline bool +#ifdef __minix +__unlockenv(void) +#else /* Bug-to-bug compatibility? */ __unlocklockenv(void) +#endif { return true; } diff -ru nbsdsrc/src/lib/libc/include/namespace.h lib/nbsd_libc/include/namespace.h --- nbsdsrc/src/lib/libc/include/namespace.h +++ lib/nbsd_libc/include/namespace.h @@ -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,78 @@ #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 fstatfs _fstatfs +#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 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 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 -ru nbsdsrc/src/lib/libc/libcincludes.mk lib/nbsd_libc/libcincludes.mk --- nbsdsrc/src/lib/libc/libcincludes.mk +++ lib/nbsd_libc/libcincludes.mk @@ -3,7 +3,25 @@ # Makefile fragment shared across several parts that want to look # inside libc's include tree. +.if defined(__MINIX) +MACHINE_ARCH= ${MACHINE} +MACHINE_CPU= ${MACHINE} .if defined(LIBC_MACHINE_ARCH) && \ + exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${LIBC_MACHINE_ARCH}/SYS.h) +ARCHSUBDIR= ${LIBC_MACHINE_ARCH} +.elif exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${MACHINE_ARCH}/SYS.h) +ARCHSUBDIR= ${MACHINE_ARCH} +.elif exists(${MINIXSRCDIR}/lib/nbsd_libc/arch/${MACHINE_CPU}/SYS.h) +ARCHSUBDIR= ${MACHINE_CPU} +.else +.BEGIN: + @echo no ARCHDIR for ${MACHINE_ARCH} nor ${MACHINE_CPU} + @false +.endif + +ARCHDIR= ${MINIXSRCCDIR}/lib/nbsd_libc/arch/${ARCHSUBDIR} +.else +.if defined(LIBC_MACHINE_ARCH) && \ exists(${NETBSDSRCDIR}/lib/libc/arch/${LIBC_MACHINE_ARCH}/SYS.h) ARCHSUBDIR= ${LIBC_MACHINE_ARCH} .elif exists(${NETBSDSRCDIR}/lib/libc/arch/${MACHINE_ARCH}/SYS.h) @@ -17,3 +35,4 @@ .endif ARCHDIR= ${NETBSDSRCDIR}/lib/libc/arch/${ARCHSUBDIR} +.endif diff -ru nbsdsrc/src/lib/libc/locale/setlocale.c lib/nbsd_libc/locale/setlocale.c --- nbsdsrc/src/lib/libc/locale/setlocale.c +++ lib/nbsd_libc/locale/setlocale.c @@ -61,6 +61,38 @@ 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 diff -ru nbsdsrc/src/lib/libc/misc/initfini.c lib/nbsd_libc/misc/initfini.c --- nbsdsrc/src/lib/libc/misc/initfini.c +++ lib/nbsd_libc/misc/initfini.c @@ -55,8 +55,10 @@ /* Atomic operations */ __libc_atomic_init(); +#ifdef _REENTRANT /* Threads */ __libc_thr_init(); +#endif /* Initialize the atexit mutexes */ __libc_atexit_init(); diff -ru nbsdsrc/src/lib/libc/misc/stack_protector.c lib/nbsd_libc/misc/stack_protector.c --- nbsdsrc/src/lib/libc/misc/stack_protector.c +++ lib/nbsd_libc/misc/stack_protector.c @@ -56,24 +56,30 @@ 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 -ru nbsdsrc/src/lib/libc/net/Makefile.inc lib/nbsd_libc/net/Makefile.inc --- nbsdsrc/src/lib/libc/net/Makefile.inc +++ lib/nbsd_libc/net/Makefile.inc @@ -2,18 +2,33 @@ # @(#)Makefile.inc 8.2 (Berkeley) 9/5/93 # net sources +.if defined(__MINIX) +.PATH: ${.CURDIR}/net/minix +.endif .PATH: ${ARCHDIR}/net ${.CURDIR}/net +.if defined(__MINIX) +# Not supported by minix: iso_addr.c link_addr.c sockatmark.c SRCS+= __cmsg_alignbytes.c base64.c ethers.c gethnamaddr.c getifaddrs.c \ getnetnamadr.c getnetent.c getpeereid.c \ getprotobyname.c getprotobynumber.c getprotoent.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 \ + nsdispatch.c nslexer.l nsparser.y nsap_addr.c \ + rcmd.c recv.c send.c sethostent.c +.else +SRCS+= __cmsg_alignbytes.c base64.c ethers.c gethnamaddr.c getifaddrs.c \ + getnetnamadr.c getnetent.c getpeereid.c \ + getprotobyname.c getprotobynumber.c getprotoent.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 +.endif .if (${MKHESIOD} != "no") SRCS+= hesiod.c @@ -23,7 +38,9 @@ .if (${USE_INET6} != "no") SRCS+= ip6opt.c rthdr.c vars6.c .endif +.if !defined(__MINIX) SRCS+= if_indextoname.c if_nameindex.c if_nametoindex.c +.endif LPREFIX=_nsyy YPREFIX=_nsyy diff -ru nbsdsrc/src/lib/libc/net/getaddrinfo.c lib/nbsd_libc/net/getaddrinfo.c --- nbsdsrc/src/lib/libc/net/getaddrinfo.c +++ lib/nbsd_libc/net/getaddrinfo.c @@ -855,7 +855,12 @@ 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 -ru nbsdsrc/src/lib/libc/net/getnameinfo.c lib/nbsd_libc/net/getnameinfo.c --- nbsdsrc/src/lib/libc/net/getnameinfo.c +++ lib/nbsd_libc/net/getnameinfo.c @@ -54,10 +54,12 @@ #include #include #include +#ifndef __minix #include #include #include #include +#endif /* !__minix */ #include #include #include @@ -103,11 +105,13 @@ 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 @@ { 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 @@ return EAI_MEMORY; } +#endif /* !__minix */ /* * getnameinfo_inet(): @@ -491,6 +501,7 @@ #endif /* INET6 */ +#ifndef __minix /* * getnameinfo_link(): * Format a link-layer address into a printable format, paying attention to @@ -568,6 +579,7 @@ (size_t)sdl->sdl_alen, host, hostlen); } } +#endif /* !__minix */ static int hexname(cp, len, host, hostlen) diff -ru nbsdsrc/src/lib/libc/net/rcmd.c lib/nbsd_libc/net/rcmd.c --- nbsdsrc/src/lib/libc/net/rcmd.c +++ lib/nbsd_libc/net/rcmd.c @@ -48,7 +48,9 @@ #include #include +#ifndef __minix #include +#endif #include #include @@ -213,7 +215,11 @@ 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 +236,14 @@ 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 +255,16 @@ 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 +301,10 @@ } (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 +381,18 @@ } 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); } diff -ru nbsdsrc/src/lib/libc/net/send.c lib/nbsd_libc/net/send.c --- nbsdsrc/src/lib/libc/net/send.c +++ lib/nbsd_libc/net/send.c @@ -44,9 +44,15 @@ #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 -ru nbsdsrc/src/lib/libc/nls/catopen.c lib/nbsd_libc/nls/catopen.c --- nbsdsrc/src/lib/libc/nls/catopen.c +++ lib/nbsd_libc/nls/catopen.c @@ -169,6 +169,19 @@ 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 @@ if (data == MAP_FAILED) { return (nl_catd)-1; } +#endif /* __minix */ if (ntohl((u_int32_t)((struct _nls_cat_hdr *)data)->__magic) != _NLS_MAGIC) { diff -ru nbsdsrc/src/lib/libc/resolv/Makefile.inc lib/nbsd_libc/resolv/Makefile.inc --- nbsdsrc/src/lib/libc/resolv/Makefile.inc +++ lib/nbsd_libc/resolv/Makefile.inc @@ -2,7 +2,11 @@ # net sources .PATH: ${.CURDIR}/resolv +.if defined(__MINIX) +CPPFLAGS+=-DCOMPAT__RES -DNEED_PSELECT +.else CPPFLAGS+=-DCOMPAT__RES -DUSE_POLL +.endif SRCS+= __dn_comp.c __res_close.c __res_send.c h_errno.c \ herror.c res_comp.c res_data.c res_debug.c \ diff -ru nbsdsrc/src/lib/libc/resolv/res_comp.c lib/nbsd_libc/resolv/res_comp.c --- nbsdsrc/src/lib/libc/resolv/res_comp.c +++ lib/nbsd_libc/resolv/res_comp.c @@ -96,7 +96,7 @@ #ifdef __weak_alias __weak_alias(dn_expand,_dn_expand) __weak_alias(dn_comp,__dn_comp) -#if 0 +#ifdef __minix __weak_alias(dn_skipname,__dn_skipname) __weak_alias(res_hnok,__res_hnok) __weak_alias(res_ownok,__res_ownok) diff -ru nbsdsrc/src/lib/libc/resolv/res_init.c lib/nbsd_libc/resolv/res_init.c --- nbsdsrc/src/lib/libc/resolv/res_init.c +++ lib/nbsd_libc/resolv/res_init.c @@ -70,6 +70,10 @@ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#ifdef __minix +#define __MINIX_EMULATE_NETBSD_STAT +#endif + #include #if defined(LIBC_SCCS) && !defined(lint) #ifdef notdef @@ -88,7 +92,9 @@ #include #include #include +#ifndef __minix #include +#endif /* !__minix */ #include #include @@ -348,7 +354,9 @@ 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) { @@ -502,6 +510,7 @@ 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 +518,9 @@ 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,7 +577,13 @@ 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. * If the times are not equal, then we don't bother @@ -593,6 +611,7 @@ if (mtime) *mtime = __res_conf_time; return 1; +#endif /* !__minix */ } static void diff -ru nbsdsrc/src/lib/libc/stdio/fseeko.c lib/nbsd_libc/stdio/fseeko.c --- nbsdsrc/src/lib/libc/stdio/fseeko.c +++ lib/nbsd_libc/stdio/fseeko.c @@ -150,7 +150,11 @@ fp->_flags |= __SNPT; goto dumb; } +#ifdef __minix + fp->_blksize = MINIX_ST_BLKSIZE; +#else fp->_blksize = st.st_blksize; +#endif fp->_flags |= __SOPT; } diff -ru nbsdsrc/src/lib/libc/stdio/makebuf.c lib/nbsd_libc/stdio/makebuf.c --- nbsdsrc/src/lib/libc/stdio/makebuf.c +++ lib/nbsd_libc/stdio/makebuf.c @@ -114,18 +114,25 @@ /* could be a tty iff it is a character device */ *couldbetty = S_ISCHR(st.st_mode); +#ifndef __minix if (st.st_blksize == 0) { *bufsize = BUFSIZ; return (__SNPT); } +#endif /* * Optimise fseek() only if it is a regular file. (The test for * __sseek is mainly paranoia.) It is safe to set _blksize * unconditionally; it will only be used if __SOPT is also set. */ +#ifdef __minix + *bufsize = MINIX_ST_BLKSIZE; + fp->_blksize = MINIX_ST_BLKSIZE; +#else *bufsize = st.st_blksize; fp->_blksize = st.st_blksize; +#endif return ((st.st_mode & S_IFMT) == S_IFREG && fp->_seek == __sseek ? __SOPT : __SNPT); } diff -ru nbsdsrc/src/lib/libc/stdlib/Makefile.inc lib/nbsd_libc/stdlib/Makefile.inc --- nbsdsrc/src/lib/libc/stdlib/Makefile.inc +++ lib/nbsd_libc/stdlib/Makefile.inc @@ -4,18 +4,34 @@ # stdlib sources .PATH: ${ARCHDIR}/stdlib ${.CURDIR}/stdlib +.if defined(__MINIX) +# pty.c not compiled SRCS+= _env.c _rand48.c \ a64l.c abort.c atexit.c atof.c atoi.c atol.c atoll.c \ bsearch.c drand48.c exit.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 \ + 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 \ + strtoumax.c strtouq.c system.c tdelete.c tfind.c tsearch.c twalk.c \ + unsetenv.c strfmon.c +.else +SRCS+= _env.c _rand48.c \ + a64l.c abort.c atexit.c atof.c atoi.c atol.c atoll.c \ + bsearch.c drand48.c exit.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 \ 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 \ strtoumax.c strtouq.c system.c tdelete.c tfind.c tsearch.c twalk.c \ unsetenv.c strfmon.c +.endif # These are often replaced by MD .S versions SRCS+= abs.c labs.c llabs.c imaxabs.c diff -ru nbsdsrc/src/lib/libc/stdlib/atexit.c lib/nbsd_libc/stdlib/atexit.c --- nbsdsrc/src/lib/libc/stdlib/atexit.c +++ lib/nbsd_libc/stdlib/atexit.c @@ -120,10 +120,12 @@ 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 -ru nbsdsrc/src/lib/libc/stdlib/malloc.c lib/nbsd_libc/stdlib/malloc.c --- nbsdsrc/src/lib/libc/stdlib/malloc.c +++ 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 @@ #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 @@ 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 @@ 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 -ru nbsdsrc/src/lib/libc/stdlib/system.c lib/nbsd_libc/stdlib/system.c --- nbsdsrc/src/lib/libc/stdlib/system.c +++ lib/nbsd_libc/stdlib/system.c @@ -91,7 +91,11 @@ } (void)__readlockenv(); +#ifdef __minix + switch(pid = fork() ) { +#else /* !__minix */ switch(pid = vfork()) { +#endif /* !__minix */ case -1: /* error */ (void)__unlockenv(); sigaction(SIGINT, &intsa, NULL); diff -ru nbsdsrc/src/lib/libc/termios/Makefile.inc lib/nbsd_libc/termios/Makefile.inc --- nbsdsrc/src/lib/libc/termios/Makefile.inc +++ lib/nbsd_libc/termios/Makefile.inc @@ -2,9 +2,18 @@ .PATH: ${.CURDIR}/termios +.if defined(__MINIX) +# Not supported by Minix: tcgetsid.c SRCS+= cfgetispeed.c cfgetospeed.c cfmakeraw.c cfsetispeed.c cfsetospeed.c \ cfsetspeed.c tcdrain.c tcflow.c tcflush.c tcgetattr.c tcgetpgrp.c \ + tcsendbreak.c tcsetattr.c tcsetpgrp.c +.else +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 +.endif + + MAN+= tcgetpgrp.3 tcgetsid.3 tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 diff -ru nbsdsrc/src/lib/libc/termios/cfmakeraw.c lib/nbsd_libc/termios/cfmakeraw.c --- nbsdsrc/src/lib/libc/termios/cfmakeraw.c +++ lib/nbsd_libc/termios/cfmakeraw.c @@ -59,7 +59,11 @@ _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 -ru nbsdsrc/src/lib/libc/termios/tcflow.c lib/nbsd_libc/termios/tcflow.c --- nbsdsrc/src/lib/libc/termios/tcflow.c +++ lib/nbsd_libc/termios/tcflow.c @@ -54,6 +54,10 @@ 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 @@ return (-1); } /* NOTREACHED */ +#endif /* !__minix */ } diff -ru nbsdsrc/src/lib/libc/termios/tcflush.c lib/nbsd_libc/termios/tcflush.c --- nbsdsrc/src/lib/libc/termios/tcflush.c +++ lib/nbsd_libc/termios/tcflush.c @@ -54,6 +54,10 @@ 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 @@ return (-1); } return (ioctl(fd, TIOCFLUSH, &com)); +#endif /* !__minix */ } diff -ru nbsdsrc/src/lib/libc/termios/tcsendbreak.c lib/nbsd_libc/termios/tcsendbreak.c --- nbsdsrc/src/lib/libc/termios/tcsendbreak.c +++ lib/nbsd_libc/termios/tcsendbreak.c @@ -41,7 +41,9 @@ #include "namespace.h" #include #include +#ifndef __minix #include +#endif /* !__minix */ #include #include @@ -57,6 +59,10 @@ 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 @@ if (ioctl(fd, TIOCCBRK, 0) == -1) return (-1); return (0); +#endif /* !__minix */ } diff -ru nbsdsrc/src/lib/libc/termios/tcsetattr.c lib/nbsd_libc/termios/tcsetattr.c --- nbsdsrc/src/lib/libc/termios/tcsetattr.c +++ lib/nbsd_libc/termios/tcsetattr.c @@ -60,11 +60,15 @@ _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 -ru nbsdsrc/src/lib/libc/time/strftime.c lib/nbsd_libc/time/strftime.c --- nbsdsrc/src/lib/libc/time/strftime.c +++ lib/nbsd_libc/time/strftime.c @@ -553,6 +553,11 @@ pt = _conv(diff, "%04d", pt, ptlim); } continue; +#ifdef __minix + case '+': + pt = _fmt(sp, Locale->c_fmt, t, pt, ptlim, warnp); + continue; +#endif /* !__minix */ #if 0 case '+': pt = _fmt(sp, Locale->date_fmt, t, pt, ptlim, diff -ru nbsdsrc/src/lib/libc/yp/yplib.c lib/nbsd_libc/yp/yplib.c --- nbsdsrc/src/lib/libc/yp/yplib.c +++ lib/nbsd_libc/yp/yplib.c @@ -172,8 +172,10 @@ } (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 @@ 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 @@ (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 =