Stage 2/5: Change msdosfs to use libiconv in case.
authorAlexander Polakov <polachok@gmail.com>
Fri, 5 Jun 2009 08:10:38 +0000 (12:10 +0400)
committerSimon Schubert <corecode@dragonflybsd.org>
Thu, 23 Jul 2009 10:08:32 +0000 (12:08 +0200)
Code mostly from FreeBSD, ported by me. Still works with old
userspace (if mounted without conversion).

sys/vfs/msdosfs/Makefile
sys/vfs/msdosfs/direntry.h
sys/vfs/msdosfs/msdosfs_conv.c
sys/vfs/msdosfs/msdosfs_lookup.c
sys/vfs/msdosfs/msdosfs_vfsops.c
sys/vfs/msdosfs/msdosfs_vnops.c
sys/vfs/msdosfs/msdosfsmount.h

index cb20645..7a244e0 100644 (file)
@@ -4,5 +4,6 @@
 KMOD=  msdos
 SRCS=  msdosfs_conv.c msdosfs_denode.c msdosfs_fat.c msdosfs_lookup.c \
        msdosfs_vfsops.c msdosfs_vnops.c opt_msdosfs.h
+EXPORT_SYMS=    msdos_iconv
 
 .include <bsd.kmod.mk>
index c26b88b..c57f127 100644 (file)
@@ -129,16 +129,28 @@ struct winentry {
 #define DD_YEAR_SHIFT          9
 
 #ifdef _KERNEL
+struct mbnambuf {
+        size_t  nb_len;
+        int     nb_last_id;
+        char    nb_buf[WIN_MAXLEN + 1];
+};
 struct dirent;
+struct msdosfsmount;
+
+char   *mbnambuf_flush(struct mbnambuf *nbp, char *d_name, u_int16_t *d_namlen);
+void    mbnambuf_init(struct mbnambuf *nbp);
+void    mbnambuf_write(struct mbnambuf *nbp, char *name, int id);
 void unix2dostime (struct timespec *tsp, u_int16_t *ddp, 
             u_int16_t *dtp, u_int8_t *dhp);
 void dos2unixtime (u_int dd, u_int dt, u_int dh, struct timespec *tsp);
-int dos2unixfn (u_char dn[11], u_char *un, int lower, int d2u_loaded, u_int8_t *d2u, int ul_loaded, u_int8_t *ul);
-int unix2dosfn (const u_char *un, u_char dn[12], int unlen, u_int gen, int u2d_loaded, u_int8_t *u2d, int lu_loaded, u_int8_t *lu);
-int unix2winfn (const u_char *un, int unlen, struct winentry *wep, int cnt, int chksum, int table_loaded, u_int16_t *u2w);
-int winChkName (const u_char *un, int unlen, struct winentry *wep, int chksum, int u2w_loaded, u_int16_t *u2w, int ul_loaded, u_int8_t *ul);
-int win2unixfn (struct winentry *wep, char *d_name, uint16_t *d_namlen, int chksum, int table_loaded, u_int16_t *u2w);
+int dos2unixfn (u_char dn[11], u_char *un, int lower, struct msdosfsmount *pmp);
+int unix2dosfn (const u_char *un, u_char dn[12], int unlen, u_int gen, struct msdosfsmount *pmp);
+int unix2winfn (const u_char *un, int unlen, struct winentry *wep, int cnt, int chksum, struct msdosfsmount *pmp);
+int     winChkName(struct mbnambuf *nbp, const u_char *un, size_t unlen,
+            int chksum, struct msdosfsmount *pmp);
+int     win2unixfn(struct mbnambuf *nbp, struct winentry *wep, int chksum,
+            struct msdosfsmount *pmp);
 u_int8_t winChksum (u_int8_t *name);
-int winSlotCnt (const u_char *un, int unlen);
+int winSlotCnt (const u_char *un, int unlen, struct msdosfsmount *pmp);
 int winLenFixup (const u_char *un, int unlen);
 #endif /* _KERNEL */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge