From: Daniel Rosenberg via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net> To: "Theodore Ts'o" <tytso@mit.edu>, linux-ext4@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <chao@kernel.org>, linux-f2fs-devel@lists.sourceforge.net, Eric Biggers <ebiggers@kernel.org>, linux-fscrypt@vger.kernel.org, Alexander Viro <viro@zeniv.linux.org.uk>, Richard Weinberger <richard@nod.at> Cc: Daniel Rosenberg <drosen@google.com>, linux-doc@vger.kernel.org, kernel-team@android.com, Jonathan Corbet <corbet@lwn.net>, linux-kernel@vger.kernel.org, Andreas Dilger <adilger.kernel@dilger.ca>, linux-fsdevel@vger.kernel.org, linux-mtd@lists.infradead.org, Gabriel Krisman Bertazi <krisman@collabora.com> Subject: [f2fs-dev] [PATCH v7 1/8] unicode: Add utf8_casefold_iter Date: Fri, 7 Feb 2020 17:35:45 -0800 Message-ID: <20200208013552.241832-2-drosen@google.com> (raw) In-Reply-To: <20200208013552.241832-1-drosen@google.com> This function will allow other uses of unicode to act upon a casefolded string without needing to allocate their own copy of one. The actor function can return an nonzero value to exit early. Signed-off-by: Daniel Rosenberg <drosen@google.com> --- fs/unicode/utf8-core.c | 25 ++++++++++++++++++++++++- include/linux/unicode.h | 10 ++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c index 2a878b739115d..db050bf59a32b 100644 --- a/fs/unicode/utf8-core.c +++ b/fs/unicode/utf8-core.c @@ -122,9 +122,32 @@ int utf8_casefold(const struct unicode_map *um, const struct qstr *str, } return -EINVAL; } - EXPORT_SYMBOL(utf8_casefold); +int utf8_casefold_iter(const struct unicode_map *um, const struct qstr *str, + struct utf8_itr_context *ctx) +{ + const struct utf8data *data = utf8nfdicf(um->version); + struct utf8cursor cur; + int c; + int res = 0; + int pos = 0; + + if (utf8ncursor(&cur, data, str->name, str->len) < 0) + return -EINVAL; + + while ((c = utf8byte(&cur))) { + if (c < 0) + return c; + res = ctx->actor(ctx, c, pos); + pos++; + if (res) + return res; + } + return res; +} +EXPORT_SYMBOL(utf8_casefold_iter); + int utf8_normalize(const struct unicode_map *um, const struct qstr *str, unsigned char *dest, size_t dlen) { diff --git a/include/linux/unicode.h b/include/linux/unicode.h index 990aa97d80496..2ae12f8710ae2 100644 --- a/include/linux/unicode.h +++ b/include/linux/unicode.h @@ -10,6 +10,13 @@ struct unicode_map { int version; }; +struct utf8_itr_context; +typedef int (*utf8_itr_actor_t)(struct utf8_itr_context *, int byte, int pos); + +struct utf8_itr_context { + utf8_itr_actor_t actor; +}; + int utf8_validate(const struct unicode_map *um, const struct qstr *str); int utf8_strncmp(const struct unicode_map *um, @@ -27,6 +34,9 @@ int utf8_normalize(const struct unicode_map *um, const struct qstr *str, int utf8_casefold(const struct unicode_map *um, const struct qstr *str, unsigned char *dest, size_t dlen); +int utf8_casefold_iter(const struct unicode_map *um, const struct qstr *str, + struct utf8_itr_context *ctx); + struct unicode_map *utf8_load(const char *version); void utf8_unload(struct unicode_map *um); -- 2.25.0.341.g760bfbb309-goog _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply index Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-08 1:35 [f2fs-dev] [PATCH v7 0/8] Support fof Casefolding and Encryption Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 1:35 ` Daniel Rosenberg via Linux-f2fs-devel [this message] 2020-02-12 3:38 ` [f2fs-dev] [PATCH v7 1/8] unicode: Add utf8_casefold_iter Eric Biggers 2020-02-14 21:47 ` Daniel Rosenberg via Linux-f2fs-devel 2020-02-17 19:02 ` Gabriel Krisman Bertazi 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 2/8] fs: Add standard casefolding support Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 2:12 ` Al Viro 2020-02-10 23:11 ` Daniel Rosenberg via Linux-f2fs-devel 2020-02-10 23:42 ` Al Viro 2020-02-12 6:34 ` Eric Biggers 2020-02-12 6:57 ` Eric Biggers 2020-02-20 2:27 ` Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 3:55 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 3/8] f2fs: Use generic " Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 4:05 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 4/8] ext4: " Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 5/8] fscrypt: Have filesystems handle their d_ops Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 4:33 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 6/8] f2fs: Handle casefolding with Encryption Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 5:10 ` Eric Biggers 2020-02-12 5:55 ` Al Viro 2020-02-12 6:06 ` Eric Biggers 2020-02-12 5:47 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 7/8] ext4: Hande casefolding with encryption Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 5:59 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 8/8] ext4: Optimize match for casefolded encrypted dirs Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 6:12 ` [f2fs-dev] [PATCH v7 0/8] Support fof Casefolding and Encryption Eric Biggers 2020-02-13 0:01 ` Daniel Rosenberg via Linux-f2fs-devel
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200208013552.241832-2-drosen@google.com \ --to=linux-f2fs-devel@lists.sourceforge.net \ --cc=adilger.kernel@dilger.ca \ --cc=chao@kernel.org \ --cc=corbet@lwn.net \ --cc=drosen@google.com \ --cc=ebiggers@kernel.org \ --cc=jaegeuk@kernel.org \ --cc=kernel-team@android.com \ --cc=krisman@collabora.com \ --cc=linux-doc@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-fscrypt@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=richard@nod.at \ --cc=tytso@mit.edu \ --cc=viro@zeniv.linux.org.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-f2fs-devel Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-f2fs-devel/0 linux-f2fs-devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-f2fs-devel linux-f2fs-devel/ https://lore.kernel.org/linux-f2fs-devel \ linux-f2fs-devel@lists.sourceforge.net public-inbox-index linux-f2fs-devel Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/net.sourceforge.lists.linux-f2fs-devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git