Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp578471imm; Mon, 21 May 2018 10:38:20 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqrBovbEiVz68ZKCrEISeU7MhH4D/imGOTsq48OXxjz3Rhyw+lw/VaWVjZpvvUgnxKimbV6 X-Received: by 2002:a63:41c4:: with SMTP id o187-v6mr16010046pga.7.1526924300812; Mon, 21 May 2018 10:38:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526924300; cv=none; d=google.com; s=arc-20160816; b=mtD1y/UaRerrKGGsjFD5S8fBxmT3J3TZLAvJk0miGGO/JaW+S4Z2tz5HSO4jvTr3NY euguhaW20Z6SysqfKgWEmnygaKyHugHElYlPC5rEeRW4ng8+wYxL2czBrWUjm2Be4Fz/ BQCPvjMi7XlOyh56/r94uazcQrlhnZBlcvD0Cdt7ZCFjIjL9W5tEOfjAKwdjD1ohYtCh 1Br/lLNIWOAuF/UGBekKn2TvcQsOgbFvT3UXiFMkxLXo2wNq1ceaEKppNFXfUAFOCQss E63qbTKqcnCIhDGp7t78+hNqIESLIg3TNWLix28waBb7yEIc/Ncwx7XBMlbIChOvVudE WddQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=NM0Kf4+bP9tNE/L92rTGMU2yLllWm07jc64OkObJduE=; b=tFGUdYnO4ZfklRhwebberV6jc8gVmexIscFK9o+OyDhLHIgKuMTuf/Ocw/+hQG3v8y CSFlr5obvCkhHc8j3XBBNViAs+cUeRcWhyS3J3GEWdvkad2Db2eFsETxd4HQrotVOHm+ odAy5+RytJkIZ5XeZyrF90ijuj6+q566FnFZb+jlYhjKpe6T99j/me4ge8LeT7WcqR/x iGc6gtVHR66su6YO7qP26Faw0q1WSRsci8gNGWWjv7BWsm7RPCACOz5GUXyiky88Wwuq 6gX5+lnhgZM8xTv8G7gwOMejBInCzgmcj4IJWSjbtFwvS7KjLOKYt+sug9DqqKZleT1e yk7Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.co.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b7-v6si14762541pfl.223.2018.05.21.10.38.06; Mon, 21 May 2018 10:38:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.co.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753464AbeEURgM (ORCPT + 99 others); Mon, 21 May 2018 13:36:12 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:45262 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753316AbeEURgI (ORCPT ); Mon, 21 May 2018 13:36:08 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: krisman) with ESMTPSA id DA98628707E From: Gabriel Krisman Bertazi To: viro@ZenIV.linux.org.uk Cc: jra@google.com, tytso@mit.edu, olaf@sgi.com, darrick.wong@oracle.com, kernel@lists.collabora.co.uk, linux-fsdevel@vger.kernel.org, david@fromorbit.com, jack@suse.cz, linux-kernel@vger.kernel.org, Gabriel Krisman Bertazi Subject: [PATCH v2 01/15] nls: Wrap uni2char/char2uni callers Date: Mon, 21 May 2018 14:36:03 -0300 Message-Id: <20180521173617.31625-2-krisman@collabora.co.uk> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180521173617.31625-1-krisman@collabora.co.uk> References: <20180521173617.31625-1-krisman@collabora.co.uk> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Generated with the following coccinele script: @@ expression A, B, C, D; @@ ( - A->uni2char(B, C, D) + nls_uni2char(A, B, C, D) | - A->char2uni(B, C, D) + nls_char2uni(A, B, C, D) ) Signed-off-by: Gabriel Krisman Bertazi --- drivers/staging/ncpfs/ncplib_kernel.c | 8 ++++---- fs/befs/linuxvfs.c | 4 ++-- fs/cifs/cifs_unicode.c | 9 +++++---- fs/cifs/dir.c | 7 ++++--- fs/fat/dir.c | 8 ++++---- fs/fat/namei_vfat.c | 6 +++--- fs/hfs/trans.c | 9 +++++---- fs/hfsplus/unicode.c | 6 +++--- fs/isofs/joliet.c | 3 ++- fs/jfs/jfs_unicode.c | 7 +++---- fs/nls/nls_euc-jp.c | 4 ++-- fs/nls/nls_koi8-ru.c | 6 +++--- fs/ntfs/unistr.c | 8 ++++---- include/linux/nls.h | 13 +++++++++++++ 14 files changed, 57 insertions(+), 41 deletions(-) diff --git a/drivers/staging/ncpfs/ncplib_kernel.c b/drivers/staging/ncpfs/ncplib_kernel.c index 804adfebba2f..eefa8cff5401 100644 --- a/drivers/staging/ncpfs/ncplib_kernel.c +++ b/drivers/staging/ncpfs/ncplib_kernel.c @@ -1153,7 +1153,7 @@ ncp__io2vol(struct ncp_server *server, unsigned char *vname, unsigned int *vlen, iname += 5; } else { nospec:; - if ( (chl = in->char2uni(iname, iname_end - iname, &ec)) < 0) + if ( (chl = nls_char2uni(in, iname, iname_end - iname, &ec)) < 0) return chl; iname += chl; } @@ -1161,7 +1161,7 @@ nospec:; /* unitoupper should be here! */ - chl = out->uni2char(ec, vname, vname_end - vname); + chl = nls_uni2char(out, ec, vname, vname_end - vname); if (chl < 0) return chl; @@ -1215,7 +1215,7 @@ ncp__vol2io(struct ncp_server *server, unsigned char *iname, unsigned int *ilen, wchar_t ec; int chl; - if ( (chl = in->char2uni(vname, vname_end - vname, &ec)) < 0) { + if ( (chl = nls_char2uni(in, vname, vname_end - vname, &ec)) < 0) { err = chl; goto quit; } @@ -1233,7 +1233,7 @@ ncp__vol2io(struct ncp_server *server, unsigned char *iname, unsigned int *ilen, } iname += k; } else { - if ( (chl = out->uni2char(ec, iname, iname_end - iname)) >= 0) { + if ( (chl = nls_uni2char(out, ec, iname, iname_end - iname)) >= 0) { iname += chl; } else { int k; diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index af2832aaeec5..da8049a0dfb6 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c @@ -549,7 +549,7 @@ befs_utf2nls(struct super_block *sb, const char *in, /* convert from Unicode to nls */ if (uni > MAX_WCHAR_T) goto conv_err; - unilen = nls->uni2char(uni, &result[o], in_len - o); + unilen = nls_uni2char(nls, uni, &result[o], in_len - o); if (unilen < 0) goto conv_err; } @@ -623,7 +623,7 @@ befs_nls2utf(struct super_block *sb, const char *in, for (i = o = 0; i < in_len; i += unilen, o += utflen) { /* convert from nls to unicode */ - unilen = nls->char2uni(&in[i], in_len - i, &uni); + unilen = nls_char2uni(nls, &in[i], in_len - i, &uni); if (unilen < 0) goto conv_err; diff --git a/fs/cifs/cifs_unicode.c b/fs/cifs/cifs_unicode.c index b380e0871372..3b5d48433f23 100644 --- a/fs/cifs/cifs_unicode.c +++ b/fs/cifs/cifs_unicode.c @@ -148,7 +148,7 @@ cifs_mapchar(char *target, const __u16 *from, const struct nls_table *cp, return len; /* if character not one of seven in special remap set */ - len = cp->uni2char(src_char, target, NLS_MAX_CHARSET_SIZE); + len = nls_uni2char(cp, src_char, target, NLS_MAX_CHARSET_SIZE); if (len <= 0) goto surrogate_pair; @@ -292,7 +292,7 @@ cifs_strtoUTF16(__le16 *to, const char *from, int len, } for (i = 0; len && *from; i++, from += charlen, len -= charlen) { - charlen = codepage->char2uni(from, len, &wchar_to); + charlen = nls_char2uni(codepage, from, len, &wchar_to); if (charlen < 1) { cifs_dbg(VFS, "strtoUTF16: char2uni of 0x%x returned %d\n", *from, charlen); @@ -518,7 +518,8 @@ cifsConvertToUTF16(__le16 *target, const char *source, int srclen, * as they use backslash as separator. */ if (dst_char == 0) { - charlen = cp->char2uni(source + i, srclen - i, &tmp); + charlen = nls_char2uni(cp, source + i, srclen - i, + &tmp); dst_char = cpu_to_le16(tmp); /* @@ -608,7 +609,7 @@ cifs_local_to_utf16_bytes(const char *from, int len, wchar_t wchar_to; for (i = 0; len && *from; i++, from += charlen, len -= charlen) { - charlen = codepage->char2uni(from, len, &wchar_to); + charlen = nls_char2uni(codepage, from, len, &wchar_to); /* Failed conversion defaults to a question mark */ if (charlen < 1) charlen = 1; diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 81ba6e0d88d8..d1f795dda865 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c @@ -910,7 +910,7 @@ static int cifs_ci_hash(const struct dentry *dentry, struct qstr *q) hash = init_name_hash(dentry); for (i = 0; i < q->len; i += charlen) { - charlen = codepage->char2uni(&q->name[i], q->len - i, &c); + charlen = nls_char2uni(codepage, &q->name[i], q->len - i, &c); /* error out if we can't convert the character */ if (unlikely(charlen < 0)) return charlen; @@ -939,8 +939,9 @@ static int cifs_ci_compare(const struct dentry *dentry, for (i = 0; i < len; i += l1) { /* Convert characters in both strings to UTF-16. */ - l1 = codepage->char2uni(&str[i], len - i, &c1); - l2 = codepage->char2uni(&name->name[i], name->len - i, &c2); + l1 = nls_char2uni(codepage, &str[i], len - i, &c1); + l2 = nls_char2uni(codepage, &name->name[i], name->len - i, + &c2); /* * If we can't convert either character, just declare it to diff --git a/fs/fat/dir.c b/fs/fat/dir.c index 8e100c3bf72c..6dd8d386d0ef 100644 --- a/fs/fat/dir.c +++ b/fs/fat/dir.c @@ -153,7 +153,7 @@ static int uni16_to_x8(struct super_block *sb, unsigned char *ascii, while (*ip && ((len - NLS_MAX_CHARSET_SIZE) > 0)) { ec = *ip++; - charlen = nls->uni2char(ec, op, NLS_MAX_CHARSET_SIZE); + charlen = nls_uni2char(nls, ec, op, NLS_MAX_CHARSET_SIZE); if (charlen > 0) { op += charlen; len -= charlen; @@ -195,7 +195,7 @@ fat_short2uni(struct nls_table *t, unsigned char *c, int clen, wchar_t *uni) { int charlen; - charlen = t->char2uni(c, clen, uni); + charlen = nls_char2uni(t, c, clen, uni); if (charlen < 0) { *uni = 0x003f; /* a question mark */ charlen = 1; @@ -210,7 +210,7 @@ fat_short2lower_uni(struct nls_table *t, unsigned char *c, int charlen; wchar_t wc; - charlen = t->char2uni(c, clen, &wc); + charlen = nls_char2uni(t, c, clen, &wc); if (charlen < 0) { *uni = 0x003f; /* a question mark */ charlen = 1; @@ -220,7 +220,7 @@ fat_short2lower_uni(struct nls_table *t, unsigned char *c, if (!nc) nc = *c; - charlen = t->char2uni(&nc, 1, uni); + charlen = nls_char2uni(t, &nc, 1, uni); if (charlen < 0) { *uni = 0x003f; /* a question mark */ charlen = 1; diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c index 2649759c478a..214016b30f27 100644 --- a/fs/fat/namei_vfat.c +++ b/fs/fat/namei_vfat.c @@ -289,7 +289,7 @@ static inline int to_shortname_char(struct nls_table *nls, return 1; } - len = nls->uni2char(*src, buf, buf_size); + len = nls_uni2char(nls, *src, buf, buf_size); if (len <= 0) { info->valid = 0; buf[0] = '_'; @@ -544,8 +544,8 @@ xlate_to_uni(const unsigned char *name, int len, unsigned char *outname, ip += 5; i += 5; } else { - charlen = nls->char2uni(ip, len - i, - (wchar_t *)op); + charlen = nls_char2uni(nls, ip, len - i, + (wchar_t *)op); if (charlen < 0) return -EINVAL; ip += charlen; diff --git a/fs/hfs/trans.c b/fs/hfs/trans.c index 39f5e343bf4d..2fae312edb31 100644 --- a/fs/hfs/trans.c +++ b/fs/hfs/trans.c @@ -49,7 +49,8 @@ int hfs_mac2asc(struct super_block *sb, char *out, const struct hfs_name *in) while (srclen > 0) { if (nls_disk) { - size = nls_disk->char2uni(src, srclen, &ch); + size = nls_char2uni(nls_disk, src, srclen, + &ch); if (size <= 0) { ch = '?'; size = 1; @@ -62,7 +63,7 @@ int hfs_mac2asc(struct super_block *sb, char *out, const struct hfs_name *in) } if (ch == '/') ch = ':'; - size = nls_io->uni2char(ch, dst, dstlen); + size = nls_uni2char(nls_io, ch, dst, dstlen); if (size < 0) { if (size == -ENAMETOOLONG) goto out; @@ -110,7 +111,7 @@ void hfs_asc2mac(struct super_block *sb, struct hfs_name *out, const struct qstr wchar_t ch; while (srclen > 0) { - size = nls_io->char2uni(src, srclen, &ch); + size = nls_char2uni(nls_io, src, srclen, &ch); if (size < 0) { ch = '?'; size = 1; @@ -120,7 +121,7 @@ void hfs_asc2mac(struct super_block *sb, struct hfs_name *out, const struct qstr if (ch == ':') ch = '/'; if (nls_disk) { - size = nls_disk->uni2char(ch, dst, dstlen); + size = nls_uni2char(nls_disk, ch, dst, dstlen); if (size < 0) { if (size == -ENAMETOOLONG) goto out; diff --git a/fs/hfsplus/unicode.c b/fs/hfsplus/unicode.c index dfa90c21948f..4f2908169535 100644 --- a/fs/hfsplus/unicode.c +++ b/fs/hfsplus/unicode.c @@ -190,7 +190,7 @@ int hfsplus_uni2asc(struct super_block *sb, c0 = ':'; break; } - res = nls->uni2char(c0, op, len); + res = nls_uni2char(nls, c0, op, len); if (res < 0) { if (res == -ENAMETOOLONG) goto out; @@ -233,7 +233,7 @@ int hfsplus_uni2asc(struct super_block *sb, cc = c0; } done: - res = nls->uni2char(cc, op, len); + res = nls_uni2char(nls, cc, op, len); if (res < 0) { if (res == -ENAMETOOLONG) goto out; @@ -256,7 +256,7 @@ int hfsplus_uni2asc(struct super_block *sb, static inline int asc2unichar(struct super_block *sb, const char *astr, int len, wchar_t *uc) { - int size = HFSPLUS_SB(sb)->nls->char2uni(astr, len, uc); + int size = nls_char2uni(HFSPLUS_SB(sb)->nls, astr, len, uc); if (size <= 0) { *uc = '?'; size = 1; diff --git a/fs/isofs/joliet.c b/fs/isofs/joliet.c index be8b6a9d0b92..56fac73b27a5 100644 --- a/fs/isofs/joliet.c +++ b/fs/isofs/joliet.c @@ -25,7 +25,8 @@ uni16_to_x8(unsigned char *ascii, __be16 *uni, int len, struct nls_table *nls) while ((ch = get_unaligned(ip)) && len) { int llen; - llen = nls->uni2char(be16_to_cpu(ch), op, NLS_MAX_CHARSET_SIZE); + llen = nls_uni2char(nls, be16_to_cpu(ch), op, + NLS_MAX_CHARSET_SIZE); if (llen > 0) op += llen; else diff --git a/fs/jfs/jfs_unicode.c b/fs/jfs/jfs_unicode.c index c7de6f5bbefc..11b00906cdf1 100644 --- a/fs/jfs/jfs_unicode.c +++ b/fs/jfs/jfs_unicode.c @@ -41,9 +41,8 @@ int jfs_strfromUCS_le(char *to, const __le16 * from, for (i = 0; (i < len) && from[i]; i++) { int charlen; charlen = - codepage->uni2char(le16_to_cpu(from[i]), - &to[outlen], - NLS_MAX_CHARSET_SIZE); + nls_uni2char(codepage, le16_to_cpu(from[i]), + &to[outlen], NLS_MAX_CHARSET_SIZE); if (charlen > 0) outlen += charlen; else @@ -88,7 +87,7 @@ static int jfs_strtoUCS(wchar_t * to, const unsigned char *from, int len, if (codepage) { for (i = 0; len && *from; i++, from += charlen, len -= charlen) { - charlen = codepage->char2uni(from, len, &to[i]); + charlen = nls_char2uni(codepage, from, len, &to[i]); if (charlen < 1) { jfs_err("jfs_strtoUCS: char2uni returned %d.", charlen); diff --git a/fs/nls/nls_euc-jp.c b/fs/nls/nls_euc-jp.c index 162b3f160353..eec257545f04 100644 --- a/fs/nls/nls_euc-jp.c +++ b/fs/nls/nls_euc-jp.c @@ -413,7 +413,7 @@ static int uni2char(const wchar_t uni, if (!p_nls) return -EINVAL; - if ((n = p_nls->uni2char(uni, out, boundlen)) < 0) + if ((n = nls_uni2char(p_nls, uni, out, boundlen)) < 0) return n; /* translate SJIS into EUC-JP */ @@ -543,7 +543,7 @@ static int char2uni(const unsigned char *rawstring, int boundlen, sjis_temp[1] = 0x00; } - if ( (n = p_nls->char2uni(sjis_temp, sizeof(sjis_temp), uni)) < 0) + if ( (n = nls_char2uni(p_nls, sjis_temp, sizeof(sjis_temp), uni)) < 0) return n; return euc_offset; diff --git a/fs/nls/nls_koi8-ru.c b/fs/nls/nls_koi8-ru.c index a80a741a8676..32781252110d 100644 --- a/fs/nls/nls_koi8-ru.c +++ b/fs/nls/nls_koi8-ru.c @@ -28,12 +28,12 @@ static int uni2char(const wchar_t uni, else if (uni == 0x255d || uni == 0x256c) return 0; else - return p_nls->uni2char(uni, out, boundlen); + return nls_uni2char(p_nls, uni, out, boundlen); return 1; } else /* fast path */ - return p_nls->uni2char(uni, out, boundlen); + return nls_uni2char(p_nls, uni, out, boundlen); } static int char2uni(const unsigned char *rawstring, int boundlen, @@ -47,7 +47,7 @@ static int char2uni(const unsigned char *rawstring, int boundlen, return 1; } - n = p_nls->char2uni(rawstring, boundlen, uni); + n = nls_char2uni(p_nls, rawstring, boundlen, uni); return n; } diff --git a/fs/ntfs/unistr.c b/fs/ntfs/unistr.c index 005ca4b0f132..e0a5f33441df 100644 --- a/fs/ntfs/unistr.c +++ b/fs/ntfs/unistr.c @@ -269,8 +269,8 @@ int ntfs_nlstoucs(const ntfs_volume *vol, const char *ins, ucs = kmem_cache_alloc(ntfs_name_cache, GFP_NOFS); if (likely(ucs)) { for (i = o = 0; i < ins_len; i += wc_len) { - wc_len = nls->char2uni(ins + i, ins_len - i, - &wc); + wc_len = nls_char2uni(nls, ins + i, + ins_len - i, &wc); if (likely(wc_len >= 0 && o < NTFS_MAX_NAME_LEN)) { if (likely(wc)) { @@ -355,8 +355,8 @@ int ntfs_ucstonls(const ntfs_volume *vol, const ntfschar *ins, goto mem_err_out; } for (i = o = 0; i < ins_len; i++) { -retry: wc = nls->uni2char(le16_to_cpu(ins[i]), ns + o, - ns_len - o); +retry: wc = nls_uni2char(nls, le16_to_cpu(ins[i]), + ns + o, ns_len - o); if (wc > 0) { o += wc; continue; diff --git a/include/linux/nls.h b/include/linux/nls.h index 499e486b3722..5073ecd57279 100644 --- a/include/linux/nls.h +++ b/include/linux/nls.h @@ -59,6 +59,19 @@ extern int utf8s_to_utf16s(const u8 *s, int len, extern int utf16s_to_utf8s(const wchar_t *pwcs, int len, enum utf16_endian endian, u8 *s, int maxlen); +static inline int nls_uni2char(const struct nls_table *table, wchar_t uni, + unsigned char *out, int boundlen) +{ + return table->uni2char(uni, out, boundlen); +} + +static inline int nls_char2uni(const struct nls_table *table, + const unsigned char *rawstring, + int boundlen, wchar_t *uni) +{ + return table->char2uni(rawstring, boundlen, uni); +} + static inline unsigned char nls_tolower(struct nls_table *t, unsigned char c) { unsigned char nc = t->charset2lower[c]; -- 2.17.0