From: cgf AT cygnus DOT com (Christopher G. Faylor) Subject: Re: Still symlink strangeness in snapshot 16 Sep 1998 15:56:10 GMT Message-ID: <6ton2q$5b8$1@cronkite.cygnus.com> References: <19980916110023 DOT A11938 DOT cygnus DOT cygwin32 DOT developers AT cygnus DOT com> X-Newsreader: trn 4.0-test63 (15 March 1998) In article <19980916110023 DOT A11938 DOT cygnus DOT cygwin32 DOT developers AT cygnus DOT com>, Christopher Faylor wrote: >There are still problems with symlinks in the snapshot that Sergey's >recent patch has helped unearth. I'm working on fixing the problems >and hope to have a patch soon. > >This is just a heads up for people so we don't duplicate effort. The patch is below. I was being overly aggressive in detecting an error condition. It kicked out symbolic links referring to a drive's root directory. Index: path.cc =================================================================== RCS file: /cvs/cvsfiles/devo/winsup/path.cc,v retrieving revision 1.85 diff -u -p -r1.85 path.cc --- path.cc 1998/09/16 03:49:52 1.85 +++ path.cc 1998/09/16 15:42:33 @@ -278,19 +278,20 @@ path_conv::path_conv (const char *src, i } return; // file found } - if (len > 0 && component == 0) + else if (len > 0) { - symlink_p = 1; // last component of path was a symlink. - if (!follow_mode) + if (component == 0) { - fileattr = attr; - return; + symlink_p = 1; // last component of path was a symlink. + if (!follow_mode) + { + fileattr = attr; + return; + } } + break; } - if (len > 0 && (follow_mode || component > 0)) - break; // symlink found - s.reset (); // remember this errno if (!(tail = strrchr (path_copy, '\\')) || @@ -331,8 +332,7 @@ path_conv::path_conv (const char *src, i and translate it back from MS-DOS mode to POSIX. */ if (*sym_buf == '/' || *sym_buf == '\\') src = sym_buf; - else if (!(tail = strrchr (path_copy, '\\')) || - (tail > path_copy && tail[-1] == ':')) + else if (!(tail = strrchr (path_copy, '\\'))) system_printf ("problem parsing %s - '%s'", src, full_path); else { -- cgf AT cygnus DOT com http://www.cygnus.com/