Deleted Added
full compact
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 ---