FreeBSD Bugzilla – Attachment 10979 Details for
Bug 21809
[patches] Removes legacy code from msdosfs
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 11.70 KB, created by
mbendiks
on 2000-10-07 05:40:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
mbendiks
Created:
2000-10-07 05:40:01 UTC
Size:
11.70 KB
patch
obsolete
>--- ./bootsect.h.orig Sat Aug 28 02:48:06 1999 >+++ ./bootsect.h Sat Oct 7 04:25:01 2000 >@@ -70,24 +70,8 @@ > #define BOOTSIG1 0xaa > #define BOOTSIG2 0 > #define BOOTSIG3 0 > }; >-#ifdef atari >-/* >- * The boot sector on a gemdos fs is a little bit different from the msdos fs >- * format. Currently there is no need to declare a seperate structure, the >- * bootsector33 struct will do. >- */ >-#if 0 >-struct bootsec_atari { >- u_int8_t bsBranch[2]; /* branch inst if auto-boot */ >- int8_t bsFiller[6]; /* anything or nothing */ >- int8_t bsSerial[3]; /* serial no. for mediachange */ >- int8_t bsBPB[19]; /* BIOS parameter block */ >- int8_t bsBootCode[482]; /* pad so struct is 512b */ >-}; >-#endif >-#endif /* atari */ > > union bootsector { > struct bootsector33 bs33; > struct bootsector50 bs50; >--- ./bpb.h.orig Fri Aug 25 11:03:58 2000 >+++ ./bpb.h Sat Oct 7 04:25:01 2000 >@@ -80,30 +80,8 @@ > u_int16_t bpbBackup; /* backup boot sector */ > /* There is a 12 byte filler here, but we ignore it */ > }; > >-#ifdef atari >-/* >- * BPB for gemdos filesystems. Atari leaves the obsolete stuff undefined. >- * Currently there is no need for a separate BPB structure. >- */ >-#if 0 >-struct bpb_a { >- u_int16_t bpbBytesPerSec; /* bytes per sector */ >- u_int8_t bpbSecPerClust; /* sectors per cluster */ >- u_int16_t bpbResSectors; /* number of reserved sectors */ >- u_int8_t bpbFATs; /* number of FATs */ >- u_int16_t bpbRootDirEnts; /* number of root directory entries */ >- u_int16_t bpbSectors; /* total number of sectors */ >- u_int8_t bpbUseless1; /* meaningless on gemdos fs */ >- u_int16_t bpbFATsecs; /* number of sectors per FAT */ >- u_int16_t bpbUseless2; /* meaningless for harddisk fs */ >- u_int16_t bpbUseless3; /* meaningless for harddisk fs */ >- u_int16_t bpbHiddenSecs; /* the TOS-BIOS ignores this */ >-}; >-#endif >-#endif /* atari */ >- > /* > * The following structures represent how the bpb's look on disk. shorts > * and longs are just character arrays of the appropriate length. This is > * because the compiler forces shorts and longs to align on word or >--- ./fat.h.orig Wed Dec 29 05:54:53 1999 >+++ ./fat.h Sat Oct 7 04:25:01 2000 >@@ -70,13 +70,8 @@ > * Reference says if the maximum cluster number in a filesystem is greater > * than 4078 ((CLUST_RSRVS - CLUST_FIRST) & FAT12_MASK) then we've got a > * 16 bit fat filesystem. While mounting, the result of this test is stored > * in pm_fatentrysize. >- * GEMDOS-flavour (atari): >- * If the filesystem is on floppy we've got a 12 bit fat filesystem, otherwise >- * 16 bit. We check the d_type field in the disklabel struct while mounting >- * and store the result in the pm_fatentrysize. Note that this kind of >- * detection gets flakey when mounting a vnd-device. > */ > #define FAT12(pmp) (pmp->pm_fatmask == FAT12_MASK) > #define FAT16(pmp) (pmp->pm_fatmask == FAT16_MASK) > #define FAT32(pmp) (pmp->pm_fatmask == FAT32_MASK) >--- ./msdosfs_vfsops.c.orig Thu Jun 29 03:12:47 2000 >+++ ./msdosfs_vfsops.c Sat Oct 7 04:25:01 2000 >@@ -123,16 +123,8 @@ > bcopy(argp->ul, pmp->pm_ul, sizeof(pmp->pm_ul)); > bcopy(argp->lu, pmp->pm_lu, sizeof(pmp->pm_lu)); > } > >-#ifndef __FreeBSD__ >- /* >- * GEMDOS knows nothing (yet) about win95 >- */ >- if (pmp->pm_flags & MSDOSFSMNT_GEMDOSFS) >- pmp->pm_flags |= MSDOSFSMNT_NOWIN95; >-#endif >- > if (pmp->pm_flags & MSDOSFSMNT_NOWIN95) > pmp->pm_flags |= MSDOSFSMNT_SHORTNAME; > else if (!(pmp->pm_flags & > (MSDOSFSMNT_SHORTNAME | MSDOSFSMNT_LONGNAME))) { >@@ -154,69 +146,8 @@ > } > return 0; > } > >-#ifndef __FreeBSD__ >-int >-msdosfs_mountroot() >-{ >- register struct mount *mp; >- struct proc *p = curproc; /* XXX */ >- size_t size; >- int error; >- struct msdosfs_args args; >- >- if (root_device->dv_class != DV_DISK) >- return (ENODEV); >- >- /* >- * Get vnodes for swapdev and rootdev. >- */ >- if (bdevvp(rootdev, &rootvp)) >- panic("msdosfs_mountroot: can't setup rootvp"); >- >- mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); >- bzero((char *)mp, (u_long)sizeof(struct mount)); >- mp->mnt_op = &msdosfs_vfsops; >- mp->mnt_flag = 0; >- LIST_INIT(&mp->mnt_vnodelist); >- >- args.flags = 0; >- args.uid = 0; >- args.gid = 0; >- args.mask = 0777; >- >- if ((error = mountmsdosfs(rootvp, mp, p, &args)) != 0) { >- free(mp, M_MOUNT); >- return (error); >- } >- >- if ((error = update_mp(mp, &args)) != 0) { >- (void)msdosfs_unmount(mp, 0, p); >- free(mp, M_MOUNT); >- return (error); >- } >- >- if ((error = vfs_lock(mp)) != 0) { >- (void)msdosfs_unmount(mp, 0, p); >- free(mp, M_MOUNT); >- return (error); >- } >- >- TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list); >- mp->mnt_vnodecovered = NULLVP; >- (void) copystr("/", mp->mnt_stat.f_mntonname, MNAMELEN - 1, >- &size); >- bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size); >- (void) copystr(ROOTNAME, mp->mnt_stat.f_mntfromname, MNAMELEN - 1, >- &size); >- bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); >- (void)msdosfs_statfs(mp, &mp->mnt_stat, p); >- vfs_unlock(mp); >- return (0); >-} >-#endif >- > /* > * mp - path - addr in user space of mount point (ie /usr or whatever) > * data - addr in user space of mount params including the name of the block > * special file to treat as a filesystem. >@@ -236,8 +167,12 @@ > size_t size; > int error, flags; > mode_t accessmode; > >+ /* Check to see if we are mounting root */ >+ if (mp->mnt_flag & MNT_ROOTFS) >+ panic("msdosfs_mount: root support yanked"); >+ > error = copyin(data, (caddr_t)&args, sizeof(struct msdosfs_args)); > if (error) > return (error); > if (args.magic != MSDOSFS_ARGSMAGIC) >@@ -261,12 +196,12 @@ > if (error) > return (error); > if ((pmp->pm_flags & MSDOSFSMNT_RONLY) && (mp->mnt_kern_flag & MNTK_WANTRDWR)) { > /* >- * If upgrade to read-write by non-root, then verify >+ * If upgrade to read-write by regular user, then verify > * that user has necessary permissions on the device. > */ >- if (p->p_ucred->cr_uid != 0) { >+ if (suser(p)) { > devvp = pmp->pm_devvp; > vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p); > error = VOP_ACCESS(devvp, VREAD | VWRITE, > p->p_ucred, p); >@@ -278,9 +213,9 @@ > } > pmp->pm_flags &= ~MSDOSFSMNT_RONLY; > } > if (args.fspec == 0) { >-#ifdef __notyet__ /* doesn't work correctly with current mountd XXX */ >+#ifdef __notyet__ /* doesn't work correctly with current mountd XXX */ > if (args.flags & MSDOSFSMNT_MNTOPT) { > pmp->pm_flags &= ~MSDOSFSMNT_MNTOPT; > pmp->pm_flags |= args.flags & MSDOSFSMNT_MNTOPT; > if (pmp->pm_flags & MSDOSFSMNT_NOWIN95) >@@ -311,9 +246,9 @@ > /* > * If mount by non-root, then verify that user has necessary > * permissions on the device. > */ >- if (p->p_ucred->cr_uid != 0) { >+ if (suser(p)) { > accessmode = VREAD; > if ((mp->mnt_flag & MNT_RDONLY) == 0) > accessmode |= VWRITE; > vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p); >@@ -367,12 +302,8 @@ > { > struct msdosfsmount *pmp; > struct buf *bp; > dev_t dev = devvp->v_rdev; >-#ifndef __FreeBSD__ >- struct partinfo dpart; >- int bsize = 0, dtype = 0, tmp; >-#endif > union bootsector *bsp; > struct byte_bpb33 *b33; > struct byte_bpb50 *b50; > struct byte_bpb710 *b710; >@@ -406,34 +337,8 @@ > > bp = NULL; /* both used in error_exit */ > pmp = NULL; > >-#ifndef __FreeBSD__ >- if (argp->flags & MSDOSFSMNT_GEMDOSFS) { >- /* >- * We need the disklabel to calculate the size of a FAT entry >- * later on. Also make sure the partition contains a filesystem >- * of type FS_MSDOS. This doesn't work for floppies, so we have >- * to check for them too. >- * >- * At least some parts of the msdos fs driver seem to assume >- * that the size of a disk block will always be 512 bytes. >- * Let's check it... >- */ >- error = VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, >- FREAD, NOCRED, p); >- if (error) >- goto error_exit; >- tmp = dpart.part->p_fstype; >- dtype = dpart.disklab->d_type; >- bsize = dpart.disklab->d_secsize; >- if (bsize != 512 || (dtype!=DTYPE_FLOPPY && tmp!=FS_MSDOS)) { >- error = EINVAL; >- goto error_exit; >- } >- } >-#endif >- > /* > * Read the boot sector of the filesystem, and then check the > * boot signature. If not a dos boot sector then error out. > * >@@ -447,19 +352,13 @@ > b33 = (struct byte_bpb33 *)bsp->bs33.bsBPB; > b50 = (struct byte_bpb50 *)bsp->bs50.bsBPB; > b710 = (struct byte_bpb710 *)bsp->bs710.bsPBP; > >-#ifndef __FreeBSD__ >- if (!(argp->flags & MSDOSFSMNT_GEMDOSFS)) { >-#endif > #ifndef MSDOSFS_NOCHECKSIG >- if (bsp->bs50.bsBootSectSig0 != BOOTSIG0 >- || bsp->bs50.bsBootSectSig1 != BOOTSIG1) { >- error = EINVAL; >- goto error_exit; >- } >-#endif >-#ifndef __FreeBSD__ >+ if (bsp->bs50.bsBootSectSig0 != BOOTSIG0 >+ || bsp->bs50.bsBootSectSig1 != BOOTSIG1) { >+ error = EINVAL; >+ goto error_exit; > } > #endif > > pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK); >@@ -484,25 +383,19 @@ > > /* calculate the ratio of sector size to DEV_BSIZE */ > pmp->pm_BlkPerSec = pmp->pm_BytesPerSec / DEV_BSIZE; > >-#ifndef __FreeBSD__ >- if (!(argp->flags & MSDOSFSMNT_GEMDOSFS)) { >-#endif >- /* XXX - We should probably check more values here */ >- if (!pmp->pm_BytesPerSec || !SecPerClust >- || !pmp->pm_Heads || pmp->pm_Heads > 255 >+ /* XXX - We should probably check more values here */ >+ if (!pmp->pm_BytesPerSec || !SecPerClust >+ || !pmp->pm_Heads || pmp->pm_Heads > 255 > #ifdef PC98 >- || !pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 255) { >+ || !pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 255) { > #else >- || !pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 63) { >+ || !pmp->pm_SecPerTrack || pmp->pm_SecPerTrack > 63) { > #endif >- error = EINVAL; >- goto error_exit; >- } >-#ifndef __FreeBSD__ >+ error = EINVAL; >+ goto error_exit; > } >-#endif > > if (pmp->pm_Sectors == 0) { > pmp->pm_HiddenSects = getulong(b50->bpbHiddenSecs); > pmp->pm_HugeSectors = getulong(b50->bpbHugeSectors); >@@ -583,24 +476,8 @@ > pmp->pm_maxcluster = (pmp->pm_HugeSectors - pmp->pm_firstcluster) / > SecPerClust + 1; > pmp->pm_fatsize = pmp->pm_FATsecs * DEV_BSIZE; /* XXX not used? */ > >-#ifndef __FreeBSD__ >- if (argp->flags & MSDOSFSMNT_GEMDOSFS) { >- if ((pmp->pm_maxcluster <= (0xff0 - 2)) >- && ((dtype == DTYPE_FLOPPY) || ((dtype == DTYPE_VNODE) >- && ((pmp->pm_Heads == 1) || (pmp->pm_Heads == 2)))) >- ) { >- pmp->pm_fatmask = FAT12_MASK; >- pmp->pm_fatmult = 3; >- pmp->pm_fatdiv = 2; >- } else { >- pmp->pm_fatmask = FAT16_MASK; >- pmp->pm_fatmult = 2; >- pmp->pm_fatdiv = 1; >- } >- } else >-#endif > if (pmp->pm_fatmask == 0) { > if (pmp->pm_maxcluster > <= ((CLUST_RSRVD - CLUST_FIRST) & FAT12_MASK)) { > /* >--- ./msdosfs_vnops.c.orig Sat Oct 7 04:18:38 2000 >+++ ./msdosfs_vnops.c Sat Oct 7 04:26:26 2000 >@@ -415,9 +415,9 @@ > * > * An exception with regards to the SF_SETTABLE bits, is > * SF_IMMUTABLE, which we map to ATTR_SYSTEM. > */ >- if (cred->cr_uid != 0) { >+ if (suser(ap->a_p)) { > if (vap->va_flags & (SF_SETTABLE^SF_IMMUTABLE)) > return EPERM; > if (vap->va_flags & SF_IMMUTABLE) > dep->de_Attributes |= ATTR_SYSTEM; >--- ./msdosfsmount.h.orig Fri Aug 25 11:03:58 2000 >+++ ./msdosfsmount.h Sat Oct 7 04:25:01 2000 >@@ -226,18 +226,15 @@ > */ > #define MSDOSFSMNT_SHORTNAME 1 /* Force old DOS short names only */ > #define MSDOSFSMNT_LONGNAME 2 /* Force Win'95 long names */ > #define MSDOSFSMNT_NOWIN95 4 /* Completely ignore Win95 entries */ >-#ifndef __FreeBSD__ >-#define MSDOSFSMNT_GEMDOSFS 8 /* This is a gemdos-flavour */ >-#endif > #define MSDOSFSMNT_U2WTABLE 0x10 /* Local->Unicode and local<->DOS */ > /* tables loaded */ > #define MSDOSFSMNT_ULTABLE 0x20 /* Local upper<->lower table loaded */ > /* All flags above: */ > #define MSDOSFSMNT_MNTOPT \ > (MSDOSFSMNT_SHORTNAME|MSDOSFSMNT_LONGNAME|MSDOSFSMNT_NOWIN95 \ >- /*|MSDOSFSMNT_GEMDOSFS*/|MSDOSFSMNT_U2WTABLE|MSDOSFSMNT_ULTABLE) >+ |MSDOSFSMNT_U2WTABLE|MSDOSFSMNT_ULTABLE) > #define MSDOSFSMNT_RONLY 0x80000000 /* mounted read-only */ > #define MSDOSFSMNT_WAITONFAT 0x40000000 /* mounted synchronous */ > #define MSDOSFS_FATMIRROR 0x20000000 /* FAT is mirrored */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 21809
: 10979