rc-list - mailing list for the rc(1) shell
 help / color / mirror / Atom feed
From: Decklin Foster <fosterd@hartwick.edu>
To: Tim Goodwin <tjg@star.le.ac.uk>
Cc: rc@hawkwind.utcs.toronto.edu
Subject: Re: Bug#62339: rc bug
Date: Mon, 17 Apr 2000 15:59:37 -0400	[thread overview]
Message-ID: <20000417155937.A29462@photek.dhs.org> (raw)
In-Reply-To: <QDwAALDY+jgTYAcA@ltsun0.star.le.ac.uk>; from tjg@star.le.ac.uk on Mon, Apr 17, 2000 at 10:25:46AM +0100

[-- Attachment #1: Type: text/plain, Size: 1882 bytes --]

Tim Goodwin writes:

> Thanks for the report.  I can reproduce this.
> 
> It's not been reported before, so I don't know what's going on, but I'll
> let you know as soon as I have a fix.

I did send something to to mailing list on Saturday, but it hasn't
gotten through yet. I seem to have figured out the use of m in a List
structure: if there are no metacharacters, NULL, and if there are, we
put a \0 where there's a non-metacharacter in the corresponding part
of n, and a \001 where there is.

Now in lmatch() when we go through looking for '*'s, we have this
loop:

	for (i = 0; p->w[i] != '\0'; i++)
		if (p->w[i] != '*' || p->m[i] != 1) {

Which assumes that m is as big as w (i.e, not NULL). I came up with
this replacement, which works for all the test cases I can think of:

        if (s == NULL) {
                if (p == NULL) /* null matches null */
                        return TRUE; 
                for (; p != NULL; p = p->n) /* one or more stars match null */
                        if (p->w && strspn(p->w, "*") == strlen(p->w) &&
                            p->m && strspn(p->m, "\001") == strlen(p->m))
                                return TRUE;
                return FALSE;
        }

I was also able to get rid of 'okay', which i found hard to follow.
The comment about the null string is gone too, because IMO the null
string fails for the same reason 'foo' fails. There's really no need
for an explicit check.

A patch is attached. Out of curiosity, why was the decision made to
use '\000' and '\001' instead of, say, '0' and '1'? For example in the
old code, we have "p->m[i] != 1", and it wouldn't be that hard to
write "p->m[i] != '1'" instead. I'm sure there's a reason, but I can't
guess it.

-- 
Written with 100% free software. Please support the following websites:
www.debian.org www.noamazon.com www.gnu.org www.opendvd.org lpf.ai.mit.edu

[-- Attachment #2: rc.patch --]
[-- Type: text/plain, Size: 837 bytes --]

--- glob.c.old	Wed Oct 21 07:01:46 1998
+++ glob.c	Mon Apr 17 15:55:30 2000
@@ -34,23 +34,13 @@
 
 extern bool lmatch(List *s, List *p) {
 	List *q;
-	int i;
-	bool okay;
 	if (s == NULL) {
 		if (p == NULL) /* null matches null */
 			return TRUE;
-		for (; p != NULL; p = p->n) { /* one or more stars match null */
-			if (*p->w != '\0') { /* the null string is a special case; it does *not* match () */
-				okay = TRUE;
-				for (i = 0; p->w[i] != '\0'; i++)
-					if (p->w[i] != '*' || p->m[i] != 1) {
-						okay = FALSE;
-						break;
-					}
-				if (okay)
-					return TRUE;
-			}
-		}
+		for (; p != NULL; p = p->n) /* one or more stars match null */
+			if (p->w && strspn(p->w, "*") == strlen(p->w) &&
+			    p->m && strspn(p->m, "\001") == strlen(p->m))
+				return TRUE;
 		return FALSE;
 	}
 	for (; s != NULL; s = s->n)

       reply	other threads:[~2000-04-17 20:22 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Pine.LNX.3.96.1000425010821.264C-100000@dwarf>
     [not found] ` <QDwAALDY+jgTYAcA@ltsun0.star.le.ac.uk>
2000-04-17 19:59   ` Decklin Foster [this message]
2000-04-18  4:45     ` oops, let's try that one again Decklin Foster
2000-04-18  6:30 Bug#62339: rc bug Byron Rakitzis
2000-04-19 14:39 ` Tim Goodwin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20000417155937.A29462@photek.dhs.org \
    --to=fosterd@hartwick.edu \
    --cc=rc@hawkwind.utcs.toronto.edu \
    --cc=tjg@star.le.ac.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).