[BACK]Return to osf1_cvt.c CVS log [TXT][DIR] Up to [local] / sys / compat / osf1

Annotation of sys/compat/osf1/osf1_cvt.c, Revision 1.1

1.1     ! nbrk        1: /* $OpenBSD: osf1_cvt.c,v 1.3 2006/02/16 20:32:33 miod Exp $ */
        !             2: /* $NetBSD: osf1_cvt.c,v 1.7 1999/06/26 01:23:23 cgd Exp $ */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  * 3. All advertising materials mentioning features or use of this software
        !            16:  *    must display the following acknowledgement:
        !            17:  *      This product includes software developed by Christopher G. Demetriou
        !            18:  *     for the NetBSD Project.
        !            19:  * 4. The name of the author may not be used to endorse or promote products
        !            20:  *    derived from this software without specific prior written permission
        !            21:  *
        !            22:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            23:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            24:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            25:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            26:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            27:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            31:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            32:  */
        !            33:
        !            34: /*
        !            35:  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
        !            36:  * All rights reserved.
        !            37:  *
        !            38:  * Author: Chris G. Demetriou
        !            39:  *
        !            40:  * Permission to use, copy, modify and distribute this software and
        !            41:  * its documentation is hereby granted, provided that both the copyright
        !            42:  * notice and this permission notice appear in all copies of the
        !            43:  * software, derivative works or modified versions, and any portions
        !            44:  * thereof, and that both notices appear in supporting documentation.
        !            45:  *
        !            46:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            47:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
        !            48:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            49:  *
        !            50:  * Carnegie Mellon requests users of this software to return to
        !            51:  *
        !            52:  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
        !            53:  *  School of Computer Science
        !            54:  *  Carnegie Mellon University
        !            55:  *  Pittsburgh PA 15213-3890
        !            56:  *
        !            57:  * any improvements or extensions that they make and grant Carnegie the
        !            58:  * rights to redistribute these changes.
        !            59:  */
        !            60:
        !            61: #include <sys/param.h>
        !            62: #include <sys/systm.h>
        !            63: #include <sys/namei.h>
        !            64: #include <sys/proc.h>
        !            65: #include <sys/file.h>
        !            66: #include <sys/stat.h>
        !            67: #include <sys/filedesc.h>
        !            68: #include <sys/kernel.h>
        !            69: #include <sys/malloc.h>
        !            70: #include <sys/mman.h>
        !            71: #include <sys/mount.h>
        !            72: #include <sys/signal.h>
        !            73: #include <sys/signalvar.h>
        !            74: #include <sys/reboot.h>
        !            75: #include <sys/syscallargs.h>
        !            76: #include <sys/exec.h>
        !            77: #include <sys/vnode.h>
        !            78: #include <sys/socketvar.h>
        !            79: #include <sys/resource.h>
        !            80: #include <sys/resourcevar.h>
        !            81: #include <sys/wait.h>
        !            82: #include <uvm/uvm_extern.h>                            /* XXX see mmap emulation */
        !            83:
        !            84: #include <nfs/rpcv2.h>
        !            85: #include <nfs/nfsproto.h>
        !            86: #include <nfs/nfs.h>
        !            87: #include <nfs/nfsmount.h>
        !            88:
        !            89: #include <compat/osf1/osf1.h>
        !            90: #include <compat/osf1/osf1_util.h>
        !            91: #include <compat/osf1/osf1_cvt.h>
        !            92:
        !            93: const struct emul_flags_xtab osf1_access_flags_xtab[] = {
        !            94: #if 0 /* pseudo-flag */
        !            95:     {  OSF1_F_OK,              OSF1_F_OK,              F_OK            },
        !            96: #endif
        !            97:     {  OSF1_X_OK,              OSF1_X_OK,              X_OK            },
        !            98:     {  OSF1_W_OK,              OSF1_W_OK,              W_OK            },
        !            99:     {  OSF1_R_OK,              OSF1_R_OK,              R_OK            },
        !           100:     {  0                                                               }
        !           101: };
        !           102:
        !           103: const struct emul_flags_xtab osf1_fcntl_getsetfd_flags_rxtab[] = {
        !           104:     {  FD_CLOEXEC,             FD_CLOEXEC,             OSF1_FD_CLOEXEC },
        !           105:     {  0                                                               }
        !           106: };
        !           107:
        !           108: const struct emul_flags_xtab osf1_fcntl_getsetfd_flags_xtab[] = {
        !           109:     {  OSF1_FD_CLOEXEC,        OSF1_FD_CLOEXEC,        FD_CLOEXEC      },
        !           110:     {  0                                                               }
        !           111: };
        !           112:
        !           113: /* flags specific to GETFL/SETFL; also uses open rxtab */
        !           114: const struct emul_flags_xtab osf1_fcntl_getsetfl_flags_rxtab[] = {
        !           115:     {  FASYNC,                 FASYNC,                 OSF1_FASYNC     },
        !           116:     {  0                                                               }
        !           117: };
        !           118:
        !           119: /* flags specific to GETFL/SETFL; also uses open xtab */
        !           120: const struct emul_flags_xtab osf1_fcntl_getsetfl_flags_xtab[] = {
        !           121:     {  OSF1_FASYNC,            OSF1_FASYNC,            FASYNC          },
        !           122:     {  0                                                               }
        !           123: };
        !           124:
        !           125: const struct emul_flags_xtab osf1_mmap_flags_xtab[] = {
        !           126:     {  OSF1_MAP_SHARED,        OSF1_MAP_SHARED,        MAP_SHARED      },
        !           127:     {  OSF1_MAP_PRIVATE,       OSF1_MAP_PRIVATE,       MAP_PRIVATE     },
        !           128:     {  OSF1_MAP_TYPE,          OSF1_MAP_FILE,          MAP_FILE        },
        !           129:     {  OSF1_MAP_TYPE,          OSF1_MAP_ANON,          MAP_ANON        },
        !           130:     {  OSF1_MAP_FIXED,         OSF1_MAP_FIXED,         MAP_FIXED       },
        !           131: #if 0 /* pseudo-flag, and the default */
        !           132:     {  OSF1_MAP_VARIABLE,      OSF1_MAP_VARIABLE,      0               },
        !           133: #endif
        !           134:     {  OSF1_MAP_HASSEMAPHORE,  OSF1_MAP_HASSEMAPHORE,  MAP_HASSEMAPHORE },
        !           135:     {  OSF1_MAP_INHERIT,       OSF1_MAP_INHERIT,       MAP_INHERIT     },
        !           136: #if 0 /* no equivalent +++ */
        !           137:     {  OSF1_MAP_UNALIGNED,     OSF1_MAP_UNALIGNED,     ???             },
        !           138: #endif
        !           139:     {  0                                                               }
        !           140: };
        !           141:
        !           142: const struct emul_flags_xtab osf1_mmap_prot_xtab[] = {
        !           143: #if 0 /* pseudo-flag */
        !           144:     {  OSF1_PROT_NONE,         OSF1_PROT_NONE,         PROT_NONE       },
        !           145: #endif
        !           146:     {  OSF1_PROT_READ,         OSF1_PROT_READ,         PROT_READ       },
        !           147:     {  OSF1_PROT_WRITE,        OSF1_PROT_WRITE,        PROT_READ|PROT_WRITE },
        !           148:     {  OSF1_PROT_EXEC,         OSF1_PROT_EXEC,         PROT_READ|PROT_EXEC },
        !           149:     {  0                                                               }
        !           150: };
        !           151:
        !           152: const struct emul_flags_xtab osf1_nfs_mount_flags_xtab[] = {
        !           153:     {  OSF1_NFSMNT_SOFT,       OSF1_NFSMNT_SOFT,       NFSMNT_SOFT,    },
        !           154:     {  OSF1_NFSMNT_WSIZE,      OSF1_NFSMNT_WSIZE,      NFSMNT_WSIZE,   },
        !           155:     {  OSF1_NFSMNT_RSIZE,      OSF1_NFSMNT_RSIZE,      NFSMNT_RSIZE,   },
        !           156:     {  OSF1_NFSMNT_TIMEO,      OSF1_NFSMNT_TIMEO,      NFSMNT_TIMEO,   },
        !           157:     {  OSF1_NFSMNT_RETRANS,    OSF1_NFSMNT_RETRANS,    NFSMNT_RETRANS, },
        !           158: #if 0 /* no equivalent; needs special handling, see below */
        !           159:     {  OSF1_NFSMNT_HOSTNAME,   OSF1_NFSMNT_HOSTNAME,   ???,            },
        !           160: #endif
        !           161:     {  OSF1_NFSMNT_INT,        OSF1_NFSMNT_INT,        NFSMNT_INT,     },
        !           162:     {  OSF1_NFSMNT_NOCONN,     OSF1_NFSMNT_NOCONN,     NFSMNT_NOCONN,  },
        !           163: #if 0 /* no equivalents */
        !           164:     {  OSF1_NFSMNT_NOAC,       OSF1_NFSMNT_NOAC,       ???,            },
        !           165:     {  OSF1_NFSMNT_ACREGMIN,   OSF1_NFSMNT_ACREGMIN,   ???,            },
        !           166:     {  OSF1_NFSMNT_ACREGMAX,   OSF1_NFSMNT_ACREGMAX,   ???,            },
        !           167:     {  OSF1_NFSMNT_ACDIRMIN,   OSF1_NFSMNT_ACDIRMIN,   ???,            },
        !           168:     {  OSF1_NFSMNT_ACDIRMAX,   OSF1_NFSMNT_ACDIRMAX,   ???,            },
        !           169:     {  OSF1_NFSMNT_NOCTO,      OSF1_NFSMNT_NOCTO,      ???,            },
        !           170:     {  OSF1_NFSMNT_POSIX,      OSF1_NFSMNT_POSIX,      ???,            },
        !           171:     {  OSF1_NFSMNT_AUTO,       OSF1_NFSMNT_AUTO,       ???,            },
        !           172:     {  OSF1_NFSMNT_SEC,        OSF1_NFSMNT_SEC,        ???,            },
        !           173:     {  OSF1_NFSMNT_TCP,        OSF1_NFSMNT_TCP,        ???,            },
        !           174:     {  OSF1_NFSMNT_PROPLIST,   OSF1_NFSMNT_PROPLIST,   ???,            },
        !           175: #endif
        !           176:     {  0                                                               }
        !           177: };
        !           178:
        !           179: const struct emul_flags_xtab osf1_open_flags_rxtab[] = {
        !           180:     {  O_ACCMODE,              O_RDONLY,               OSF1_O_RDONLY   },
        !           181:     {  O_ACCMODE,              O_WRONLY,               OSF1_O_WRONLY   },
        !           182:     {  O_ACCMODE,              O_RDWR,                 OSF1_O_RDWR     },
        !           183:     {  O_NONBLOCK,             O_NONBLOCK,             OSF1_O_NONBLOCK },
        !           184:     {  O_APPEND,               O_APPEND,               OSF1_O_APPEND   },
        !           185: #if 0 /* no equivalent +++ */
        !           186:     {  ???,                    ???,                    O_DEFER         },
        !           187: #endif
        !           188:     {  O_CREAT,                O_CREAT,                OSF1_O_CREAT    },
        !           189:     {  O_TRUNC,                O_TRUNC,                OSF1_O_TRUNC    },
        !           190:     {  O_EXCL,                 O_EXCL,                 OSF1_O_EXCL     },
        !           191:     {  O_NOCTTY,               O_NOCTTY,               OSF1_O_NOCTTY   },
        !           192:     {  O_SYNC,                 O_SYNC,                 OSF1_O_SYNC     },
        !           193:     {  O_NDELAY,               O_NDELAY,               OSF1_O_NDELAY   },
        !           194: #if 0 /* no equivalent, also same value as O_NDELAY! */
        !           195:     {  ???,                    ???,                    O_DRD           },
        !           196: #endif
        !           197:     {  O_DSYNC,                O_DSYNC,                OSF1_O_DSYNC    },
        !           198:     {  O_RSYNC,                O_RSYNC,                OSF1_O_RSYNC    },
        !           199:     {  0                                                               }
        !           200: };
        !           201:
        !           202: const struct emul_flags_xtab osf1_open_flags_xtab[] = {
        !           203:     {  OSF1_O_ACCMODE,         OSF1_O_RDONLY,          O_RDONLY        },
        !           204:     {  OSF1_O_ACCMODE,         OSF1_O_WRONLY,          O_WRONLY        },
        !           205:     {  OSF1_O_ACCMODE,         OSF1_O_RDWR,            O_RDWR          },
        !           206:     {  OSF1_O_NONBLOCK,        OSF1_O_NONBLOCK,        O_NONBLOCK      },
        !           207:     {  OSF1_O_APPEND,          OSF1_O_APPEND,          O_APPEND        },
        !           208: #if 0 /* no equivalent +++ */
        !           209:     {  OSF1_O_DEFER,           OSF1_O_DEFER,           ???             },
        !           210: #endif
        !           211:     {  OSF1_O_CREAT,           OSF1_O_CREAT,           O_CREAT         },
        !           212:     {  OSF1_O_TRUNC,           OSF1_O_TRUNC,           O_TRUNC         },
        !           213:     {  OSF1_O_EXCL,            OSF1_O_EXCL,            O_EXCL          },
        !           214:     {  OSF1_O_NOCTTY,          OSF1_O_NOCTTY,          O_NOCTTY        },
        !           215:     {  OSF1_O_SYNC,            OSF1_O_SYNC,            O_SYNC          },
        !           216:     {  OSF1_O_NDELAY,          OSF1_O_NDELAY,          O_NDELAY        },
        !           217: #if 0 /* no equivalent, also same value as O_NDELAY! */
        !           218:     {  OSF1_O_DRD,             OSF1_O_DRD,             ???             },
        !           219: #endif
        !           220:     {  OSF1_O_DSYNC,           OSF1_O_DSYNC,           O_DSYNC         },
        !           221:     {  OSF1_O_RSYNC,           OSF1_O_RSYNC,           O_RSYNC         },
        !           222:     {  0                                                               }
        !           223: };
        !           224:
        !           225: const struct emul_flags_xtab osf1_reboot_opt_xtab[] = {
        !           226: #if 0 /* pseudo-flag */
        !           227:     {  OSF1_RB_AUTOBOOT,       OSF1_RB_AUTOBOOT,       RB_AUTOBOOT     },
        !           228: #endif
        !           229:     {  OSF1_RB_ASKNAME,        OSF1_RB_ASKNAME,        RB_ASKNAME      },
        !           230:     {  OSF1_RB_SINGLE,         OSF1_RB_SINGLE,         RB_SINGLE       },
        !           231:     {  OSF1_RB_NOSYNC,         OSF1_RB_NOSYNC,         RB_NOSYNC       },
        !           232: #if 0 /* same value as O_NDELAY, only used at boot time? */
        !           233:     {  OSF1_RB_KDB,            OSF1_RB_KDB,            RB_KDB          },
        !           234: #endif
        !           235:     {  OSF1_RB_HALT,           OSF1_RB_HALT,           RB_HALT         },
        !           236:     {  OSF1_RB_INITNAME,       OSF1_RB_INITNAME,       RB_INITNAME     },
        !           237:     {  OSF1_RB_DFLTROOT,       OSF1_RB_DFLTROOT,       RB_DFLTROOT     },
        !           238: #if 0 /* no equivalents +++ */
        !           239:     {  OSF1_RB_ALTBOOT,        OSF1_RB_ALTBOOT,        ???             },
        !           240:     {  OSF1_RB_UNIPROC,        OSF1_RB_UNIPROC,        ???             },
        !           241:     {  OSF1_RB_PARAM,          OSF1_RB_PARAM,          ???             },
        !           242: #endif
        !           243:     {  OSF1_RB_DUMP,           OSF1_RB_DUMP,           RB_DUMP         },
        !           244:     {  0                                                               }
        !           245: };
        !           246:
        !           247: const struct emul_flags_xtab osf1_sendrecv_msg_flags_xtab[] = {
        !           248:     {  OSF1_MSG_OOB,           OSF1_MSG_OOB,           MSG_OOB         },
        !           249:     {  OSF1_MSG_PEEK,          OSF1_MSG_PEEK,          MSG_PEEK        },
        !           250:     {  OSF1_MSG_DONTROUTE,     OSF1_MSG_DONTROUTE,     MSG_DONTROUTE   },
        !           251:     {  OSF1_MSG_EOR,           OSF1_MSG_EOR,           MSG_EOR         },
        !           252:     {  OSF1_MSG_TRUNC,         OSF1_MSG_TRUNC,         MSG_TRUNC       },
        !           253:     {  OSF1_MSG_CTRUNC,        OSF1_MSG_CTRUNC,        MSG_CTRUNC      },
        !           254:     {  OSF1_MSG_WAITALL,       OSF1_MSG_WAITALL,       MSG_WAITALL     },
        !           255:     {  0                                                               }
        !           256: };
        !           257:
        !           258: const struct emul_flags_xtab osf1_sigaction_flags_rxtab[] = {
        !           259:     {  SA_ONSTACK,             SA_ONSTACK,             OSF1_SA_ONSTACK },
        !           260:     {  SA_RESTART,             SA_RESTART,             OSF1_SA_RESTART },
        !           261:     {  SA_NOCLDSTOP,           SA_NOCLDSTOP,           OSF1_SA_NOCLDSTOP },
        !           262:     {  SA_NODEFER,             SA_NODEFER,             OSF1_SA_NODEFER },
        !           263:     {  SA_RESETHAND,           SA_RESETHAND,           OSF1_SA_RESETHAND },
        !           264:     {  SA_NOCLDWAIT,           SA_NOCLDWAIT,           OSF1_SA_NOCLDWAIT },
        !           265: #if 0 /* XXX not yet */
        !           266:     {  SA_SIGINFO,             SA_SIGINFO,             OSF1_SA_SIGINFO },
        !           267: #endif
        !           268:     {  0                                                               },
        !           269: };
        !           270:
        !           271: const struct emul_flags_xtab osf1_sigaction_flags_xtab[] = {
        !           272:     {  OSF1_SA_ONSTACK,        OSF1_SA_ONSTACK,        SA_ONSTACK      },
        !           273:     {  OSF1_SA_RESTART,        OSF1_SA_RESTART,        SA_RESTART      },
        !           274:     {  OSF1_SA_NOCLDSTOP,      OSF1_SA_NOCLDSTOP,      SA_NOCLDSTOP    },
        !           275:     {  OSF1_SA_NODEFER,        OSF1_SA_NODEFER,        SA_NODEFER      },
        !           276:     {  OSF1_SA_RESETHAND,      OSF1_SA_RESETHAND,      SA_RESETHAND    },
        !           277:     {  OSF1_SA_NOCLDWAIT,      OSF1_SA_NOCLDWAIT,      SA_NOCLDWAIT    },
        !           278: #if 0 /* XXX not yet */
        !           279:     {  OSF1_SA_SIGINFO,        OSF1_SA_SIGINFO,        SA_SIGINFO      },
        !           280: #endif
        !           281:     {  0                                                               },
        !           282: };
        !           283:
        !           284: const struct emul_flags_xtab osf1_sigaltstack_flags_rxtab[] = {
        !           285:     {  SS_ONSTACK,             SS_ONSTACK,             OSF1_SS_ONSTACK },
        !           286:     {  SS_DISABLE,             SS_DISABLE,             OSF1_SS_DISABLE },
        !           287: #if 0 /* XXX no equivalents */
        !           288:     {  ???,                    ???,                    OSF1_SS_NOMASK  },
        !           289:     {  ???,                    ???,                    OSF1_SS_UCONTEXT },
        !           290: #endif
        !           291:     {  0                                                               },
        !           292: };
        !           293:
        !           294: const struct emul_flags_xtab osf1_sigaltstack_flags_xtab[] = {
        !           295:     {  OSF1_SS_ONSTACK,        OSF1_SS_ONSTACK,        SS_ONSTACK      },
        !           296:     {  OSF1_SS_DISABLE,        OSF1_SS_DISABLE,        SS_DISABLE      },
        !           297: #if 0 /* XXX no equivalents */
        !           298:     {  OSF1_SS_NOMASK,         OSF1_SS_NOMASK,         ???             },
        !           299:     {  OSF1_SS_UCONTEXT,       OSF1_SS_UCONTEXT,       ???             },
        !           300: #endif
        !           301:     {  0                                                               },
        !           302: };
        !           303:
        !           304: const struct emul_flags_xtab osf1_wait_options_xtab[] = {
        !           305:     {  OSF1_WNOHANG,           OSF1_WNOHANG,           WNOHANG         },
        !           306:     {  OSF1_WUNTRACED,         OSF1_WUNTRACED,         WUNTRACED       },
        !           307:     {  0                                                               }
        !           308: };
        !           309:
        !           310: void
        !           311: osf1_cvt_flock_from_native(nf, of)
        !           312:        const struct flock *nf;
        !           313:        struct osf1_flock *of;
        !           314: {
        !           315:
        !           316:        memset(of, 0, sizeof *of);
        !           317:
        !           318:        of->l_start = nf->l_start;
        !           319:        of->l_len = nf->l_len;
        !           320:        of->l_pid = nf->l_pid;
        !           321:
        !           322:        switch (nf->l_type) {
        !           323:        case F_RDLCK:
        !           324:                of->l_type = OSF1_F_RDLCK;
        !           325:                break;
        !           326:
        !           327:        case F_WRLCK:
        !           328:                of->l_type = OSF1_F_WRLCK;
        !           329:                break;
        !           330:
        !           331:        case F_UNLCK:
        !           332:                of->l_type = OSF1_F_UNLCK;
        !           333:                break;
        !           334:        }
        !           335:
        !           336:        switch (nf->l_whence) {
        !           337:        case SEEK_SET:
        !           338:                of->l_whence = OSF1_SEEK_SET;
        !           339:                break;
        !           340:
        !           341:        case SEEK_CUR:
        !           342:                of->l_whence = OSF1_SEEK_CUR;
        !           343:                break;
        !           344:
        !           345:        case SEEK_END:
        !           346:                of->l_whence = OSF1_SEEK_END;
        !           347:                break;
        !           348:        }
        !           349: }
        !           350:
        !           351: int
        !           352: osf1_cvt_flock_to_native(of, nf)
        !           353:        const struct osf1_flock *of;
        !           354:        struct flock *nf;
        !           355: {
        !           356:
        !           357:        memset(nf, 0, sizeof *nf);
        !           358:
        !           359:        nf->l_start = of->l_start;
        !           360:        nf->l_len = of->l_len;
        !           361:        nf->l_pid = of->l_pid;
        !           362:
        !           363:        switch (of->l_type) {
        !           364:        case OSF1_F_RDLCK:
        !           365:                nf->l_type = F_RDLCK;
        !           366:                break;
        !           367:
        !           368:        case OSF1_F_WRLCK:
        !           369:                nf->l_type = F_WRLCK;
        !           370:                break;
        !           371:
        !           372:        case OSF1_F_UNLCK:
        !           373:                nf->l_type = F_UNLCK;
        !           374:                break;
        !           375:
        !           376:        default:
        !           377:                return (EINVAL);
        !           378:        }
        !           379:
        !           380:        switch (of->l_whence) {
        !           381:        case OSF1_SEEK_SET:
        !           382:                nf->l_whence = SEEK_SET;
        !           383:                break;
        !           384:
        !           385:        case OSF1_SEEK_CUR:
        !           386:                nf->l_whence = SEEK_CUR;
        !           387:                break;
        !           388:
        !           389:        case OSF1_SEEK_END:
        !           390:                nf->l_whence = SEEK_END;
        !           391:                break;
        !           392:
        !           393:        default:
        !           394:                return (EINVAL);
        !           395:        }
        !           396:
        !           397:        return (0);
        !           398: }
        !           399:
        !           400: int
        !           401: osf1_cvt_msghdr_xopen_to_native(omh, bmh)
        !           402:        const struct osf1_msghdr_xopen *omh;
        !           403:        struct msghdr *bmh;
        !           404: {
        !           405:        unsigned long leftovers;
        !           406:
        !           407:        memset(bmh, 0, sizeof *bmh);
        !           408:        bmh->msg_name = omh->msg_name;          /* XXX sockaddr translation */
        !           409:        bmh->msg_namelen = omh->msg_namelen;
        !           410:        bmh->msg_iov = NULL;                    /* iovec xlation separate */
        !           411:        bmh->msg_iovlen = omh->msg_iovlen;
        !           412:
        !           413:        /* XXX we don't translate control messages (yet) */
        !           414:        if (bmh->msg_control != NULL || bmh->msg_controllen != 0)
        !           415: {
        !           416: printf("osf1_cvt_msghdr_xopen_to_native: control\n");
        !           417:                return (EINVAL);
        !           418: }
        !           419:
        !           420:         /* translate flags */
        !           421:         bmh->msg_flags = emul_flags_translate(osf1_sendrecv_msg_flags_xtab,
        !           422:             omh->msg_flags, &leftovers);
        !           423:         if (leftovers != 0)
        !           424: {
        !           425: printf("osf1_cvt_msghdr_xopen_to_native: leftovers 0x%lx\n", leftovers);
        !           426:                 return (EINVAL);
        !           427: }
        !           428:
        !           429:        return (0);
        !           430: }
        !           431:
        !           432: int
        !           433: osf1_cvt_pathconf_name_to_native(oname, bnamep)
        !           434:        int oname, *bnamep;
        !           435: {
        !           436:        int error;
        !           437:
        !           438:        error  = 0;
        !           439:        switch (oname) {
        !           440:        case OSF1__PC_CHOWN_RESTRICTED:
        !           441:                *bnamep = _PC_CHOWN_RESTRICTED;
        !           442:                break;
        !           443:
        !           444:        case OSF1__PC_LINK_MAX:
        !           445:                *bnamep = _PC_LINK_MAX;
        !           446:                break;
        !           447:
        !           448:        case OSF1__PC_MAX_CANON:
        !           449:                *bnamep = _PC_MAX_CANON;
        !           450:                break;
        !           451:
        !           452:        case OSF1__PC_MAX_INPUT:
        !           453:                *bnamep = _PC_MAX_INPUT;
        !           454:                break;
        !           455:
        !           456:        case OSF1__PC_NAME_MAX:
        !           457:                *bnamep = _PC_NAME_MAX;
        !           458:                break;
        !           459:
        !           460:        case OSF1__PC_NO_TRUNC:
        !           461:                *bnamep = _PC_NO_TRUNC;
        !           462:                break;
        !           463:
        !           464:        case OSF1__PC_PATH_MAX:
        !           465:                *bnamep = _PC_PATH_MAX;
        !           466:                break;
        !           467:
        !           468:        case OSF1__PC_PIPE_BUF:
        !           469:                *bnamep = _PC_PIPE_BUF;
        !           470:                break;
        !           471:
        !           472:        case OSF1__PC_VDISABLE:
        !           473:                *bnamep = _PC_VDISABLE;
        !           474:                break;
        !           475:
        !           476:        default:
        !           477:                error = EINVAL;
        !           478:                break;
        !           479:        }
        !           480:
        !           481:        return (error);
        !           482: }
        !           483:
        !           484: /*
        !           485:  * Convert from as rusage structure to an osf1 rusage structure.
        !           486:  */
        !           487: void
        !           488: osf1_cvt_rusage_from_native(ru, oru)
        !           489:        const struct rusage *ru;
        !           490:        struct osf1_rusage *oru;
        !           491: {
        !           492:
        !           493:        oru->ru_utime.tv_sec = ru->ru_utime.tv_sec;
        !           494:        oru->ru_utime.tv_usec = ru->ru_utime.tv_usec;
        !           495:
        !           496:        oru->ru_stime.tv_sec = ru->ru_stime.tv_sec;
        !           497:        oru->ru_stime.tv_usec = ru->ru_stime.tv_usec;
        !           498:
        !           499:        oru->ru_maxrss = ru->ru_maxrss;
        !           500:        oru->ru_ixrss = ru->ru_ixrss;
        !           501:        oru->ru_idrss = ru->ru_idrss;
        !           502:        oru->ru_isrss = ru->ru_isrss;
        !           503:        oru->ru_minflt = ru->ru_minflt;
        !           504:        oru->ru_majflt = ru->ru_majflt;
        !           505:        oru->ru_nswap = ru->ru_nswap;
        !           506:        oru->ru_inblock = ru->ru_inblock;
        !           507:        oru->ru_oublock = ru->ru_oublock;
        !           508:        oru->ru_msgsnd = ru->ru_msgsnd;
        !           509:        oru->ru_msgrcv = ru->ru_msgrcv;
        !           510:        oru->ru_nsignals = ru->ru_nsignals;
        !           511:        oru->ru_nvcsw = ru->ru_nvcsw;
        !           512:        oru->ru_nivcsw = ru->ru_nivcsw;
        !           513: }
        !           514:
        !           515: /*
        !           516:  * XXX: Only a subset of the flags is currently implemented.
        !           517:  */
        !           518: void
        !           519: osf1_cvt_sigaction_from_native(bsa, osa)
        !           520:        const struct sigaction *bsa;
        !           521:        struct osf1_sigaction *osa;
        !           522: {
        !           523:        osa->sa__handler = bsa->sa_handler;
        !           524:         osf1_cvt_sigset_from_native(&bsa->sa_mask, &osa->sa_mask);
        !           525:         osa->sa_flags = 0;
        !           526:
        !           527:        /* Translate by hand */
        !           528:         if ((bsa->sa_flags & SA_ONSTACK) != 0)
        !           529:                 osa->sa_flags |= OSF1_SA_ONSTACK;
        !           530:         if ((bsa->sa_flags & SA_RESTART) != 0)
        !           531:                 osa->sa_flags |= OSF1_SA_RESTART;
        !           532:         if ((bsa->sa_flags & SA_NOCLDSTOP) != 0)
        !           533:                 osa->sa_flags |= OSF1_SA_NOCLDSTOP;
        !           534:         if ((bsa->sa_flags & SA_NOCLDWAIT) != 0)
        !           535:                 osa->sa_flags |= OSF1_SA_NOCLDWAIT;
        !           536:         if ((bsa->sa_flags & SA_NODEFER) != 0)
        !           537:                 osa->sa_flags |= OSF1_SA_NODEFER;
        !           538:         if ((bsa->sa_flags & SA_RESETHAND) != 0)
        !           539:                 osa->sa_flags |= OSF1_SA_RESETHAND;
        !           540:         if ((bsa->sa_flags & SA_SIGINFO) != 0)
        !           541:                 osa->sa_flags |= OSF1_SA_SIGINFO;
        !           542: }
        !           543:
        !           544: int
        !           545: osf1_cvt_sigaction_to_native(osa, bsa)
        !           546:        const struct osf1_sigaction *osa;
        !           547:        struct sigaction *bsa;
        !           548: {
        !           549:         bsa->sa_handler = osa->sa__handler;
        !           550:         osf1_cvt_sigset_to_native(&osa->sa_mask, &bsa->sa_mask);
        !           551:         bsa->sa_flags = 0;
        !           552:
        !           553:        /* Translate by hand */
        !           554:         if ((osa->sa_flags & OSF1_SA_ONSTACK) != 0)
        !           555:                 bsa->sa_flags |= SA_ONSTACK;
        !           556:         if ((osa->sa_flags & OSF1_SA_RESTART) != 0)
        !           557:                 bsa->sa_flags |= SA_RESTART;
        !           558:         if ((osa->sa_flags & OSF1_SA_RESETHAND) != 0)
        !           559:                 bsa->sa_flags |= SA_RESETHAND;
        !           560:         if ((osa->sa_flags & OSF1_SA_NOCLDSTOP) != 0)
        !           561:                 bsa->sa_flags |= SA_NOCLDSTOP;
        !           562:         if ((osa->sa_flags & OSF1_SA_NOCLDWAIT) != 0)
        !           563:                 bsa->sa_flags |= SA_NOCLDWAIT;
        !           564:         if ((osa->sa_flags & OSF1_SA_NODEFER) != 0)
        !           565:                 bsa->sa_flags |= SA_NODEFER;
        !           566:         if ((osa->sa_flags & OSF1_SA_SIGINFO) != 0)
        !           567:                 bsa->sa_flags |= SA_SIGINFO;
        !           568:
        !           569:        return(0);
        !           570: }
        !           571:
        !           572: void
        !           573: osf1_cvt_sigaltstack_from_native(bss, oss)
        !           574:        const struct sigaltstack *bss;
        !           575:        struct osf1_sigaltstack *oss;
        !           576: {
        !           577:
        !           578:        oss->ss_sp = bss->ss_sp;
        !           579:        oss->ss_size = bss->ss_size;
        !           580:
        !           581:         /* translate flags */
        !           582:        oss->ss_flags = emul_flags_translate(osf1_sigaltstack_flags_rxtab,
        !           583:             bss->ss_flags, NULL);
        !           584: }
        !           585:
        !           586: int
        !           587: osf1_cvt_sigaltstack_to_native(oss, bss)
        !           588:        const struct osf1_sigaltstack *oss;
        !           589:        struct sigaltstack *bss;
        !           590: {
        !           591:        unsigned long leftovers;
        !           592:
        !           593:        bss->ss_sp = oss->ss_sp;
        !           594:        bss->ss_size = oss->ss_size;
        !           595:
        !           596:         /* translate flags */
        !           597:        bss->ss_flags = emul_flags_translate(osf1_sigaltstack_flags_xtab,
        !           598:             oss->ss_flags, &leftovers);
        !           599:
        !           600:        if (leftovers != 0) {
        !           601:                printf("osf1_cvt_sigaltstack_to_native: leftovers = 0x%lx\n",
        !           602:                    leftovers);
        !           603:                return (EINVAL);
        !           604:        }
        !           605:
        !           606:        return (0);
        !           607: }
        !           608:
        !           609: void
        !           610: osf1_cvt_sigset_from_native(bss, oss)
        !           611:        const sigset_t *bss;
        !           612:        osf1_sigset_t *oss;
        !           613: {
        !           614:        int i, newsig;
        !           615:
        !           616:        osf1_sigemptyset(oss);
        !           617:        for (i = 1; i < NSIG; i++) {
        !           618:                if (sigismember(bss, i)) {
        !           619:                        newsig = osf1_signal_rxlist[i];
        !           620:                        if (newsig)
        !           621:                                osf1_sigaddset(oss, newsig);
        !           622:                }
        !           623:        }
        !           624: }
        !           625:
        !           626: int
        !           627: osf1_cvt_sigset_to_native(oss, bss)
        !           628:        const osf1_sigset_t *oss;
        !           629:        sigset_t *bss;
        !           630: {
        !           631:        int i, newsig;
        !           632:
        !           633:        sigemptyset(bss);
        !           634:        for (i = 1; i < OSF1_NSIG; i++) {
        !           635:                if (osf1_sigismember(oss, i)) {
        !           636:                        newsig = osf1_signal_xlist[i];
        !           637:                        if (newsig)
        !           638:                                sigaddset(bss, newsig);
        !           639:                }
        !           640:        }
        !           641:        return (0);
        !           642: }
        !           643:
        !           644: /*
        !           645:  * Convert from a stat structure to an osf1 stat structure.
        !           646:  */
        !           647: void
        !           648: osf1_cvt_stat_from_native(st, ost)
        !           649:        const struct stat *st;
        !           650:        struct osf1_stat *ost;
        !           651: {
        !           652:
        !           653:        ost->st_dev = osf1_cvt_dev_from_native(st->st_dev);
        !           654:        ost->st_ino = st->st_ino;
        !           655:        ost->st_mode = st->st_mode;
        !           656:        ost->st_nlink = st->st_nlink;
        !           657:        ost->st_uid = st->st_uid == -2 ? (u_int16_t) -2 : st->st_uid;
        !           658:        ost->st_gid = st->st_gid == -2 ? (u_int16_t) -2 : st->st_gid;
        !           659:        ost->st_rdev = osf1_cvt_dev_from_native(st->st_rdev);
        !           660:        ost->st_size = st->st_size;
        !           661:        ost->st_atime_sec = st->st_atime;
        !           662:        ost->st_spare1 = 0;
        !           663:        ost->st_mtime_sec = st->st_mtime;
        !           664:        ost->st_spare2 = 0;
        !           665:        ost->st_ctime_sec = st->st_ctime;
        !           666:        ost->st_spare3 = 0;
        !           667:        ost->st_blksize = st->st_blksize;
        !           668:        ost->st_blocks = st->st_blocks;
        !           669:        ost->st_flags = st->st_flags;
        !           670:        ost->st_gen = st->st_gen;
        !           671: }
        !           672:
        !           673: void
        !           674: osf1_cvt_statfs_from_native(bsfs, osfs)
        !           675:        const struct statfs *bsfs;
        !           676:        struct osf1_statfs *osfs;
        !           677: {
        !           678:
        !           679:        memset(osfs, 0, sizeof (struct osf1_statfs));
        !           680:        if (!strncmp(MOUNT_FFS, bsfs->f_fstypename, MFSNAMELEN))
        !           681:                osfs->f_type = OSF1_MOUNT_UFS;
        !           682:        else if (!strncmp(MOUNT_NFS, bsfs->f_fstypename, MFSNAMELEN))
        !           683:                osfs->f_type = OSF1_MOUNT_NFS;
        !           684:        else if (!strncmp(MOUNT_MFS, bsfs->f_fstypename, MFSNAMELEN))
        !           685:                osfs->f_type = OSF1_MOUNT_MFS;
        !           686:        else
        !           687:                /* uh oh...  XXX = PC, CDFS, PROCFS, etc. */
        !           688:                osfs->f_type = OSF1_MOUNT_ADDON;
        !           689:        osfs->f_flags = bsfs->f_flags;          /* XXX translate */
        !           690:        osfs->f_fsize = bsfs->f_bsize;
        !           691:        osfs->f_bsize = bsfs->f_iosize;
        !           692:        osfs->f_blocks = bsfs->f_blocks;
        !           693:        osfs->f_bfree = bsfs->f_bfree;
        !           694:        osfs->f_bavail = bsfs->f_bavail;
        !           695:        osfs->f_files = bsfs->f_files;
        !           696:        osfs->f_ffree = bsfs->f_ffree;
        !           697:        memcpy(&osfs->f_fsid, &bsfs->f_fsid,
        !           698:            max(sizeof bsfs->f_fsid, sizeof osfs->f_fsid));
        !           699:        /* osfs->f_spare zeroed above */
        !           700:        memcpy(osfs->f_mntonname, bsfs->f_mntonname,
        !           701:            max(sizeof bsfs->f_mntonname, sizeof osfs->f_mntonname));
        !           702:        memcpy(osfs->f_mntfromname, bsfs->f_mntfromname,
        !           703:            max(sizeof bsfs->f_mntfromname, sizeof osfs->f_mntfromname));
        !           704:        /* XXX osfs->f_xxx should be filled in... */
        !           705: }

CVSweb