From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Tom Rini <trini@konsulko.com>, u-boot@lists.denx.de
Subject: Re: [PATCH 3/3] fs: fat: carve out fat_create_dir_entry()
Date: Thu, 14 Jul 2022 09:43:09 +0900 [thread overview]
Message-ID: <20220714004309.GB42596@laputa> (raw)
In-Reply-To: <20220712223314.20530-4-xypron.glpk@gmx.de>
On Tue, Jul 12, 2022 at 10:33:14PM +0000, Heinrich Schuchardt wrote:
> fat_mkdir() and file_fat_write_at() use identical code to create a new
> directory entry. Carve out a new function fat_create_dir_entry() to avoid
> this code duplication.
Why not merge your patch[1] here as you're going to newly introduce fat_create_dir_entry()?
[1] https://lists.denx.de/pipermail/u-boot/2022-July/488693.html
-Takahiro Akashi
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
> fs/fat/fat_write.c | 93 ++++++++++++++++++++--------------------------
> 1 file changed, 40 insertions(+), 53 deletions(-)
>
> diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
> index 57522f96a8..a25b2283d4 100644
> --- a/fs/fat/fat_write.c
> +++ b/fs/fat/fat_write.c
> @@ -1314,6 +1314,43 @@ static int normalize_longname(char *l_filename, const char *filename)
> return 0;
> }
>
> +/**
> + * fat_create_dir_entry() - create directory entry
> + *
> + * @itr: directory iterator
> + * @basename: name of file or directory to be created
> + * @size: file size
> + * @attr: file or directory attributes
> + * Return: 0 for success, -EIO on error
> + */
> +static int fat_create_dir_entry(fat_itr *itr, const char *basename,
> + loff_t size, u8 attr)
> +{
> + /* Create a new file */
> + char shortname[SHORT_NAME_SIZE];
> + int ndent;
> + int ret;
> +
> + /* Check if long name is needed */
> + ndent = set_name(itr, basename, shortname);
> + if (ndent < 0)
> + return ndent;
> + ret = fat_find_empty_dentries(itr, ndent);
> + if (ret)
> + return ret;
> + if (ndent > 1) {
> + /* Set long name entries */
> + ret = fill_dir_slot(itr, basename, shortname);
> + if (ret)
> + return ret;
> + }
> +
> + /* Set short name entry */
> + fill_dentry(itr->fsdata, itr->dent, shortname, 0, size, attr);
> +
> + return 0;
> +}
> +
> int file_fat_write_at(const char *filename, loff_t pos, void *buffer,
> loff_t size, loff_t *actwrite)
> {
> @@ -1383,8 +1420,6 @@ int file_fat_write_at(const char *filename, loff_t pos, void *buffer,
> retdent->size = cpu_to_le32(pos + size);
> } else {
> /* Create a new file */
> - char shortname[SHORT_NAME_SIZE];
> - int ndent;
>
> if (pos) {
> /* No hole allowed */
> @@ -1392,25 +1427,7 @@ int file_fat_write_at(const char *filename, loff_t pos, void *buffer,
> goto exit;
> }
>
> - /* Check if long name is needed */
> - ndent = set_name(itr, basename, shortname);
> - if (ndent < 0) {
> - ret = ndent;
> - goto exit;
> - }
> - ret = fat_find_empty_dentries(itr, ndent);
> - if (ret)
> - goto exit;
> - if (ndent > 1) {
> - /* Set long name entries */
> - ret = fill_dir_slot(itr, basename, shortname);
> - if (ret)
> - goto exit;
> - }
> -
> - /* Set short name entry */
> - fill_dentry(itr->fsdata, itr->dent, shortname, 0, size,
> - ATTR_ARCH);
> + ret = fat_create_dir_entry(itr, basename, size, ATTR_ARCH);
>
> retdent = itr->dent;
> }
> @@ -1693,38 +1710,8 @@ int fat_mkdir(const char *dirname)
> ret = -EEXIST;
> goto exit;
> } else {
> - char shortname[SHORT_NAME_SIZE];
> - int ndent;
> -
> - if (itr->is_root) {
> - /* root dir cannot have "." or ".." */
> - if (!strcmp(l_dirname, ".") ||
> - !strcmp(l_dirname, "..")) {
> - ret = -EINVAL;
> - goto exit;
> - }
> - }
> -
> - /* Check if long name is needed */
> - ndent = set_name(itr, basename, shortname);
> - if (ndent < 0) {
> - ret = ndent;
> - goto exit;
> - }
> - ret = fat_find_empty_dentries(itr, ndent);
> - if (ret)
> - goto exit;
> - if (ndent > 1) {
> - /* Set long name entries */
> - ret = fill_dir_slot(itr, basename, shortname);
> - if (ret)
> - goto exit;
> - }
> -
> - /* Set attribute as archive for regular file */
> - fill_dentry(itr->fsdata, itr->dent, shortname, 0, 0,
> - ATTR_DIR | ATTR_ARCH);
> -
> + ret = fat_create_dir_entry(itr, basename, 0,
> + ATTR_DIR | ATTR_ARCH);
> retdent = itr->dent;
> }
>
> --
> 2.30.2
>
next prev parent reply other threads:[~2022-07-14 0:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-12 22:33 [PATCH 0/3] fs/fat: fix handling of full disk Heinrich Schuchardt
2022-07-12 22:33 ` [PATCH 1/3] fs: fat: finding an empty FAT cluster Heinrich Schuchardt
2022-07-14 0:39 ` AKASHI Takahiro
2022-07-12 22:33 ` [PATCH 2/3] fs: fat: determine_fatent() error handling Heinrich Schuchardt
2022-07-12 22:33 ` [PATCH 3/3] fs: fat: carve out fat_create_dir_entry() Heinrich Schuchardt
2022-07-14 0:43 ` AKASHI Takahiro [this message]
2022-07-14 0:46 ` [PATCH 0/3] fs/fat: fix handling of full disk AKASHI Takahiro
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=20220714004309.GB42596@laputa \
--to=takahiro.akashi@linaro.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox