mail archive of the barebox mailing list
 help / color / mirror / Atom feed
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

  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