[PATCH 03/18] fs: add symlink support

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Mon Sep 3 05:09:37 EDT 2012


On 10:17 Mon 03 Sep     , Sascha Hauer wrote:
> On Sat, Sep 01, 2012 at 02:37:18PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > Limit it's support to existing file only
> > 
> > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> > ---
> >  fs/fs.c      |   44 ++++++++++++++++++++++++++++++++++++++++++++
> >  include/fs.h |    3 +++
> >  2 files changed, 47 insertions(+)
> > 
> > diff --git a/fs/fs.c b/fs/fs.c
> > index f357a98..291e879 100644
> > --- a/fs/fs.c
> > +++ b/fs/fs.c
> > @@ -948,6 +948,50 @@ out:
> >  }
> >  EXPORT_SYMBOL(readlink);
> >  
> > +int symlink(const char *pathname, const char *newpath)
> > +{
> > +	struct fs_driver_d *fsdrv;
> > +	struct fs_device_d *fsdev;
> > +	char *p = normalise_path(pathname);
> > +	int ret;
> > +	struct stat s;
> > +
> > +	if (!stat(p, &s) && S_ISDIR(s.st_mode)) {
> > +		ret = -ENOSYS;
> > +		goto out;
> > +	}
> 
> newpath has to be checked for existence, not pathname.
it's the case just after

1073         p = normalise_path(newpath);
1074 
1075         ret = stat(p, &s);
1076         if (!ret) {
1077                 ret = -EEXIST;
1078                 goto out;
1079         }

> 
> Also I noticed that links to directories do not work.
yes this does not work that's why I return -ENOSYS if we try to create a
symlink on a dir

Best Regards,
J.
> 
> 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 |



More information about the barebox mailing list