diff options
author | cjh <cjh@FreeBSD.org> | 2001-03-24 11:48:41 +0800 |
---|---|---|
committer | cjh <cjh@FreeBSD.org> | 2001-03-24 11:48:41 +0800 |
commit | 6804f2d7209dc841562f12ff08d71bd426f23fb3 (patch) | |
tree | 061af7d5840f0ca8bb92ad6b86a01708939fae0b /korean/msdosfs | |
parent | c1d13bd7e0143460ca64f372c93041d5f32de198 (diff) | |
download | freebsd-ports-gnome-6804f2d7209dc841562f12ff08d71bd426f23fb3.tar.gz freebsd-ports-gnome-6804f2d7209dc841562f12ff08d71bd426f23fb3.tar.zst freebsd-ports-gnome-6804f2d7209dc841562f12ff08d71bd426f23fb3.zip |
ko-msdosfs, VFAT filesystem module supporting CP949 VFAT(unicode), activated.
This port is based on japanese/msdosfs. Thanks Japanese hackers!
Diffstat (limited to 'korean/msdosfs')
26 files changed, 1033 insertions, 0 deletions
diff --git a/korean/msdosfs/Makefile b/korean/msdosfs/Makefile new file mode 100644 index 000000000000..65b4ae6d00e8 --- /dev/null +++ b/korean/msdosfs/Makefile @@ -0,0 +1,69 @@ +# Ports collection makefile for: msdosfs for Korean +# Date created: 24 Mar 2001 +# Whom: cjh +# +# $FreeBSD$ +# +# based on japanese/msdosfs +# + +PORTNAME= msdosfs +PORTVERSION= ${LAST_UPDATED} +CATEGORIES= korean +MASTER_SITES= http://www.kr.freebsd.org/~cjh/freebsd/msdosfs-ko/ \ + ftp://ftp.kr.freebsd.org/pub/users/cjh/FreeBSD/ \ + ${MASTER_SITE_LOCAL} +MASTER_SITE_SUBDIR= asami +DISTNAME= ${PORTNAME}-ko-20000710 +DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \ + mount_msdos-20000701.tar.gz + +MAINTAINER= cjh@FreeBSD.org + +WRKSRC= ${WRKDIR}/${DISTNAME}/msdosfs.ko + +.include <bsd.port.pre.mk> + +.if ${OSVERSION} >= 410001 && ${OSVERSION} < 500000 +LAST_UPDATED= 20001027 +PATCHDIR= ${MASTERDIR}/patches.4 +.elif ${OSVERSION} >= 500016 +# runs only after 9th Feb 2001 world +LAST_UPDATED= 20010209 +PATCHDIR= ${MASTERDIR}/patches.5 +NO_PACKAGE= "to avoid crashing a machine when try to install incorrect version" +.else +LAST_UPDATED= 20001022 +BROKEN= "Supports up-to-date -CURRENT only" +.endif + +post-extract: + cd ${WRKDIR}/mount ; co RCS/*,v + cd ${WRKDIR}/mount_msdos ; co RCS/*,v + ${LN} -s ${WRKSRC} ${WRKSRC}/msdosfs + ${LN} -s ${WRKSRC}/msdosfsmount.h ${WRKDIR}/mount_msdos + +pre-build: + @if [ ! -d /sys -o ! -d /usr/src/sys ]; then \ + ${ECHO} "****************************************" ; \ + ${ECHO} " You need to extract kernel source tree" ; \ + ${ECHO} " before you build this package..." ; \ + ${ECHO} "****************************************" ; \ + ${FALSE} ; \ + fi + +post-build: + cd ${WRKDIR}/mount_msdos && ${MAKE} + ${SED} -e "s,@@PREFIX@@,${PREFIX}," ${FILESDIR}/ko-msdosfs.sh \ + > ${WRKDIR}/ko-msdosfs.sh + +do-install: + ${MKDIR} ${PREFIX}/lib/ko-msdosfs + ${INSTALL_PROGRAM} ${WRKDIR}/mount_msdos/mount_komsdos ${PREFIX}/sbin + ${INSTALL_SCRIPT} ${WRKSRC}/msdos_ko.ko ${PREFIX}/lib/ko-msdosfs + ${INSTALL_SCRIPT} ${WRKDIR}/ko-msdosfs.sh ${PREFIX}/etc/rc.d + +post-install: + /sbin/kldload ${PREFIX}/lib/ko-msdosfs/msdos_ko.ko + +.include <bsd.port.post.mk> diff --git a/korean/msdosfs/distinfo b/korean/msdosfs/distinfo new file mode 100644 index 000000000000..eb06a3bda813 --- /dev/null +++ b/korean/msdosfs/distinfo @@ -0,0 +1,2 @@ +MD5 (msdosfs-ko-20000710.tar.gz) = efb0f56cecf985927bab7c2ccde156c2 +MD5 (mount_msdos-20000701.tar.gz) = c45e945eb4503fe9cfad01589f4ed45b diff --git a/korean/msdosfs/files/ko-msdosfs.sh b/korean/msdosfs/files/ko-msdosfs.sh new file mode 100644 index 000000000000..9cd96a72c158 --- /dev/null +++ b/korean/msdosfs/files/ko-msdosfs.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# $FreeBSD$ +# + +module_dir=@@PREFIX@@/lib/ko-msdosfs + +case $1 in +start) + kldload ${module_dir}/msdos_ko.ko + echo -n " msdosfs(ko)" + ;; +stop) + kldunload msdos_ko.ko + ;; +*) + echo "usage: `basename $0` {start|stop}" + exit 1 + ;; +esac diff --git a/korean/msdosfs/files/revlist b/korean/msdosfs/files/revlist new file mode 100644 index 000000000000..4fcc7d2d3045 --- /dev/null +++ b/korean/msdosfs/files/revlist @@ -0,0 +1,20 @@ +$FreeBSD$ + +This is a table of revisions about this ko-msdosfs. + ++-------------------+---------------+-----------+ + BRANCH RELENG_4 MAIN ++-------------------+---------------+-----------+ + bootsect.h 1.7 1.7 + bpb.h 1.7.2.1 1.8 + denode.h 1.20 1.21 + direntry.h 1.15 1.15 + fat.h 1.9 1.9 + msdosfs_conv.c 1.29 1.29 + msdosfs_denode.c 1.47.2.1 1.51 + msdosfs_fat.c 1.23 1.24 + msdosfs_lookup.c 1.30 1.32 + msdosfs_vfsops.c 1.60.2.2 1.66 + msdosfs_vnops.c 1.95.2.1 1.106 + msdosfsmount.h 1.20.2.2 1.22 ++-------------------+---------------+-----------+ diff --git a/korean/msdosfs/patches.4/patch-aa b/korean/msdosfs/patches.4/patch-aa new file mode 100644 index 000000000000..24c2cf6952c0 --- /dev/null +++ b/korean/msdosfs/patches.4/patch-aa @@ -0,0 +1,20 @@ +--- /dev/null Mon Jul 3 02:05:31 2000 ++++ Makefile Mon Jul 3 02:15:22 2000 +@@ -0,0 +1,17 @@ ++.PATH: ${.CURDIR} ++KMOD= msdos_ko ++SRCS= vnode_if.h \ ++ msdosfs_conv.c msdosfs_denode.c msdosfs_fat.c msdosfs_lookup.c \ ++ msdosfs_vfsops.c msdosfs_vnops.c opt_msdosfs.h ++NOMAN= ++CLEANFILES+= opt_msdosfs.h ++ ++opt_msdosfs.h: ++ touch opt_msdosfs.h ++ echo "#define MSDOSFS_LC_KOREA 1" >> opt_msdosfs.h ++ ++.if ${MACHINE} == "pc98" ++CFLAGS+= -DPC98 ++.endif ++ ++.include <bsd.kmod.mk> diff --git a/korean/msdosfs/patches.4/patch-ab b/korean/msdosfs/patches.4/patch-ab new file mode 100644 index 000000000000..20bc8a4eb43e --- /dev/null +++ b/korean/msdosfs/patches.4/patch-ab @@ -0,0 +1,18 @@ +--- bpb.h.orig Sat Aug 28 09:48:07 1999 ++++ bpb.h Sat Oct 28 02:57:36 2000 +@@ -113,8 +113,14 @@ + * 16-bit and 32-bit quantities on byte boundaries. If this is not true, + * use the macros for the big-endian case. + */ ++ + #include <machine/endian.h> +-#if (BYTE_ORDER == LITTLE_ENDIAN) /* && defined(UNALIGNED_ACCESS) */ ++ ++#ifdef __i386__ ++#define UNLALIGNED_ACCESS ++#endif ++ ++#if (BYTE_ORDER == LITTLE_ENDIAN) && defined(UNALIGNED_ACCESS) + #define getushort(x) *((u_int16_t *)(x)) + #define getulong(x) *((u_int32_t *)(x)) + #define putushort(p, v) (*((u_int16_t *)(p)) = (v)) diff --git a/korean/msdosfs/patches.4/patch-ac b/korean/msdosfs/patches.4/patch-ac new file mode 100644 index 000000000000..93110b5dd7e4 --- /dev/null +++ b/korean/msdosfs/patches.4/patch-ac @@ -0,0 +1,19 @@ +--- msdosfs_denode.c.orig Mon Apr 10 04:32:36 2000 ++++ msdosfs_denode.c Wed Oct 4 00:28:00 2000 +@@ -114,6 +114,16 @@ + { + dehashtbl = hashinit(desiredvnodes/2, M_MSDOSFSMNT, &dehash); + simple_lock_init(&dehash_slock); ++ return (0); ++} ++ ++int ++msdosfs_uninit(vfsp) ++ struct vfsconf *vfsp; ++{ ++ ++ if (dehashtbl) ++ free(dehashtbl, M_MSDOSFSMNT); + return (0); + } + diff --git a/korean/msdosfs/patches.4/patch-af b/korean/msdosfs/patches.4/patch-af new file mode 100644 index 000000000000..083bbd45cfed --- /dev/null +++ b/korean/msdosfs/patches.4/patch-af @@ -0,0 +1,53 @@ +--- msdosfs_vfsops.c.orig Mon Apr 10 04:32:37 2000 ++++ msdosfs_vfsops.c Wed Oct 4 00:21:29 2000 +@@ -48,11 +48,6 @@ + * October 1992 + */ + +-#include "opt_msdosfs.h" +- +-/* +- * System include files. +- */ + #include <sys/param.h> + #include <sys/systm.h> + #include <sys/conf.h> +@@ -67,9 +62,6 @@ + #include <sys/stat.h> /* defines ALLPERMS */ + #include <vm/vm_zone.h> + +-/* +- * MSDOSFS include files. +- */ + #include <msdosfs/bpb.h> + #include <msdosfs/bootsect.h> + #include <msdosfs/direntry.h> +@@ -77,6 +69,8 @@ + #include <msdosfs/msdosfsmount.h> + #include <msdosfs/fat.h> + ++#define MSDOSFS_DFLTBSIZE 4096 ++ + #if 1 /*def PC98*/ + /* + * XXX - The boot signature formatted by NEC PC-98 DOS looks like a +@@ -635,7 +629,7 @@ + if (FAT12(pmp)) + pmp->pm_fatblocksize = 3 * pmp->pm_BytesPerSec; + else +- pmp->pm_fatblocksize = DFLTBSIZE; ++ pmp->pm_fatblocksize = MSDOSFS_DFLTBSIZE; + + pmp->pm_fatblocksec = pmp->pm_fatblocksize / DEV_BSIZE; + pmp->pm_bnshift = ffs(DEV_BSIZE) - 1; +@@ -987,8 +981,8 @@ + msdosfs_checkexp, + msdosfs_vptofh, + msdosfs_init, +- vfs_stduninit, ++ msdosfs_uninit, + vfs_stdextattrctl, + }; + +-VFS_SET(msdosfs_vfsops, msdos, 0); ++VFS_SET(msdosfs_vfsops, msdos_ko, 0); diff --git a/korean/msdosfs/patches.4/patch-ag b/korean/msdosfs/patches.4/patch-ag new file mode 100644 index 000000000000..b39384f9b9fe --- /dev/null +++ b/korean/msdosfs/patches.4/patch-ag @@ -0,0 +1,20 @@ +--- msdosfs_vnops.c.orig Mon Apr 10 04:32:37 2000 ++++ msdosfs_vnops.c Wed Oct 4 00:13:39 2000 +@@ -1108,7 +1108,6 @@ + VOP_UNLOCK(fvp, 0, p); + if (VTODE(fdvp)->de_StartCluster != VTODE(tdvp)->de_StartCluster) + newparent = 1; +- vrele(fdvp); + if (doingdirectory && newparent) { + if (error) /* write access check above */ + goto bad; +@@ -1176,7 +1175,8 @@ + panic("msdosfs_rename: lost from startdir"); + if (!newparent) + VOP_UNLOCK(tdvp, 0, p); +- (void) relookup(fdvp, &fvp, fcnp); ++ if (relookup(fdvp, &fvp, fcnp) == 0) ++ vrele(fdvp); + if (fvp == NULL) { + /* + * From name has disappeared. diff --git a/korean/msdosfs/patches.4/patch-ah b/korean/msdosfs/patches.4/patch-ah new file mode 100644 index 000000000000..3ec10f002556 --- /dev/null +++ b/korean/msdosfs/patches.4/patch-ah @@ -0,0 +1,19 @@ +--- msdosfsmount.h.orig Mon Apr 10 04:32:37 2000 ++++ msdosfsmount.h Sat Oct 28 02:57:45 2000 +@@ -84,7 +84,7 @@ + u_long pm_fatblocksize; /* size of fat blocks in bytes */ + u_long pm_fatblocksec; /* size of fat blocks in sectors */ + u_long pm_fatsize; /* size of fat in bytes */ +- u_long pm_fatmask; /* mask to use for fat numbers */ ++ u_int32_t pm_fatmask; /* mask to use for fat numbers */ + u_long pm_fsinfo; /* fsinfo block number */ + u_long pm_nxtfree; /* next free cluster in fsinfo block */ + u_int pm_fatmult; /* these 2 values are used in fat */ +@@ -198,6 +198,7 @@ + (1024 << ((pmp)->pm_BlkPerSec >> 2)) + + int msdosfs_init __P((struct vfsconf *vfsp)); ++int msdosfs_uninit __P((struct vfsconf *vfsp)); + int msdosfs_mountroot __P((void)); + + #endif /* _KERNEL */ diff --git a/korean/msdosfs/patches.4/patch-ba b/korean/msdosfs/patches.4/patch-ba new file mode 100644 index 000000000000..7c57c9f29017 --- /dev/null +++ b/korean/msdosfs/patches.4/patch-ba @@ -0,0 +1,9 @@ +--- ../../mount_msdos/Makefile.orig Mon Jul 3 02:53:38 2000 ++++ ../../mount_msdos/Makefile Mon Jul 3 02:53:52 2000 +@@ -3,6 +3,6 @@ + # + +-PROG= mount_msdos ++PROG= mount_komsdos + SRCS= mount_msdos.c getmntopts.c + MAN8= mount_msdos.8 diff --git a/korean/msdosfs/patches.4/patch-bb b/korean/msdosfs/patches.4/patch-bb new file mode 100644 index 000000000000..f27ac0c90a44 --- /dev/null +++ b/korean/msdosfs/patches.4/patch-bb @@ -0,0 +1,78 @@ +--- ../../mount_msdos/mount_msdos.c.orig Mon Jul 3 22:56:20 2000 ++++ ../../mount_msdos/mount_msdos.c Mon Jul 3 23:02:54 2000 +@@ -39,8 +39,6 @@ + #include <sys/mount.h> + #include <sys/stat.h> + +-#include <msdosfs/msdosfsmount.h> +- + #include <ctype.h> + #include <err.h> + #include <grp.h> +@@ -55,6 +53,7 @@ + #include <unistd.h> + + #include "mntopts.h" ++#include "msdosfsmount.h" + + /* + * XXX - no way to specify "foo=<bar>"-type options; that's what we'd +@@ -95,8 +94,9 @@ + mntflags = set_gid = set_uid = set_mask = 0; + (void)memset(&args, '\0', sizeof(args)); + args.magic = MSDOSFS_ARGSMAGIC; ++ args.flags = MSDOSFSMNT_EUCKOREA; + +- while ((c = getopt(argc, argv, "sl9u:g:m:o:L:W:")) != -1) { ++ while ((c = getopt(argc, argv, "sl9u:g:m:o:")) != -1) { + switch (c) { + #ifdef MSDOSFSMNT_GEMDOSFS + case 'G': +@@ -124,14 +124,6 @@ + args.mask = a_mask(optarg); + set_mask = 1; + break; +- case 'L': +- load_ultable(&args, optarg); +- args.flags |= MSDOSFSMNT_ULTABLE; +- break; +- case 'W': +- load_u2wtable(&args, optarg); +- args.flags |= MSDOSFSMNT_U2WTABLE; +- break; + case 'o': + getmntopts(optarg, mopts, &mntflags, &args.flags); + break; +@@ -173,15 +165,15 @@ + args.mask = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); + } + +- error = getvfsbyname("msdos", &vfc); +- if (error && vfsisloadable("msdos")) { +- if (vfsload("msdos")) +- err(EX_OSERR, "vfsload(msdos)"); ++ error = getvfsbyname("msdos_ko", &vfc); ++ if (error && vfsisloadable("msdos_ko")) { ++ if (vfsload("msdos_ko")) ++ err(EX_OSERR, "vfsload(msdos_ko)"); + endvfsent(); /* clear cache */ +- error = getvfsbyname("msdos", &vfc); ++ error = getvfsbyname("msdos_ko", &vfc); + } + if (error) +- errx(EX_OSERR, "msdos filesystem is not available"); ++ errx(EX_OSERR, "msdos_ko filesystem is not available"); + + if (mount(vfc.vfc_name, mntpath, mntflags, &args) < 0) + err(EX_OSERR, "%s", dev); +@@ -251,8 +243,8 @@ + usage() + { + fprintf(stderr, "%s\n%s\n", +- "usage: mount_msdos [-o options] [-u user] [-g group] [-m mask]", +- " [-s] [-l] [-9] [-L locale] [-W table] bdev dir"); ++ "usage: mount_jmsdos [-o options] [-u user] [-g group] [-m mask]", ++ " [-s] [-l] [-9] bdev dir"); + exit(EX_USAGE); + } + diff --git a/korean/msdosfs/patches.5/patch-aa b/korean/msdosfs/patches.5/patch-aa new file mode 100644 index 000000000000..24c2cf6952c0 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-aa @@ -0,0 +1,20 @@ +--- /dev/null Mon Jul 3 02:05:31 2000 ++++ Makefile Mon Jul 3 02:15:22 2000 +@@ -0,0 +1,17 @@ ++.PATH: ${.CURDIR} ++KMOD= msdos_ko ++SRCS= vnode_if.h \ ++ msdosfs_conv.c msdosfs_denode.c msdosfs_fat.c msdosfs_lookup.c \ ++ msdosfs_vfsops.c msdosfs_vnops.c opt_msdosfs.h ++NOMAN= ++CLEANFILES+= opt_msdosfs.h ++ ++opt_msdosfs.h: ++ touch opt_msdosfs.h ++ echo "#define MSDOSFS_LC_KOREA 1" >> opt_msdosfs.h ++ ++.if ${MACHINE} == "pc98" ++CFLAGS+= -DPC98 ++.endif ++ ++.include <bsd.kmod.mk> diff --git a/korean/msdosfs/patches.5/patch-ab b/korean/msdosfs/patches.5/patch-ab new file mode 100644 index 000000000000..e437a9a94c50 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ab @@ -0,0 +1,18 @@ +--- bpb.h.orig Sat Aug 28 09:48:07 1999 ++++ bpb.h Wed Oct 4 00:40:56 2000 +@@ -113,8 +113,14 @@ + * 16-bit and 32-bit quantities on byte boundaries. If this is not true, + * use the macros for the big-endian case. + */ ++ + #include <machine/endian.h> +-#if (BYTE_ORDER == LITTLE_ENDIAN) /* && defined(UNALIGNED_ACCESS) */ ++ ++#ifdef __i386__ ++#define UNLALIGNED_ACCESS ++#endif ++ ++#if (BYTE_ORDER == LITTLE_ENDIAN) && defined(UNALIGNED_ACCESS) + #define getushort(x) *((u_int16_t *)(x)) + #define getulong(x) *((u_int32_t *)(x)) + #define putushort(p, v) (*((u_int16_t *)(p)) = (v)) diff --git a/korean/msdosfs/patches.5/patch-ac b/korean/msdosfs/patches.5/patch-ac new file mode 100644 index 000000000000..2154d92f86a3 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ac @@ -0,0 +1,132 @@ +--- msdosfs_denode.c.orig Mon Apr 10 04:32:36 2000 ++++ msdosfs_denode.c Sun Feb 11 16:59:48 2001 +@@ -51,7 +51,4 @@ + #include "opt_msdosfs.h" + +-/* +- * System include files. +- */ + #include <sys/param.h> + #include <sys/systm.h> +@@ -60,13 +57,12 @@ + #include <sys/malloc.h> + #include <sys/proc.h> ++#include <sys/bio.h> + #include <sys/buf.h> + #include <sys/vnode.h> ++#include <sys/mutex.h> + + #include <vm/vm.h> + #include <vm/vm_extern.h> + +-/* +- * MSDOSFS include files. +- */ + #include <msdosfs/bpb.h> + #include <msdosfs/msdosfsmount.h> +@@ -81,7 +77,5 @@ + #define DEHASH(dev, dcl, doff) (dehashtbl[(minor(dev) + (dcl) + (doff) / \ + sizeof(struct direntry)) & dehash]) +-#ifndef NULL_SIMPLELOCKS +-static struct simplelock dehash_slock; +-#endif ++static struct mtx dehash_mtx; + + union _qcvt { +@@ -114,5 +108,16 @@ + { + dehashtbl = hashinit(desiredvnodes/2, M_MSDOSFSMNT, &dehash); +- simple_lock_init(&dehash_slock); ++ mtx_init(&dehash_mtx, "msdosfs dehash", MTX_DEF); ++ return (0); ++} ++ ++int ++msdosfs_uninit(vfsp) ++ struct vfsconf *vfsp; ++{ ++ ++ if (dehashtbl) ++ free(dehashtbl, M_MSDOSFSMNT); ++ mtx_destroy(&dehash_mtx); + return (0); + } +@@ -129,5 +134,5 @@ + + loop: +- simple_lock(&dehash_slock); ++ mtx_lock(&dehash_mtx); + for (dep = DEHASH(dev, dirclust, diroff); dep; dep = dep->de_next) { + if (dirclust == dep->de_dirclust +@@ -136,6 +141,6 @@ + && dep->de_refcnt != 0) { + vp = DETOV(dep); +- simple_lock(&vp->v_interlock); +- simple_unlock(&dehash_slock); ++ mtx_lock(&vp->v_interlock); ++ mtx_unlock(&dehash_mtx); + if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK, p)) + goto loop; +@@ -143,5 +148,5 @@ + } + } +- simple_unlock(&dehash_slock); ++ mtx_unlock(&dehash_mtx); + return (NULL); + } +@@ -153,5 +158,5 @@ + struct denode **depp, *deq; + +- simple_lock(&dehash_slock); ++ mtx_lock(&dehash_mtx); + depp = &DEHASH(dep->de_dev, dep->de_dirclust, dep->de_diroffset); + deq = *depp; +@@ -161,5 +166,5 @@ + dep->de_prev = depp; + *depp = dep; +- simple_unlock(&dehash_slock); ++ mtx_unlock(&dehash_mtx); + } + +@@ -170,5 +175,5 @@ + struct denode *deq; + +- simple_lock(&dehash_slock); ++ mtx_lock(&dehash_mtx); + deq = dep->de_next; + if (deq) +@@ -179,5 +184,5 @@ + dep->de_prev = NULL; + #endif +- simple_unlock(&dehash_slock); ++ mtx_unlock(&dehash_mtx); + } + +@@ -260,5 +265,6 @@ + } + bzero((caddr_t)ldep, sizeof *ldep); +- lockinit(&ldep->de_lock, PINOD, "denode", 0, 0); ++ lockinit(&nvp->v_lock, PINOD, "denode", 0, 0); ++ nvp->v_vnlock = &nvp->v_lock; + nvp->v_data = ldep; + ldep->de_vnode = nvp; +@@ -276,5 +282,5 @@ + * call msdosfs_hashins() with a locked denode. + */ +- if (lockmgr(&ldep->de_lock, LK_EXCLUSIVE, (struct simplelock *)0, p)) ++ if (VOP_LOCK(nvp, LK_EXCLUSIVE, p) != 0) + panic("deget: unexpected lock failure"); + +@@ -658,4 +664,5 @@ + dep->de_flag = 0; + #endif ++ lockdestroy(&vp->v_lock); + FREE(dep, M_MSDOSFSNODE); + vp->v_data = NULL; +@@ -716,5 +723,5 @@ + #endif + if (dep->de_Name[0] == SLOT_DELETED) +- vrecycle(vp, (struct simplelock *)0, p); ++ vrecycle(vp, NULL, p); + return (error); + } diff --git a/korean/msdosfs/patches.5/patch-ad b/korean/msdosfs/patches.5/patch-ad new file mode 100644 index 000000000000..d9fec52691d7 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ad @@ -0,0 +1,10 @@ +--- msdosfs_fat.c.orig Mon Apr 10 04:32:36 2000 ++++ msdosfs_fat.c Wed Oct 4 00:53:48 2000 +@@ -55,6 +55,7 @@ + */ + #include <sys/param.h> + #include <sys/systm.h> ++#include <sys/bio.h> + #include <sys/buf.h> + #include <sys/mount.h> /* to define statfs structure */ + #include <sys/vnode.h> /* to define vattr structure */ diff --git a/korean/msdosfs/patches.5/patch-ae b/korean/msdosfs/patches.5/patch-ae new file mode 100644 index 000000000000..47c9e1dcdacb --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ae @@ -0,0 +1,90 @@ +--- msdosfs_lookup.c.orig Mon Apr 10 04:39:57 2000 ++++ msdosfs_lookup.c Sun Oct 22 23:52:33 2000 +@@ -56,6 +56,7 @@ + #include <sys/param.h> + #include <sys/systm.h> + #include <sys/namei.h> ++#include <sys/bio.h> + #include <sys/buf.h> + #include <sys/vnode.h> + #include <sys/mount.h> +@@ -124,6 +125,7 @@ + int wincnt = 1; + int chksum = -1; + int olddos = 1; ++ cnp->cn_flags &= ~PDIRUNLOCK; + + #ifdef MSDOSFS_DEBUG + printf("msdosfs_lookup(): looking for %s\n", cnp->cn_nameptr); +@@ -379,8 +381,10 @@ + * information cannot be used. + */ + cnp->cn_flags |= SAVENAME; +- if (!lockparent) ++ if (!lockparent) { + VOP_UNLOCK(vdp, 0, p); ++ cnp->cn_flags |= PDIRUNLOCK; ++ } + return (EJUSTRETURN); + } + /* +@@ -468,8 +472,10 @@ + if (error) + return (error); + *vpp = DETOV(tdp); +- if (!lockparent) ++ if (!lockparent) { + VOP_UNLOCK(vdp, 0, p); ++ cnp->cn_flags |= PDIRUNLOCK; ++ } + return (0); + } + +@@ -499,8 +505,10 @@ + return (error); + *vpp = DETOV(tdp); + cnp->cn_flags |= SAVENAME; +- if (!lockparent) ++ if (!lockparent) { + VOP_UNLOCK(vdp, 0, p); ++ cnp->cn_flags |= PDIRUNLOCK; ++ } + return (0); + } + +@@ -526,15 +534,20 @@ + pdp = vdp; + if (flags & ISDOTDOT) { + VOP_UNLOCK(pdp, 0, p); ++ cnp->cn_flags |= PDIRUNLOCK; + error = deget(pmp, cluster, blkoff, &tdp); + if (error) { + vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, p); ++ cnp->cn_flags &= ~PDIRUNLOCK; + return (error); + } +- if (lockparent && (flags & ISLASTCN) && +- (error = vn_lock(pdp, LK_EXCLUSIVE, p))) { +- vput(DETOV(tdp)); +- return (error); ++ if (lockparent && (flags & ISLASTCN)) { ++ error = vn_lock(pdp, LK_EXCLUSIVE, p); ++ if (error) { ++ vput(DETOV(tdp)); ++ return (error); ++ } ++ cnp->cn_flags &= ~PDIRUNLOCK; + } + *vpp = DETOV(tdp); + } else if (dp->de_StartCluster == scn && isadir) { +@@ -543,8 +556,10 @@ + } else { + if ((error = deget(pmp, cluster, blkoff, &tdp)) != 0) + return (error); +- if (!lockparent || !(flags & ISLASTCN)) ++ if (!lockparent || !(flags & ISLASTCN)) { + VOP_UNLOCK(pdp, 0, p); ++ cnp->cn_flags |= PDIRUNLOCK; ++ } + *vpp = DETOV(tdp); + } diff --git a/korean/msdosfs/patches.5/patch-af b/korean/msdosfs/patches.5/patch-af new file mode 100644 index 000000000000..b10e29422e74 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-af @@ -0,0 +1,132 @@ +--- msdosfs_vfsops.c.orig Mon Apr 10 04:32:37 2000 ++++ msdosfs_vfsops.c Sun Feb 11 17:01:51 2001 +@@ -50,8 +50,4 @@ + + #include "opt_msdosfs.h" +- +-/* +- * System include files. +- */ + #include <sys/param.h> + #include <sys/systm.h> +@@ -62,13 +58,11 @@ + #include <sys/vnode.h> + #include <sys/mount.h> ++#include <sys/bio.h> + #include <sys/buf.h> + #include <sys/fcntl.h> + #include <sys/malloc.h> + #include <sys/stat.h> /* defines ALLPERMS */ +-#include <vm/vm_zone.h> ++#include <sys/mutex.h> + +-/* +- * MSDOSFS include files. +- */ + #include <msdosfs/bpb.h> + #include <msdosfs/bootsect.h> +@@ -78,4 +72,6 @@ + #include <msdosfs/fat.h> + ++#define MSDOSFS_DFLTBSIZE 4096 ++ + #if 1 /*def PC98*/ + /* +@@ -181,6 +177,5 @@ + 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 = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK | M_ZERO); + mp->mnt_op = &msdosfs_vfsops; + mp->mnt_flag = 0; +@@ -469,6 +464,5 @@ + #endif + +- pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK); +- bzero((caddr_t)pmp, sizeof *pmp); ++ pmp = malloc(sizeof *pmp, M_MSDOSFSMNT, M_WAITOK | M_ZERO); + pmp->pm_mountp = mp; + +@@ -636,5 +630,5 @@ + pmp->pm_fatblocksize = 3 * pmp->pm_BytesPerSec; + else +- pmp->pm_fatblocksize = DFLTBSIZE; ++ pmp->pm_fatblocksize = MSDOSFS_DFLTBSIZE; + + pmp->pm_fatblocksec = pmp->pm_fatblocksize / DEV_BSIZE; +@@ -730,5 +724,5 @@ + mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum; + mp->mnt_flag |= MNT_LOCAL; +- devvp->v_specmountpoint = mp; ++ devvp->v_rdev->si_mountpoint = mp; + + return 0; +@@ -766,5 +760,5 @@ + return error; + pmp = VFSTOMSDOSFS(mp); +- pmp->pm_devvp->v_specmountpoint = NULL; ++ pmp->pm_devvp->v_rdev->si_mountpoint = NULL; + #ifdef MSDOSFS_DEBUG + { +@@ -777,5 +771,5 @@ + vp->v_id, vp->v_mount, vp->v_op); + printf("freef %p, freeb %p, mount %p\n", +- vp->v_freelist.tqe_next, vp->v_freelist.tqe_prev, ++ TAILQ_NEXT(vp, v_freelist), vp->v_freelist.tqe_prev, + vp->v_mount); + printf("cleanblkhd %p, dirtyblkhd %p, numoutput %ld, type %d\n", +@@ -870,7 +864,7 @@ + * Write back each (modified) denode. + */ +- simple_lock(&mntvnode_slock); ++ mtx_lock(&mntvnode_mtx); + loop: +- for (vp = mp->mnt_vnodelist.lh_first; vp != NULL; vp = nvp) { ++ for (vp = LIST_FIRST(&mp->mnt_vnodelist); vp != NULL; vp = nvp) { + /* + * If the vnode that we are about to sync is no longer +@@ -880,6 +874,6 @@ + goto loop; + +- simple_lock(&vp->v_interlock); +- nvp = vp->v_mntvnodes.le_next; ++ mtx_lock(&vp->v_interlock); ++ nvp = LIST_NEXT(vp, v_mntvnodes); + dep = VTODE(vp); + if (vp->v_type == VNON || +@@ -887,11 +881,11 @@ + (DE_ACCESS | DE_CREATE | DE_UPDATE | DE_MODIFIED)) == 0 && + (TAILQ_EMPTY(&vp->v_dirtyblkhd) || waitfor == MNT_LAZY))) { +- simple_unlock(&vp->v_interlock); ++ mtx_unlock(&vp->v_interlock); + continue; + } +- simple_unlock(&mntvnode_slock); ++ mtx_unlock(&mntvnode_mtx); + error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK, p); + if (error) { +- simple_lock(&mntvnode_slock); ++ mtx_lock(&mntvnode_mtx); + if (error == ENOENT) + goto loop; +@@ -903,7 +897,7 @@ + VOP_UNLOCK(vp, 0, p); + vrele(vp); +- simple_lock(&mntvnode_slock); ++ mtx_lock(&mntvnode_mtx); + } +- simple_unlock(&mntvnode_slock); ++ mtx_unlock(&mntvnode_mtx); + + /* +@@ -988,7 +982,7 @@ + msdosfs_vptofh, + msdosfs_init, +- vfs_stduninit, ++ msdosfs_uninit, + vfs_stdextattrctl, + }; + +-VFS_SET(msdosfs_vfsops, msdos, 0); ++VFS_SET(msdosfs_vfsops, msdos_ko, 0); diff --git a/korean/msdosfs/patches.5/patch-ag b/korean/msdosfs/patches.5/patch-ag new file mode 100644 index 000000000000..564133de374a --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ag @@ -0,0 +1,152 @@ +--- msdosfs_vnops.c.orig Mon Apr 10 04:32:37 2000 ++++ msdosfs_vnops.c Sun Feb 11 17:00:36 2001 +@@ -51,7 +51,4 @@ + #include "opt_msdosfs.h" + +-/* +- * System include files. +- */ + #include <sys/param.h> + #include <sys/systm.h> +@@ -60,4 +57,5 @@ + #include <sys/kernel.h> + #include <sys/stat.h> ++#include <sys/bio.h> + #include <sys/buf.h> + #include <sys/proc.h> +@@ -71,10 +69,8 @@ + #include <vm/vm.h> + #include <vm/vm_extern.h> +-#include <vm/vm_zone.h> + #include <vm/vnode_pager.h> + +-/* +- * MSDOSFS include files. +- */ ++#include <machine/mutex.h> ++ + #include <msdosfs/bpb.h> + #include <msdosfs/direntry.h> +@@ -240,10 +236,10 @@ + struct timespec ts; + +- simple_lock(&vp->v_interlock); ++ mtx_lock(&vp->v_interlock); + if (vp->v_usecount > 1) { + getnanotime(&ts); + DETIMES(dep, &ts, &ts, &ts); + } +- simple_unlock(&vp->v_interlock); ++ mtx_unlock(&vp->v_interlock); + return 0; + } +@@ -261,8 +257,5 @@ + struct denode *dep = VTODE(ap->a_vp); + struct msdosfsmount *pmp = dep->de_pmp; +- struct ucred *cred = ap->a_cred; +- mode_t mask, file_mode, mode = ap->a_mode; +- register gid_t *gp; +- int i; ++ mode_t file_mode, mode = ap->a_mode; + + file_mode = (S_IXUSR|S_IXGRP|S_IXOTH) | (S_IRUSR|S_IRGRP|S_IROTH) | +@@ -288,41 +281,6 @@ + } + +- /* User id 0 always gets access. */ +- if (cred->cr_uid == 0) +- return 0; +- +- mask = 0; +- +- /* Otherwise, check the owner. */ +- if (cred->cr_uid == pmp->pm_uid) { +- if (mode & VEXEC) +- mask |= S_IXUSR; +- if (mode & VREAD) +- mask |= S_IRUSR; +- if (mode & VWRITE) +- mask |= S_IWUSR; +- return (file_mode & mask) == mask ? 0 : EACCES; +- } +- +- /* Otherwise, check the groups. */ +- for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++) +- if (pmp->pm_gid == *gp) { +- if (mode & VEXEC) +- mask |= S_IXGRP; +- if (mode & VREAD) +- mask |= S_IRGRP; +- if (mode & VWRITE) +- mask |= S_IWGRP; +- return (file_mode & mask) == mask ? 0 : EACCES; +- } +- +- /* Otherwise, check everyone else. */ +- if (mode & VEXEC) +- mask |= S_IXOTH; +- if (mode & VREAD) +- mask |= S_IROTH; +- if (mode & VWRITE) +- mask |= S_IWOTH; +- return (file_mode & mask) == mask ? 0 : EACCES; ++ return (vaccess(vp->v_type, file_mode, pmp->pm_uid, pmp->pm_gid, ++ ap->a_mode, ap->a_cred, NULL)); + } + +@@ -915,7 +873,5 @@ + + /* +- * DOS filesystems don't know what links are. But since we already called +- * msdosfs_lookup() with create and lockparent, the parent is locked so we +- * have to free it before we return the error. ++ * DOS filesystems don't know what links are. + */ + static int +@@ -975,9 +931,4 @@ + * On exit: + * all denodes should be released +- * +- * Notes: +- * I'm not sure how the memory containing the pathnames pointed at by the +- * componentname structures is freed, there may be some memory bleeding +- * for each rename done. + */ + static int +@@ -1109,5 +1060,4 @@ + if (VTODE(fdvp)->de_StartCluster != VTODE(tdvp)->de_StartCluster) + newparent = 1; +- vrele(fdvp); + if (doingdirectory && newparent) { + if (error) /* write access check above */ +@@ -1177,5 +1127,6 @@ + if (!newparent) + VOP_UNLOCK(tdvp, 0, p); +- (void) relookup(fdvp, &fvp, fcnp); ++ if (relookup(fdvp, &fvp, fcnp) == 0) ++ vrele(fdvp); + if (fvp == NULL) { + /* +@@ -1857,6 +1808,6 @@ + if (error) { + bp->b_error = error; +- bp->b_flags |= B_ERROR; +- biodone(bp); ++ bp->b_ioflags |= BIO_ERROR; ++ bufdone(bp); + return (error); + } +@@ -1865,5 +1816,5 @@ + } + if (bp->b_blkno == -1) { +- biodone(bp); ++ bufdone(bp); + return (0); + } +@@ -1890,5 +1841,5 @@ + dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset); + printf(" dev %d, %d", major(dep->de_dev), minor(dep->de_dev)); +- lockmgr_printinfo(&dep->de_lock); ++ lockmgr_printinfo(&ap->a_vp->v_lock); + printf("\n"); + return (0); diff --git a/korean/msdosfs/patches.5/patch-ah b/korean/msdosfs/patches.5/patch-ah new file mode 100644 index 000000000000..85e1f4735cde --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ah @@ -0,0 +1,19 @@ +--- msdosfsmount.h.orig Mon Apr 10 04:32:37 2000 ++++ msdosfsmount.h Wed Oct 4 00:51:35 2000 +@@ -84,7 +84,7 @@ + u_long pm_fatblocksize; /* size of fat blocks in bytes */ + u_long pm_fatblocksec; /* size of fat blocks in sectors */ + u_long pm_fatsize; /* size of fat in bytes */ +- u_long pm_fatmask; /* mask to use for fat numbers */ ++ u_int32_t pm_fatmask; /* mask to use for fat numbers */ + u_long pm_fsinfo; /* fsinfo block number */ + u_long pm_nxtfree; /* next free cluster in fsinfo block */ + u_int pm_fatmult; /* these 2 values are used in fat */ +@@ -198,6 +198,7 @@ + (1024 << ((pmp)->pm_BlkPerSec >> 2)) + + int msdosfs_init __P((struct vfsconf *vfsp)); ++int msdosfs_uninit __P((struct vfsconf *vfsp)); + int msdosfs_mountroot __P((void)); + + #endif /* _KERNEL */ diff --git a/korean/msdosfs/patches.5/patch-ai b/korean/msdosfs/patches.5/patch-ai new file mode 100644 index 000000000000..cf280129829e --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ai @@ -0,0 +1,10 @@ +--- denode.h.orig Wed Dec 29 13:54:52 1999 ++++ denode.h Sun Oct 22 23:51:49 2000 +@@ -135,7 +135,6 @@ + * contained within a vnode. + */ + struct denode { +- struct lock de_lock; /* denode lock >Keep this first< */ + struct denode *de_next; /* Hash chain forward */ + struct denode **de_prev; /* Hash chain back */ + struct vnode *de_vnode; /* addr of vnode we are part of */ diff --git a/korean/msdosfs/patches.5/patch-ba b/korean/msdosfs/patches.5/patch-ba new file mode 100644 index 000000000000..7c57c9f29017 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-ba @@ -0,0 +1,9 @@ +--- ../../mount_msdos/Makefile.orig Mon Jul 3 02:53:38 2000 ++++ ../../mount_msdos/Makefile Mon Jul 3 02:53:52 2000 +@@ -3,6 +3,6 @@ + # + +-PROG= mount_msdos ++PROG= mount_komsdos + SRCS= mount_msdos.c getmntopts.c + MAN8= mount_msdos.8 diff --git a/korean/msdosfs/patches.5/patch-bb b/korean/msdosfs/patches.5/patch-bb new file mode 100644 index 000000000000..494f52fefa50 --- /dev/null +++ b/korean/msdosfs/patches.5/patch-bb @@ -0,0 +1,77 @@ +--- ../../mount_msdos/mount_msdos.c.orig Mon Jul 3 22:56:20 2000 ++++ ../../mount_msdos/mount_msdos.c Mon Jul 3 23:02:54 2000 +@@ -39,8 +39,6 @@ + #include <sys/mount.h> + #include <sys/stat.h> + +-#include <msdosfs/msdosfsmount.h> +- + #include <ctype.h> + #include <err.h> + #include <grp.h> +@@ -55,6 +53,7 @@ + #include <unistd.h> + + #include "mntopts.h" ++#include "msdosfsmount.h" + + /* + * XXX - no way to specify "foo=<bar>"-type options; that's what we'd +@@ -95,8 +94,9 @@ + mntflags = set_gid = set_uid = set_mask = 0; + (void)memset(&args, '\0', sizeof(args)); + args.magic = MSDOSFS_ARGSMAGIC; ++ args.flags = MSDOSFSMNT_EUCKOREA; + +- while ((c = getopt(argc, argv, "sl9u:g:m:o:L:W:")) != -1) { ++ while ((c = getopt(argc, argv, "sl9u:g:m:o:")) != -1) { + switch (c) { + #ifdef MSDOSFSMNT_GEMDOSFS + case 'G': +@@ -124,14 +124,6 @@ + args.mask = a_mask(optarg); + set_mask = 1; + break; +- case 'L': +- load_ultable(&args, optarg); +- args.flags |= MSDOSFSMNT_ULTABLE; +- break; +- case 'W': +- load_u2wtable(&args, optarg); +- args.flags |= MSDOSFSMNT_U2WTABLE; +- break; + case 'o': + getmntopts(optarg, mopts, &mntflags, &args.flags); + break; +@@ -173,15 +165,15 @@ + args.mask = sb.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO); + } + +- error = getvfsbyname("msdos", &vfc); +- if (error && vfsisloadable("msdos")) { +- if (vfsload("msdos")) +- err(EX_OSERR, "vfsload(msdos)"); ++ error = getvfsbyname("msdos_ko", &vfc); ++ if (error && vfsisloadable("msdos_ko")) { ++ if (vfsload("msdos_ko")) ++ err(EX_OSERR, "vfsload(msdos_ko)"); + endvfsent(); /* clear cache */ +- error = getvfsbyname("msdos", &vfc); ++ error = getvfsbyname("msdos_ko", &vfc); + } + if (error) +- errx(EX_OSERR, "msdos filesystem is not available"); ++ errx(EX_OSERR, "msdos_ko filesystem is not available"); + + if (mount(vfc.vfc_name, mntpath, mntflags, &args) < 0) + err(EX_OSERR, "%s", dev); +@@ -251,8 +243,8 @@ + usage() + { + fprintf(stderr, "%s\n%s\n", +- "usage: mount_msdos [-o options] [-u user] [-g group] [-m mask]", +- " [-s] [-l] [-9] [-L locale] [-W table] bdev dir"); ++ "usage: mount_jmsdos [-o options] [-u user] [-g group] [-m mask]", ++ " [-s] [-l] [-9] bdev dir"); + exit(EX_USAGE); + } diff --git a/korean/msdosfs/pkg-comment b/korean/msdosfs/pkg-comment new file mode 100644 index 000000000000..d0cc13dd96d4 --- /dev/null +++ b/korean/msdosfs/pkg-comment @@ -0,0 +1 @@ +Mount a Microsoft FAT Korean file system diff --git a/korean/msdosfs/pkg-descr b/korean/msdosfs/pkg-descr new file mode 100644 index 000000000000..f8da6317d657 --- /dev/null +++ b/korean/msdosfs/pkg-descr @@ -0,0 +1,11 @@ +You can mount a Korean FAT file system via "mount_komsdos" command. +Be sure that "msdos_ko.ko" is already dynamically linked into the +kernal before you type "mount_komsdos" (see kldstat(8)). + +The author is CHOI Junho <cjh@FreeBSD.org>. + +Original author of Japanese version is Toshihiko Arai <toshi@FreeBSD.org>. + +-- +CHOI Junho <cjh@FreeBSD.org> +WWW: http://www.kr.freebsd.org/~cjh/freebsd/msdosfs-ko/ diff --git a/korean/msdosfs/pkg-plist b/korean/msdosfs/pkg-plist new file mode 100644 index 000000000000..f39ed4d2b406 --- /dev/null +++ b/korean/msdosfs/pkg-plist @@ -0,0 +1,6 @@ +etc/rc.d/ko-msdosfs.sh +lib/ko-msdosfs/msdos_ko.ko +sbin/mount_komsdos +@dirrm lib/ko-msdosfs +@exec /sbin/kldload %D/lib/ko-msdosfs/msdos_ko.ko +@unexec /sbin/kldunload msdos_ko 2>/dev/null || /usr/bin/true |