[PATCH 04/18] fs: implement stat

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Fri Aug 24 14:47:15 EDT 2012


On 11:25 Fri 24 Aug     , Roberto Nibali wrote:
> Hi
> 
> > diff --git a/fs/fs.c b/fs/fs.c
> > index a19e1f4..9f2e82c 100644
> > --- a/fs/fs.c
> > +++ b/fs/fs.c
> > @@ -26,6 +26,7 @@
> >  #include <errno.h>
> >  #include <malloc.h>
> >  #include <linux/stat.h>
> > +#include <linux/err.h>
> >  #include <fcntl.h>
> >  #include <xfuncs.h>
> >  #include <init.h>
> > @@ -111,6 +112,60 @@ static int init_cwd(void)
> >
> >  postcore_initcall(init_cwd);
> >
> > +char *normalise_link(const char *pathname, const char* symlink)
> > +{
> > +       const char *buf = symlink;
> > +       char *path_free, *path;
> > +       char *absolute_path;
> > +       int point = 0;
> > +       int dir = 1;
> > +       int len;
> > +
> > +       if (symlink[0] == '/')
> > +               return strdup(symlink);
> > +
> > +       path = path_free = strdup(pathname);
> > +
> > +       while (*buf == '.' || *buf == '/') {
> > +               if (*buf == '.') {
> > +                       point++;
> > +               } else if (*buf == '/') {
> > +                       point = 0;
> > +                       dir++;
> > +               }
> > +               if (point > 2) {
> > +                       buf -= 2;
> > +                       break;
> > +               }
> > +               buf++;
> > +       }
> > +
> > +       if (dir) {
> > +               while(dir) {
> > +                       path = dirname(path);
> > +                       dir--;
> > +               }
> > +       }
> > +
> > +       len = strlen(buf) + strlen(path) + 1;
> > +       if (buf[0] != '/')
> > +               len++;
> > +
> > +       absolute_path = calloc(sizeof(char), len);
> > +
> > +       if(!absolute_path)
> > +               return NULL;
> > +
> > +       strcat(absolute_path, path);
> > +       if (buf[0] != '/')
> > +               strcat(absolute_path, "/");
> > +       strcat(absolute_path, buf);
> 
> Not that it matters hugely here, but how about strlcat(3) and checking
> the return value?

not need to check as we check it before
and strlcat does not exist on barebox

Best Regards,
J.



More information about the barebox mailing list