cdash@mumm.colorado.edu (Charles Shub) (02/20/91)
Have I found a bug in re_cmp and re_exec? If so, is there a fix?? if not, what am I doing wrong please respond by mail as I do not subscribe to this group. The problem seems to be in matching files with an input of <letter>* I get a random match in this case. charlie shub cdash@boulder.Colorado.EDU -or- ..!{ucar|nbires}!boulder!cdash or even cdash@colospgs (BITNET) -or- (719) 593-3492 Execution output ------------------------------ bug m* enter a string >u* 'u*' 'u.*' 'moutgoing' found 1 ------------------------------ ^ ^ ^ | | ------- file matched by re_exec | -------------- string fed to re_comp ------------------- input string The directory has 42 entries including the following: bulgren csu moutgoing upe Source code below (culled from huge program, recompiled, and run) it is running on a microvax with 4.3 + nfs ------------------------------ #include <pwd.h> #include <sys/types.h> #include <strings.h> #include <sys/dir.h> main() { DIR *dirp; struct direct *dp; char com[256], lstr[256]; char *re_comp(), *ap, *lp; int found = 0; printf("enter a string >"); gets(com); ap = com; lp = lstr; while (*ap) { if(*ap == '*') { *lp++ = '.'; *lp++ = *ap++; } else { *lp++ = *ap++; } } *lp = '\0'; printf("'%s' '%s' ",com, lstr); if(ap = re_comp(lstr)) { printf("'%s' error %s",lp,ap); } else { int zz; dirp = opendir("."); while ((dp = readdir(dirp)) != NULL && !found) { if((zz = re_exec(dp->d_name)) < 0) { printf("re_exec error"); break; } else if (zz) { found = 1; printf(" '%s' ",dp->d_name); } } closedir(dirp); } printf(" found %d\n",found); } ------------------------------ -- charlie shub cdash@boulder.Colorado.EDU -or- ..!{ucar|nbires}!boulder!cdash or even cdash@colospgs (BITNET) -or- (719) 593-3492