=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/lndir/lndir.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- src/usr.bin/lndir/lndir.c 2003/04/10 23:21:57 1.12 +++ src/usr.bin/lndir/lndir.c 2003/04/14 03:14:06 1.13 @@ -1,4 +1,4 @@ -/* $OpenBSD: lndir.c,v 1.12 2003/04/10 23:21:57 millert Exp $ */ +/* $OpenBSD: lndir.c,v 1.13 2003/04/14 03:14:06 millert Exp $ */ /* $XConsortium: lndir.c /main/15 1995/08/30 10:56:18 gildea $ */ /* @@ -134,15 +134,19 @@ int equivalent(char *lname, char *rname) { - char *s; + char *s, *ns; if (strcmp(lname, rname) == 0) return(1); for (s = lname; *s && (s = strchr(s, '/')); s++) { - while (s[1] == '/') - strcpy(s+1, s+2); + if (s[1] == '/') { + /* collapse multiple slashes in lname */ + for (ns = s + 1; *ns == '/'; ns++) + ; + memmove(s + 1, ns, strlen(ns) + 1); + } } - return(!strcmp(lname, rname)); + return(strcmp(lname, rname) == 0); } void @@ -189,10 +193,10 @@ } if (rel) - strlcpy(buf, "../", sizeof buf); + strlcpy(buf, "../", sizeof(buf)); else buf[0] = '\0'; - strlcat(buf, fn, sizeof buf); + strlcat(buf, fn, sizeof(buf)); if (!(df = opendir(buf))) { warn("%s: Cannot opendir", buf); @@ -210,7 +214,7 @@ if (!strcmp (dp->d_name, cur->name)) goto next; /* can't continue */ } - strcpy(p, dp->d_name); + strlcpy(p, dp->d_name, buf + sizeof(buf) - p); if (n_dirs > 0) { if (stat(buf, &sb) < 0) {