mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 01/18] fs: add readlink support
Date: Mon, 27 Aug 2012 15:25:15 +0200	[thread overview]
Message-ID: <20120827132515.GE26594@pengutronix.de> (raw)
In-Reply-To: <1345783818-28784-1-git-send-email-plagnioj@jcrosoft.com>

On Fri, Aug 24, 2012 at 06:50:01AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
>  fs/fs.c      |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/fs.h |    5 +++++
>  2 files changed, 64 insertions(+)
> 
> diff --git a/fs/fs.c b/fs/fs.c
> index 8ab1a3a..64a0d94 100644
> --- a/fs/fs.c
> +++ b/fs/fs.c
> @@ -890,6 +890,65 @@ int close(int fd)
>  }
>  EXPORT_SYMBOL(close);
>  
> +ssize_t readlink(const char *pathname, char *buf, size_t bufsiz)

man 2 readlink says:

> On  success,  readlink()  returns  the number of bytes placed in buf.
> On error, -1 is returned and errno is set to indicate the error.

This function instead returns 0 for success and a negative error value.
This is ok, but if the meaning of the return value is different, then it
does not make sense to try to match the function prototype with the libc
function.
Make the return type int.

> +{
> +	struct fs_driver_d *fsdrv;
> +	struct fs_device_d *fsdev;
> +	char *p = normalise_path(pathname);
> +	char *freep = p;
> +	int ret;
> +	size_t len = 0;
> +	char tmp[PATH_MAX];
> +
> +	tmp[0] = 0;
> +	buf[0] = 0;
> +
> +	ret = path_check_prereq(pathname, S_IFLNK);
> +	if (ret)
> +		goto out;
> +
> +	fsdev = get_fs_device_and_root_path(&p);
> +	if (!fsdev) {
> +		ret = -ENODEV;
> +		goto out;
> +	}
> +	fsdrv = fsdev->driver;
> +
> +	len = min(bufsiz, (size_t)PATH_MAX);
> +	if (fsdrv->readlink) {
> +		ret = fsdrv->readlink(&fsdev->dev, p, tmp, len);
> +	} else {
> +		ret = -EROFS;

EROFS is a strange error code here.

> +		goto out;

This is not needed

> +	}
> +
> +	if (ret)
> +		goto out;
> +
> +	if (tmp[0] == '/') {
> +		int l = strlen(fsdev->path);
> +
> +		if (fsdev->path[l - 1] == '/')
> +			l--;
> +
> +		if (l) {
> +			len -= l;
> +			strncat(buf, fsdev->path, l);
> +		}
> +	}

I don't understand why you manipulate the link target when the link target
is an absolute path. This means that if mount a fatfs to fat and put a
link there:

/fat/somelink -> /env/bla

Then readlink will return /fat/env/bla, which is not what you want.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2012-08-27 13:25 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-24  4:46 [PATCH 00/18] fs: add symlink and " Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50 ` [PATCH 01/18] fs: add " Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 02/18] fs: rename stat to lstat as we implement lstat Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 03/18] fs: add symlink support Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 13:35     ` Sascha Hauer
2012-09-01 10:42       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 04/18] fs: implement stat Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  9:25     ` Roberto Nibali
2012-08-24 18:47       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 13:52     ` Sascha Hauer
2012-09-01 10:39       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 05/18] fs: open: add symlink support Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 06/18] fs: introduce get_mounted_path to get the path where a file is mounted Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 13:53     ` Sascha Hauer
2012-09-01 10:37       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 07/18] ramfs: add symlink and readlink support Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 13:59     ` Sascha Hauer
2012-08-29  5:21       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 08/18] nfs: add " Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 14:04     ` Sascha Hauer
2012-08-24  4:50   ` [PATCH 09/18] test: add -L support to test if it's a symbolic link Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 10/18] commands: add readlink support Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  9:31     ` Roberto Nibali
2012-08-24 18:46       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 11/18] command: add ln support Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 12/18] ls: add symlink support to -l Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 13/18] dirname: add -V option to return only path related to the mountpoint Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 14/18] recursive_action: add ACTION_FOLLOWLINKS support Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 15/18] evnfs: introduce major and minor Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 14:12     ` Sascha Hauer
2012-08-29  5:23       ` Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 16/18] envfs: add support of variable inode size Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 17/18] envfs: add support of symlink Jean-Christophe PLAGNIOL-VILLARD
2012-08-24  4:50   ` [PATCH 18/18] defautenv: " Jean-Christophe PLAGNIOL-VILLARD
2012-08-27 13:25   ` Sascha Hauer [this message]
2012-09-01 10:50     ` [PATCH 01/18] fs: add readlink support Jean-Christophe PLAGNIOL-VILLARD
2012-09-01 12:35 [PATCH 00/18 v2] fs: add symlink and " Jean-Christophe PLAGNIOL-VILLARD
2012-09-01 12:37 ` [PATCH 01/18] fs: add " Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:04 [PATCH 00/18 v3] fs: add symlink and " Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 01/18] fs: add " Jean-Christophe PLAGNIOL-VILLARD

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=20120827132515.GE26594@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=plagnioj@jcrosoft.com \
    /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