NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/43751: ls -L returns wrong exit code



The following reply was made to PR bin/43751; it has been noted by GNATS.

From: john heasley <heas%shrubbery.net@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, 
heas%shrubbery.net@localhost
Subject: Re: bin/43751: ls -L returns wrong exit code
Date: Thu, 12 Aug 2010 18:17:29 -0700

 Thu, Aug 12, 2010 at 08:50:04PM +0000, Valeriy E. Ushakov:
 >  I don't think this is recent.  NetBSD 1.6 behaves the same way.
 
 Crap, you are right.  my 4.99 test had the FQPN, as you noted.
 
 >  Basically, we use -L only to select FTS_LOGICAL instead of
 >  FTS_PHYSICAL.  printing code doesn't know whether -L was specified.
 >  For links with non-existent targets fts_children(3) returns the link
 >  info (as it would for FTS_PHYSICAL) and printing code just happily
 >  prints it.
 
 Does it need to?  something like this is a quick fix.
 
 Index: ls.c
 ===================================================================
 RCS file: /cvsroot/src/bin/ls/ls.c,v
 retrieving revision 1.67
 diff -d -u -d -u -r1.67 ls.c
 --- ls.c       8 Jul 2010 20:43:34 -0000       1.67
 +++ ls.c       13 Aug 2010 00:52:59 -0000
 @@ -389,6 +389,7 @@
  static void
  traverse(int argc, char *argv[], int options)
  {
 +      char path[MAXPATHLEN + 1];
        FTS *ftsp;
        FTSENT *p, *chp;
        int ch_options, error;
 @@ -442,6 +443,13 @@
                        if (!f_recursive && chp != NULL)
                                (void)fts_set(ftsp, p, FTS_SKIP);
                        break;
 +              case FTS_SLNONE:
 +                      if (options & FTS_LOGICAL) {
 +                          readlink(p->fts_path, path, sizeof(path) - 1);
 +                          errno = ENOENT;
 +                          warn("cannot access %s", path, p->fts_name);
 +                          rval = EXIT_FAILURE;
 +                      }
                }
        error = errno;
        (void)fts_close(ftsp);
 


Home | Main Index | Thread Index | Old Index