From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 00/18 v3] fs: add symlink and readlink support
Date: Mon, 3 Sep 2012 16:47:15 +0200 [thread overview]
Message-ID: <20120903144715.GC19931@game.jcrosoft.org> (raw)
In-Reply-To: <20120903130444.GK26594@pengutronix.de>
On 15:04 Mon 03 Sep , Sascha Hauer wrote:
> On Mon, Sep 03, 2012 at 12:04:09PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > HI,
> >
> > v3:
> > - fix support
> > mkdir mymount
> > mount -t ramfs none mymount/
> > ln /env/boot/net /mymount/link
> >
> > - addres comments
> >
> > v2:
> > addres comments
> >
> > please pull
> > The following changes since commit b77300ac6c6bbbc7eac774ff0076c7c05d39735f:
> >
> > command/mount: add autodetection support (2012-08-21 18:53:00 +0800)
> >
> > are available in the git repository at:
> >
> > git://git.jcrosoft.org/barebox.git tags/fs-symlink
> >
> > for you to fetch changes up to dbae117ee78df0e4110db3a3acf4f9a8bee658d0:
> >
> > defautenv: add support of symlink (2012-09-03 17:57:23 +0800)
> >
> > ----------------------------------------------------------------
> > fs: add symlink and readlink support
>
> Now we have:
>
> > # mkdir ram
> > # mount -t ramfs none /ram/
> > # ln /env/boot/initrd ram/link
> > # ls -l ram/
> > lrwxrwxrwx 16 link -> /ram/env/boot/initrd
> > # cat ram/link
> > could not open ram/link: No such file or directory
>
> The link should point to /env/boot/initrd instead.
>
> This is probably related to your comment to nfs link support:
>
> >> There is something wrong here. I do not understand what you do here, but
> >> symlinks are not supposed to bash on them with dirname/basename until
> >> you get something which fits your needs.
> > here the issue is that on nfs you need to mount the correct path >otherwise you
> > can not get the real file
> >
> > so we need to detect it and mount the correct path
>
> This is wrong. If you put an absolute link somewhere and mount the
> filesystem a somewhere else as NFS, then yes, the link will be broken if
> the mountpoints do not match.
>
> A symbolic link is basically just a text file, there is no magic behind
> it that fixes pathes according to mount pathes.
yes a symlink is just a file containing the path
I found why I have this on my linux ( I use a special mount to have this
feature so by default th obsolute symlink should act like this)
# mkdir ram
# mount -t ramfs none /ram/
# ln /env/boot/net ram/link
# ls -l ram/
lrwxrwxrwx 16 link -> /env/boot/net
# cat ram/link
#!/bin/sh
if [ "$1" = menu ]; then
boot-menu-add-entry "$0" "network (tftp, nfs)"
exit
fi
path="/mnt/tftp"
# to get the dhcp info (global.dhcp.rootpath, global.dhcp.bootfile, global.dhcp.oftree_file)
ifup eth0
global.bootm.image="${path}/${global.user}-linux-${global.hostname}"
#global.bootm.oftree="${path}/${global.user}-oftree-${global.hostname}"
if [ -n "${global.dhcp.rootpath}" ]; then
bootp=1
nfsroot="${global.dhcp.rootpath}"
else
nfsroot="/home/${global.user}/nfsroot/${global.hostname}"
fi
if [ -n "${global.dhcp.bootfile}" -o -n "${global.dhcp.oftree_file}" ]; then
bootp=1
path="/mnt/dhcp"
if [ -d "${path}" ]; then
umount "${path}"
else
mkdir "${path}"
fi
mount -t tftp $eth0.serverip "${path}"
[ -n "${global.dhcp.bootfile}" ] && global.bootm.image="${path}/${global.dhcp.bootfile}"
[ -n "${global.dhcp.oftree_file}" ] && global.bootm.oftree="${path}/${global.dhcp.oftree_file}"
fi
if [ x${bootp} = x1 ]; then
echo "Boot via bootp/dhcp on server ${eth0.serverip}"
[ -n "${global.dhcp.bootfile}" ] && echo "bootm.image => ${global.dhcp.bootfile}"
[ -n "${global.dhcp.oftree_file}" ] && echo "bootm.oftree => ${global.dhcp.oftree_file}"
[ -n "${global.dhcp.rootpath}" ] && echo "nfsroot => ${global.dhcp.rootpath}"
fi
bootargs-ip
bootargs-root-nfs -n "$nfsroot"
I update the patch series with this patch to act as suppsoed
---
diff --git a/fs/fs.c b/fs/fs.c
index 53d8316..7c59126 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -1005,12 +1005,6 @@ int readlink(const char *pathname, char *buf, size_t bufsiz)
char *p = normalise_path(pathname);
char *freep = p;
int ret;
- size_t len = 0;
- char tmp[PATH_MAX];
-
- memset(tmp, 0, PATH_MAX);
-
- buf[0] = 0;
ret = path_check_prereq(pathname, S_IFLNK);
if (ret)
@@ -1023,29 +1017,14 @@ int readlink(const char *pathname, char *buf, size_t bufsiz)
}
fsdrv = fsdev->driver;
- len = min(bufsiz, (size_t)(PATH_MAX - 1));
if (fsdrv->readlink)
- ret = fsdrv->readlink(&fsdev->dev, p, tmp, len);
+ ret = fsdrv->readlink(&fsdev->dev, p, buf, bufsiz);
else
ret = -ENOSYS;
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);
- }
- }
-
- strncat(buf, tmp, len);
-
out:
free(freep);
Best Regards,
J.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2012-09-03 14:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-03 10:04 Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 01/18] fs: add " Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 02/18] fs: rename stat to lstat as we implement lstat Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 03/18] fs: add symlink support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 04/18] fs: implement stat Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 05/18] fs: open: add symlink support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 06/18] fs: introduce get_mounted_path to get the path where a file is mounted Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 07/18] ramfs: add symlink and readlink support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 08/18] nfs: add " Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 09/18] test: add -L support to test if it's a symbolic link Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 10/18] command: add readlink support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 11/18] command: add ln support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 12/18] ls: add symlink support to -l Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 13/18] dirname: add -V option to return only path related to the mountpoint Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 14/18] recursive_action: add ACTION_FOLLOWLINKS support Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 15/18] envfs: introduce version major and minor Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 16/18] envfs: add support of variable inode size Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 17/18] envfs: add support of symlink Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 10:08 ` [PATCH 18/18] defautenv: " Jean-Christophe PLAGNIOL-VILLARD
2012-09-03 13:04 ` [PATCH 00/18 v3] fs: add symlink and readlink support Sascha Hauer
2012-09-03 14:47 ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2012-09-03 14:50 Jean-Christophe PLAGNIOL-VILLARD
2012-09-04 7:58 ` Sascha Hauer
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=20120903144715.GC19931@game.jcrosoft.org \
--to=plagnioj@jcrosoft.com \
--cc=barebox@lists.infradead.org \
--cc=s.hauer@pengutronix.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