Source-Changes-HG archive

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

[src/trunk]: src/bin/csh Fix



details:   https://anonhg.NetBSD.org/src/rev/35aa1e9c743e
branches:  trunk
changeset: 1014736:35aa1e9c743e
user:      christos <christos%NetBSD.org@localhost>
date:      Wed Sep 30 17:51:10 2020 +0000

description:
Fix
% set x='a/b c/d.e'
% echo $x:q:h

diffstat:

 bin/csh/lex.c |  38 ++++++++++++++++++--------------------
 1 files changed, 18 insertions(+), 20 deletions(-)

diffs (63 lines):

diff -r 442a403eaac3 -r 35aa1e9c743e bin/csh/lex.c
--- a/bin/csh/lex.c     Wed Sep 30 17:14:11 2020 +0000
+++ b/bin/csh/lex.c     Wed Sep 30 17:51:10 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.36 2020/08/09 00:34:21 dholland Exp $ */
+/* $NetBSD: lex.c,v 1.37 2020/09/30 17:51:10 christos Exp $ */
 
 /*-
  * Copyright (c) 1980, 1991, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)lex.c      8.1 (Berkeley) 5/31/93";
 #else
-__RCSID("$NetBSD: lex.c,v 1.36 2020/08/09 00:34:21 dholland Exp $");
+__RCSID("$NetBSD: lex.c,v 1.37 2020/09/30 17:51:10 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -998,28 +998,26 @@
        return (wp);
     case 'h':
     case 't':
-       if (!any(short2str(cp), '/'))
-           return (type == 't' ? Strsave(cp) : 0);
-       wp = Strend(cp);
-       while (*--wp != '/')
-           continue;
-       if (type == 'h')
+       wp = Strrchr(cp, '/');
+       if (wp == NULL)
+           return Strsave(type == 't' ? cp : STRNULL);
+       if (type == 't')
+           xp = Strsave(wp + 1);
+       else
            xp = Strsave(cp), xp[wp - cp] = 0;
-       else
-           xp = Strsave(wp + 1);
        return (xp);
+
     case 'e':
     case 'r':
-       wp = Strend(cp);
-       for (wp--; wp >= cp && *wp != '/'; wp--)
-           if (*wp == '.') {
-               if (type == 'e')
-                   xp = Strsave(wp + 1);
-               else
-                   xp = Strsave(cp), xp[wp - cp] = 0;
-               return (xp);
-           }
-       return (Strsave(type == 'e' ? STRNULL : cp));
+       wp = Strrchr(cp, '.');
+       if (wp == NULL)
+           return Strsave(type == 'r' ? cp : STRNULL);
+       if (type == 'e')
+           xp = Strsave(wp + 1);
+       else
+           xp = Strsave(cp), xp[wp - cp] = 0;
+       return (xp);
+
     default:
        break;
     }



Home | Main Index | Thread Index | Old Index