* [PATCH] centralize some nls helpers
@ 2004-09-01 9:50 Christoph Hellwig
0 siblings, 0 replies; 2+ messages in thread
From: Christoph Hellwig @ 2004-09-01 9:50 UTC (permalink / raw)
To: akpm; +Cc: linux-fsdevel
This patch adds common nls_tolower, nls_toupper and nls_strnicmp helpers
to nls.h and uses them in various filesystems instead of local
duplicates.
The situation for ncpfs isn't as nice as it allows to compile without
nls support even if the kernel has CONFIG_NLS set, so we need wrappers
there.
--- 1.21/fs/fat/dir.c 2003-09-29 03:11:39 +02:00
+++ edited/fs/fat/dir.c 2004-09-01 11:14:11 +02:00
@@ -93,14 +93,6 @@
}
#endif
-static inline unsigned char
-fat_tolower(struct nls_table *t, unsigned char c)
-{
- unsigned char nc = t->charset2lower[c];
-
- return nc ? nc : c;
-}
-
static inline int
fat_short2uni(struct nls_table *t, unsigned char *c, int clen, wchar_t *uni)
{
@@ -140,17 +132,6 @@
return charlen;
}
-static int
-fat_strnicmp(struct nls_table *t, const unsigned char *s1,
- const unsigned char *s2, int len)
-{
- while(len--)
- if (fat_tolower(t, *s1++) != fat_tolower(t, *s2++))
- return 1;
-
- return 0;
-}
-
static inline int
fat_shortname2uni(struct nls_table *nls, unsigned char *buf, int buf_size,
wchar_t *uni_buf, unsigned short opt, int lower)
@@ -311,7 +292,7 @@
:uni16_to_x8(bufname, bufuname, uni_xlate, nls_io);
if (xlate_len == name_len)
if ((!anycase && !memcmp(name, bufname, xlate_len)) ||
- (anycase && !fat_strnicmp(nls_io, name, bufname,
+ (anycase && !nls_strnicmp(nls_io, name, bufname,
xlate_len)))
goto Found;
@@ -322,7 +303,7 @@
if (xlate_len != name_len)
continue;
if ((!anycase && !memcmp(name, bufname, xlate_len)) ||
- (anycase && !fat_strnicmp(nls_io, name, bufname,
+ (anycase && !nls_strnicmp(nls_io, name, bufname,
xlate_len)))
goto Found;
}
--- 1.13/fs/ncpfs/ncplib_kernel.c 2004-06-18 08:59:01 +02:00
+++ edited/fs/ncpfs/ncplib_kernel.c 2004-09-01 11:14:11 +02:00
@@ -1115,22 +1115,6 @@
* from the vfat file system and hints from Petr Vandrovec.
*/
-inline unsigned char
-ncp__tolower(struct nls_table *t, unsigned char c)
-{
- unsigned char nc = t->charset2lower[c];
-
- return nc ? nc : c;
-}
-
-inline unsigned char
-ncp__toupper(struct nls_table *t, unsigned char c)
-{
- unsigned char nc = t->charset2upper[c];
-
- return nc ? nc : c;
-}
-
int
ncp__io2vol(struct ncp_server *server, unsigned char *vname, unsigned int *vlen,
const unsigned char *iname, unsigned int ilen, int cc)
@@ -1346,16 +1330,3 @@
}
#endif
-
-inline int
-ncp_strnicmp(struct nls_table *t, const unsigned char *s1,
- const unsigned char *s2, int n)
-{
- int i;
-
- for (i=0; i<n; i++)
- if (ncp_tolower(t, s1[i]) != ncp_tolower(t, s2[i]))
- return 1;
-
- return 0;
-}
--- 1.9/fs/ncpfs/ncplib_kernel.h 2004-06-18 08:59:01 +02:00
+++ edited/fs/ncpfs/ncplib_kernel.h 2004-09-01 11:46:54 +02:00
@@ -132,8 +132,6 @@
#ifdef CONFIG_NCPFS_NLS
-unsigned char ncp__tolower(struct nls_table *, unsigned char);
-unsigned char ncp__toupper(struct nls_table *, unsigned char);
int ncp__io2vol(struct ncp_server *, unsigned char *, unsigned int *,
const unsigned char *, unsigned int, int);
int ncp__vol2io(struct ncp_server *, unsigned char *, unsigned int *,
@@ -141,8 +139,10 @@
#define NCP_ESC ':'
#define NCP_IO_TABLE(dentry) (NCP_SERVER((dentry)->d_inode)->nls_io)
-#define ncp_tolower(t, c) ncp__tolower(t, c)
-#define ncp_toupper(t, c) ncp__toupper(t, c)
+#define ncp_tolower(t, c) nls_tolower(t, c)
+#define ncp_toupper(t, c) nls_toupper(t, c)
+#define ncp_strnicmp(t, s1, s2, len) \
+ nls_strnicmp(t, s1, s2, len)
#define ncp_io2vol(S,m,i,n,k,U) ncp__io2vol(S,m,i,n,k,U)
#define ncp_vol2io(S,m,i,n,k,U) ncp__vol2io(S,m,i,n,k,U)
@@ -159,11 +159,19 @@
#define ncp_io2vol(S,m,i,n,k,U) ncp__io2vol(m,i,n,k,U)
#define ncp_vol2io(S,m,i,n,k,U) ncp__vol2io(m,i,n,k,U)
-#endif /* CONFIG_NCPFS_NLS */
-int
-ncp_strnicmp(struct nls_table *,
- const unsigned char *, const unsigned char *, int);
+static inline int ncp_strnicmp(struct nls_table *t, const unsigned char *s1,
+ const unsigned char *s2, int len)
+{
+ while (len--) {
+ if (tolower(*s1++) != tolower(*s2++))
+ return 1;
+ }
+
+ return 0;
+}
+
+#endif /* CONFIG_NCPFS_NLS */
#define NCP_GET_AGE(dentry) (jiffies - (dentry)->d_time)
#define NCP_MAX_AGE(server) ((server)->dentry_ttl)
===== fs/vfat/namei.c 1.49 vs edited =====
--- 1.49/fs/vfat/namei.c 2004-05-02 12:15:47 +02:00
+++ edited/fs/vfat/namei.c 2004-09-01 11:14:11 +02:00
@@ -73,33 +73,6 @@
return ret;
}
-static inline unsigned char
-vfat_tolower(struct nls_table *t, unsigned char c)
-{
- unsigned char nc = t->charset2lower[c];
-
- return nc ? nc : c;
-}
-
-static inline unsigned char
-vfat_toupper(struct nls_table *t, unsigned char c)
-{
- unsigned char nc = t->charset2upper[c];
-
- return nc ? nc : c;
-}
-
-static inline int
-vfat_strnicmp(struct nls_table *t, const unsigned char *s1,
- const unsigned char *s2, int len)
-{
- while(len--)
- if (vfat_tolower(t, *s1++) != vfat_tolower(t, *s2++))
- return 1;
-
- return 0;
-}
-
/* returns the length of a struct qstr, ignoring trailing dots */
static unsigned int vfat_striptail_len(struct qstr *qstr)
{
@@ -142,7 +115,7 @@
hash = init_name_hash();
while (len--)
- hash = partial_name_hash(vfat_tolower(t, *name++), hash);
+ hash = partial_name_hash(nls_tolower(t, *name++), hash);
qstr->hash = end_name_hash(hash);
return 0;
@@ -160,7 +133,7 @@
alen = vfat_striptail_len(a);
blen = vfat_striptail_len(b);
if (alen == blen) {
- if (vfat_strnicmp(t, a->name, b->name, alen) == 0)
+ if (nls_strnicmp(t, a->name, b->name, alen) == 0)
return 0;
}
return 1;
@@ -341,7 +314,7 @@
info->upper = 0;
}
- buf[0] = vfat_toupper(nls, buf[0]);
+ buf[0] = nls_toupper(nls, buf[0]);
if (isalpha(buf[0])) {
if (buf[0] == prev)
info->lower = 0;
--- 1.4/include/linux/nls.h 2003-09-21 23:49:56 +02:00
+++ edited/include/linux/nls.h 2004-09-01 11:14:11 +02:00
@@ -33,6 +33,31 @@
extern int utf8_wctomb(__u8 *, wchar_t, int);
extern int utf8_wcstombs(__u8 *, const wchar_t *, int);
+static inline unsigned char nls_tolower(struct nls_table *t, unsigned char c)
+{
+ unsigned char nc = t->charset2lower[c];
+
+ return nc ? nc : c;
+}
+
+static inline unsigned char nls_toupper(struct nls_table *t, unsigned char c)
+{
+ unsigned char nc = t->charset2upper[c];
+
+ return nc ? nc : c;
+}
+
+static inline int nls_strnicmp(struct nls_table *t, const unsigned char *s1,
+ const unsigned char *s2, int len)
+{
+ while (len--) {
+ if (nls_tolower(t, *s1++) != nls_tolower(t, *s2++))
+ return 1;
+ }
+
+ return 0;
+}
+
#define MODULE_ALIAS_NLS(name) MODULE_ALIAS("nls_" __stringify(name))
#endif /* _LINUX_NLS_H */
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] centralize some nls helpers
@ 2004-09-01 14:15 Petr Vandrovec
0 siblings, 0 replies; 2+ messages in thread
From: Petr Vandrovec @ 2004-09-01 14:15 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: linux-fsdevel
On 1 Sep 04 at 11:50, Christoph Hellwig wrote:
> This patch adds common nls_tolower, nls_toupper and nls_strnicmp helpers
> to nls.h and uses them in various filesystems instead of local
> duplicates.
>
> The situation for ncpfs isn't as nice as it allows to compile without
> nls support even if the kernel has CONFIG_NLS set, so we need wrappers
> there.
I have no problem with setting CONFIG_NCPFS_NLS == CONFIG_NLS. As all
ncpfs features except NCPFS_SMALLDOS can be set at mount time,
there is no reason for not hardwiring all CONFIG_NCPFS_* options
(except SMALLDOS) to 'y', except that it will consume some additional
memory (and I doubt that embedded people use ncpfs). Only question
is whether retain CONFIG_NCP_FS selecting NLS (currently CONFIG_NCPFS_NLS
selects NLS), or whether CONFIG_NCP_FS should depend on NLS
(I've thought that CONFIG_NCPFS_NLS depends on NLS and only just now
I found that CONFIG_NCPFS_NLS selects NLS now...).
Petr Vandrovec
vandrove@vc.cvut.cz
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-09-01 14:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-01 14:15 [PATCH] centralize some nls helpers Petr Vandrovec
-- strict thread matches above, loose matches on Subject: below --
2004-09-01 9:50 Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).