Unix and VMS agree on "*" as a "match any number of any chars"
Jarkko Hietaniemi [Wed, 10 Oct 2001 11:28:44 +0000 (11:28 +0000)]
wildcards, but differ ("?"  vs.  "%") for their "match any single
char" wildcard.  This patch changes "?"  chars to "%" before doing a
VMS glob...at no loss of functionality, since "?"  isn't a valid
filename char on VMS.  From Charles Lane.

p4raw-id: //depot/perl@12388

doio.c

diff --git a/doio.c b/doio.c
index 0309e2a..ebcd071 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -2195,6 +2195,8 @@ Perl_start_glob (pTHX_ SV *tmpglob, IO *io)
                ok = ((wilddsc.dsc$a_pointer = tovmspath(SvPVX(tmpglob),vmsspec)) != NULL);
            else ok = ((wilddsc.dsc$a_pointer = tovmsspec(SvPVX(tmpglob),vmsspec)) != NULL);
            if (ok) wilddsc.dsc$w_length = (unsigned short int) strlen(wilddsc.dsc$a_pointer);
+           for (cp=wilddsc.dsc$a_pointer; ok && cp && *cp; cp++)
+               if (*cp == '?') *cp = '%';  /* VMS style single-char wildcard */
            while (ok && ((sts = lib$find_file(&wilddsc,&rsdsc,&cxt,
                                               &dfltdsc,NULL,NULL,NULL))&1)) {
                end = rstr + (unsigned long int) *rslt;