linux_file.c (72543) | linux_file.c (73286) |
---|---|
1/*- 2 * Copyright (c) 1994-1995 S�ren Schmidt 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * | 1/*- 2 * Copyright (c) 1994-1995 S�ren Schmidt 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * |
28 * $FreeBSD: head/sys/compat/linux/linux_file.c 72543 2001-02-16 16:40:43Z jlemon $ | 28 * $FreeBSD: head/sys/compat/linux/linux_file.c 73286 2001-03-01 21:00:17Z adrian $ |
29 */ 30 31#include "opt_compat.h" 32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/sysproto.h> 36#include <sys/fcntl.h> --- 859 unchanged lines hidden (view full) --- 896 bsd.nbyte = uap->nbyte; 897 bsd.offset = uap->offset; 898 return pwrite(p, &bsd); 899} 900 901int 902linux_mount(struct proc *p, struct linux_mount_args *args) 903{ | 29 */ 30 31#include "opt_compat.h" 32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/sysproto.h> 36#include <sys/fcntl.h> --- 859 unchanged lines hidden (view full) --- 896 bsd.nbyte = uap->nbyte; 897 bsd.offset = uap->offset; 898 return pwrite(p, &bsd); 899} 900 901int 902linux_mount(struct proc *p, struct linux_mount_args *args) 903{ |
904 struct mount_args bsd_args; | |
905 struct ufs_args ufs; 906 char fstypename[MFSNAMELEN]; 907 char mntonname[MNAMELEN], mntfromname[MNAMELEN]; | 904 struct ufs_args ufs; 905 char fstypename[MFSNAMELEN]; 906 char mntonname[MNAMELEN], mntfromname[MNAMELEN]; |
908 int error = 0; | 907 int error; 908 int fsflags; 909 const char *fstype; 910 void *fsdata; |
909 | 911 |
910 error = copyinstr(args->filesystemtype, fstypename, 911 MFSNAMELEN - 1, NULL); | 912 error = copyinstr(args->filesystemtype, fstypename, MFSNAMELEN - 1, 913 NULL); |
912 if (error) 913 return (error); 914 error = copyinstr(args->specialfile, mntfromname, MFSNAMELEN - 1, NULL); 915 if (error) 916 return (error); 917 error = copyinstr(args->dir, mntonname, MFSNAMELEN - 1, NULL); 918 if (error) 919 return (error); 920 921#ifdef DEBUG 922 if (ldebug(mount)) 923 printf(ARGS(mount, "%s, %s, %s"), 924 fstypename, mntfromname, mntonname); 925#endif 926 927 if (strcmp(fstypename, "ext2") == 0) { | 914 if (error) 915 return (error); 916 error = copyinstr(args->specialfile, mntfromname, MFSNAMELEN - 1, NULL); 917 if (error) 918 return (error); 919 error = copyinstr(args->dir, mntonname, MFSNAMELEN - 1, NULL); 920 if (error) 921 return (error); 922 923#ifdef DEBUG 924 if (ldebug(mount)) 925 printf(ARGS(mount, "%s, %s, %s"), 926 fstypename, mntfromname, mntonname); 927#endif 928 929 if (strcmp(fstypename, "ext2") == 0) { |
928 bsd_args.type = "ext2fs"; 929 bsd_args.data = (void *)&ufs; | 930 fstype = "ext2fs"; 931 fsdata = &ufs; |
930 ufs.fspec = mntfromname; 931#define DEFAULT_ROOTID -2 932 ufs.export.ex_root = DEFAULT_ROOTID; 933 ufs.export.ex_flags = 934 args->rwflag & LINUX_MS_RDONLY ? MNT_EXRDONLY : 0; 935 } else if (strcmp(fstypename, "proc") == 0) { | 932 ufs.fspec = mntfromname; 933#define DEFAULT_ROOTID -2 934 ufs.export.ex_root = DEFAULT_ROOTID; 935 ufs.export.ex_flags = 936 args->rwflag & LINUX_MS_RDONLY ? MNT_EXRDONLY : 0; 937 } else if (strcmp(fstypename, "proc") == 0) { |
936 bsd_args.type = "linprocfs"; 937 bsd_args.data = NULL; | 938 fstype = "linprocfs"; 939 fsdata = NULL; |
938 } else { 939 return (ENODEV); 940 } 941 | 940 } else { 941 return (ENODEV); 942 } 943 |
942 bsd_args.path = mntonname; 943 bsd_args.flags = 0; | 944 fsflags = 0; |
944 945 if ((args->rwflag & 0xffff0000) == 0xc0ed0000) { 946 /* 947 * Linux SYNC flag is not included; the closest equivalent 948 * FreeBSD has is !ASYNC, which is our default. 949 */ 950 if (args->rwflag & LINUX_MS_RDONLY) | 945 946 if ((args->rwflag & 0xffff0000) == 0xc0ed0000) { 947 /* 948 * Linux SYNC flag is not included; the closest equivalent 949 * FreeBSD has is !ASYNC, which is our default. 950 */ 951 if (args->rwflag & LINUX_MS_RDONLY) |
951 bsd_args.flags |= MNT_RDONLY; | 952 fsflags |= MNT_RDONLY; |
952 if (args->rwflag & LINUX_MS_NOSUID) | 953 if (args->rwflag & LINUX_MS_NOSUID) |
953 bsd_args.flags |= MNT_NOSUID; | 954 fsflags |= MNT_NOSUID; |
954 if (args->rwflag & LINUX_MS_NODEV) | 955 if (args->rwflag & LINUX_MS_NODEV) |
955 bsd_args.flags |= MNT_NODEV; | 956 fsflags |= MNT_NODEV; |
956 if (args->rwflag & LINUX_MS_NOEXEC) | 957 if (args->rwflag & LINUX_MS_NOEXEC) |
957 bsd_args.flags |= MNT_NOEXEC; | 958 fsflags |= MNT_NOEXEC; |
958 if (args->rwflag & LINUX_MS_REMOUNT) | 959 if (args->rwflag & LINUX_MS_REMOUNT) |
959 bsd_args.flags |= MNT_UPDATE; | 960 fsflags |= MNT_UPDATE; |
960 } 961 | 961 } 962 |
962 return (mount1(p, &bsd_args, UIO_SYSSPACE)); | 963 return (vfs_mount(p, fstype, mntonname, fsflags, fsdata)); |
963} 964 965int 966linux_umount(struct proc *p, struct linux_umount_args *args) 967{ 968 struct linux_umount2_args args2; 969 970 args2.path = args->path; --- 13 unchanged lines hidden --- | 964} 965 966int 967linux_umount(struct proc *p, struct linux_umount_args *args) 968{ 969 struct linux_umount2_args args2; 970 971 args2.path = args->path; --- 13 unchanged lines hidden --- |