From b5f17d3834cd65002b6e89c89a2e1c99dc23b52b Mon Sep 17 00:00:00 2001 From: Alexander Polakov Date: Tue, 22 Mar 2011 02:00:15 +0300 Subject: [PATCH 1/2] msdosfs: use size_t for unlen consistently instead of int. size_t is different from int on x86-64, which can lead to weird effects. Probably fixes issue2027. --- sys/vfs/msdosfs/direntry.h | 8 ++++---- sys/vfs/msdosfs/msdosfs_conv.c | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sys/vfs/msdosfs/direntry.h b/sys/vfs/msdosfs/direntry.h index c57f127..209182e 100644 --- a/sys/vfs/msdosfs/direntry.h +++ b/sys/vfs/msdosfs/direntry.h @@ -144,13 +144,13 @@ 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, 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 unix2dosfn (const u_char *un, u_char dn[12], size_t unlen, u_int gen, struct msdosfsmount *pmp); +int unix2winfn (const u_char *un, size_t 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, struct msdosfsmount *pmp); -int winLenFixup (const u_char *un, int unlen); +int winSlotCnt (const u_char *un, size_t unlen, struct msdosfsmount *pmp); +size_t winLenFixup (const u_char *un, size_t unlen); #endif /* _KERNEL */ diff --git a/sys/vfs/msdosfs/msdosfs_conv.c b/sys/vfs/msdosfs/msdosfs_conv.c index 514a06a..ad62cf3 100644 --- a/sys/vfs/msdosfs/msdosfs_conv.c +++ b/sys/vfs/msdosfs/msdosfs_conv.c @@ -504,7 +504,7 @@ pmp) int dos2unixfn(u_char dn[11], u_char *un, int lower, struct msdosfsmount *pmp) { - int i; + size_t i; int thislong = 1; u_char c; @@ -662,7 +662,7 @@ unix2doschr(const u_char **instr, size_t *ilen, struct msdosfsmount *pmp) */ int -unix2dosfn(const u_char *un, u_char dn[12], int unlen, u_int gen, struct msdosfsmount *pmp) +unix2dosfn(const u_char *un, u_char dn[12], size_t unlen, u_int gen, struct msdosfsmount *pmp) { ssize_t i, j; int l; @@ -906,7 +906,7 @@ instr, * i.e. doesn't consist solely of blanks and dots */ int -unix2winfn(const u_char *un, int unlen, struct winentry *wep, int cnt, int chksum, struct msdosfsmount *pmp) +unix2winfn(const u_char *un, size_t unlen, struct winentry *wep, int cnt, int chksum, struct msdosfsmount *pmp) { u_int8_t *wcp; int i, end; @@ -1167,7 +1167,7 @@ winChksum(u_int8_t *name) * Determine the number of slots necessary for Win95 names */ int -winSlotCnt(const u_char *un, int unlen, struct msdosfsmount *pmp) +winSlotCnt(const u_char *un, size_t unlen, struct msdosfsmount *pmp) { size_t wlen; char wn[WIN_MAXLEN * 2 + 1], *wnp; @@ -1188,8 +1188,8 @@ winSlotCnt(const u_char *un, int unlen, struct msdosfsmount *pmp) /* * Determine the number of bytes neccesary for Win95 names */ -int -winLenFixup(const u_char *un, int unlen) +size_t +winLenFixup(const u_char *un, size_t unlen) { for (un += unlen; unlen > 0; unlen--) if (*--un != ' ' && *un != '.') -- 1.7.0.7