Doxygen Source Code Documentation
mcw_glob.c File Reference
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <dirent.h>
#include <ctype.h>
#include "mcw_glob.h"
Go to the source code of this file.
Defines | |
#define | xfree free |
#define | xmalloc malloc |
#define | xrealloc realloc |
#define | S_ISDIR(a) (((a) & S_IFMT) == S_IFDIR) |
#define | lstat stat |
#define | __P(a) a |
#define | DOLLAR '$' |
#define | DOT '.' |
#define | EOS '\0' |
#define | LBRACKET '[' |
#define | NOT '!' |
#define | ALTNOT '^' |
#define | QUESTION '?' |
#define | QUOTE '\\' |
#define | RANGE '-' |
#define | RBRACKET ']' |
#define | SEP '/' |
#define | STAR '*' |
#define | TILDE '~' |
#define | UNDERSCORE '_' |
#define | M_META 0x8000 |
#define | M_PROTECT 0x4000 |
#define | M_MASK 0xffff |
#define | M_ASCII 0x00ff |
#define | CHAR(c) ((c)&M_ASCII) |
#define | META(c) ((c)|M_META) |
#define | M_ALL META('*') |
#define | M_END META(']') |
#define | M_NOT META('!') |
#define | M_ALTNOT META('^') |
#define | M_ONE META('?') |
#define | M_RNG META('-') |
#define | M_SET META('[') |
#define | ismeta(c) (((c)&M_META) != 0) |
#define | Lstat Stat |
Typedefs | |
typedef void * | ptr_t |
typedef unsigned short | Char |
Functions | |
int glob1 | __P ((Char *, glob_t *, int)) |
int glob2 | __P ((Char *, Char *, Char *, glob_t *, int)) |
int glob3 | __P ((Char *, Char *, Char *, Char *, glob_t *, int)) |
int globextend | __P ((Char *, glob_t *)) |
int match | __P ((Char *, Char *, Char *, int)) |
int compare | __P ((const ptr_t, const ptr_t)) |
DIR *Opendir | __P ((Char *)) |
Char *Strchr | __P ((Char *, int)) |
DIR * | Opendir (Char *str) |
int | Stat (Char *fn, struct stat *sb) |
Char * | Strchr (Char *str, int ch) |
int | compare (const ptr_t p, const ptr_t q) |
int | glob (const char *pattern, int flags, int(*errfunc)(char *, int), glob_t *pglob) |
int | glob1 (Char *pattern, glob_t *pglob, int no_match) |
int | glob2 (Char *pathbuf, Char *pathend, Char *pattern, glob_t *pglob, int no_match) |
int | glob3 (Char *pathbuf, Char *pathend, Char *pattern, Char *restpattern, glob_t *pglob, int no_match) |
int | globextend (Char *path, glob_t *pglob) |
int | match (Char *name, Char *pat, Char *patend, int m_not) |
void | globfree (glob_t *pglob) |
void | MCW_warn_expand (int www) |
void | MCW_file_expand (int nin, char **fin, int *nout, char ***fout) |
void | MCW_wildcards (char *fnam, int *nout, char ***fout) |
void | MCW_free_expand (int gnum, char **gout) |
Variables | |
int | warn = 0 |
Define Documentation
|
Definition at line 112 of file mcw_glob.c. |
|
Definition at line 137 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 152 of file mcw_glob.c. |
|
Definition at line 132 of file mcw_glob.c. |
|
Definition at line 133 of file mcw_glob.c. Referenced by glob3(). |
|
Definition at line 134 of file mcw_glob.c. Referenced by glob(), glob1(), glob2(), glob3(), and match(). |
|
Definition at line 161 of file mcw_glob.c. |
|
Definition at line 135 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 219 of file mcw_glob.c. Referenced by glob2(). |
|
Definition at line 106 of file mcw_glob.c. |
|
Definition at line 154 of file mcw_glob.c. |
|
Definition at line 157 of file mcw_glob.c. |
|
Definition at line 150 of file mcw_glob.c. |
|
Definition at line 155 of file mcw_glob.c. |
|
Definition at line 149 of file mcw_glob.c. Referenced by match(). |
|
Definition at line 147 of file mcw_glob.c. |
|
Definition at line 156 of file mcw_glob.c. |
|
Definition at line 158 of file mcw_glob.c. |
|
Definition at line 148 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 159 of file mcw_glob.c. |
|
Definition at line 160 of file mcw_glob.c. |
|
Definition at line 153 of file mcw_glob.c. |
|
Definition at line 136 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 138 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 139 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 140 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 141 of file mcw_glob.c. Referenced by glob(). |
|
don't use sh.h any more * Definition at line 98 of file mcw_glob.c. |
|
Definition at line 142 of file mcw_glob.c. Referenced by glob2(). |
|
Definition at line 143 of file mcw_glob.c. Referenced by glob(). |
|
Definition at line 144 of file mcw_glob.c. |
|
Definition at line 145 of file mcw_glob.c. |
|
the following were in "sh.h", but I put them here to get rid of the need for that file -- RWCox * Definition at line 66 of file mcw_glob.c. |
|
Definition at line 67 of file mcw_glob.c. |
|
Definition at line 68 of file mcw_glob.c. |
Typedef Documentation
|
Definition at line 109 of file mcw_glob.c. Referenced by glob(), glob1(), glob2(), glob3(), globextend(), match(), Opendir(), Stat(), and Strchr(). |
|
Definition at line 79 of file mcw_glob.c. Referenced by compare(), globextend(), and globfree(). |
Function Documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 273 of file mcw_glob.c. Referenced by glob().
00274 { 00275 #if defined(NLS) && !defined(NOSTRCOLL) 00276 00277 #if 0 00278 errno = 0; /* strcoll sets errno, another brain-damage */ 00279 #endif 00280 00281 return (strcoll(*(char **) p, *(char **) q)); 00282 #else 00283 return (strcmp(*(char **) p, *(char **) q)); 00284 #endif /* NLS && !NOSTRCOLL */ 00285 } |
|
Definition at line 295 of file mcw_glob.c.
00296 { 00297 int err, oldpathc; 00298 Char *bufnext, *bufend, *compilebuf, m_not; 00299 const unsigned char *compilepat, *patnext; 00300 int c, nnot; 00301 Char patbuf[MAXPATHLEN + 1], *qpatnext; 00302 int no_match; 00303 00304 patnext = (unsigned char *) pattern; 00305 if (!(flags & GLOB_APPEND)) { 00306 pglob->gl_pathc = 0; 00307 pglob->gl_pathv = NULL; 00308 if (!(flags & GLOB_DOOFFS)) 00309 pglob->gl_offs = 0; 00310 } 00311 pglob->gl_flags = flags & ~GLOB_MAGCHAR; 00312 pglob->gl_errfunc = errfunc; 00313 oldpathc = pglob->gl_pathc; 00314 pglob->gl_matchc = 0; 00315 00316 if (pglob->gl_flags & GLOB_ALTNOT) { 00317 nnot = ALTNOT; 00318 m_not = M_ALTNOT; 00319 } 00320 else { 00321 nnot = NOT; 00322 m_not = M_NOT; 00323 } 00324 00325 bufnext = patbuf; 00326 bufend = bufnext + MAXPATHLEN; 00327 compilebuf = bufnext; 00328 compilepat = patnext; 00329 00330 no_match = *patnext == nnot; 00331 if (no_match) 00332 patnext++; 00333 00334 if (flags & GLOB_QUOTE) { 00335 /* Protect the quoted characters */ 00336 while (bufnext < bufend && (c = *patnext++) != EOS) 00337 if (c == QUOTE) { 00338 if ((c = *patnext++) == EOS) { 00339 c = QUOTE; 00340 --patnext; 00341 } 00342 *bufnext++ = (Char) (c | M_PROTECT); 00343 } 00344 else 00345 *bufnext++ = (Char) c; 00346 } 00347 else 00348 while (bufnext < bufend && (c = *patnext++) != EOS) 00349 *bufnext++ = (Char) c; 00350 *bufnext = EOS; 00351 00352 bufnext = patbuf; 00353 qpatnext = patbuf; 00354 /* we don't need to check for buffer overflow any more */ 00355 while ((c = *qpatnext++) != EOS) { 00356 switch (c) { 00357 case LBRACKET: 00358 c = *qpatnext; 00359 if (c == nnot) 00360 ++qpatnext; 00361 if (*qpatnext == EOS || 00362 Strchr(qpatnext + 1, RBRACKET) == NULL) { 00363 *bufnext++ = LBRACKET; 00364 if (c == nnot) 00365 --qpatnext; 00366 break; 00367 } 00368 pglob->gl_flags |= GLOB_MAGCHAR; 00369 *bufnext++ = M_SET; 00370 if (c == nnot) 00371 *bufnext++ = m_not; 00372 c = *qpatnext++; 00373 do { 00374 *bufnext++ = CHAR(c); 00375 if (*qpatnext == RANGE && 00376 (c = qpatnext[1]) != RBRACKET) { 00377 *bufnext++ = M_RNG; 00378 *bufnext++ = CHAR(c); 00379 qpatnext += 2; 00380 } 00381 } while ((c = *qpatnext++) != RBRACKET); 00382 *bufnext++ = M_END; 00383 break; 00384 case QUESTION: 00385 pglob->gl_flags |= GLOB_MAGCHAR; 00386 *bufnext++ = M_ONE; 00387 break; 00388 case STAR: 00389 pglob->gl_flags |= GLOB_MAGCHAR; 00390 /* collapse adjacent stars to one, to avoid 00391 * exponential behavior 00392 */ 00393 if (bufnext == patbuf || bufnext[-1] != M_ALL) 00394 *bufnext++ = M_ALL; 00395 break; 00396 default: 00397 *bufnext++ = CHAR(c); 00398 break; 00399 } 00400 } 00401 *bufnext = EOS; 00402 #ifdef DEBUG 00403 qprintf(patbuf); 00404 #endif 00405 00406 if ((err = glob1(patbuf, pglob, no_match)) != 0) 00407 return (err); 00408 00409 /* 00410 * If there was no match we are going to append the pattern 00411 * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified 00412 * and the pattern did not contain any magic characters 00413 * GLOB_NOMAGIC is there just for compatibility with csh. 00414 */ 00415 if (pglob->gl_pathc == oldpathc && 00416 ((flags & GLOB_NOCHECK) || 00417 ((flags & GLOB_NOMAGIC) && !(pglob->gl_flags & GLOB_MAGCHAR)))) { 00418 if (!(flags & GLOB_QUOTE)) { 00419 Char *dp = compilebuf; 00420 const unsigned char *sp = compilepat; 00421 00422 while ((*dp++ = *sp++) != '\0') 00423 continue; 00424 } 00425 else { 00426 /* 00427 * copy pattern, interpreting quotes; this is slightly different 00428 * than the interpretation of quotes above -- which should prevail? 00429 */ 00430 while (*compilepat != EOS) { 00431 if (*compilepat == QUOTE) { 00432 if (*++compilepat == EOS) 00433 --compilepat; 00434 } 00435 *compilebuf++ = (unsigned char) *compilepat++; 00436 } 00437 *compilebuf = EOS; 00438 } 00439 return (globextend(patbuf, pglob)); 00440 } 00441 else if (!(flags & GLOB_NOSORT)) 00442 qsort((char *) (pglob->gl_pathv + pglob->gl_offs + oldpathc), 00443 pglob->gl_pathc - oldpathc, sizeof(char *), 00444 (int (*) __P((const void *, const void *))) compare); 00445 return (0); 00446 } |
|
Definition at line 449 of file mcw_glob.c. References Char, EOS, glob2(), MAXPATHLEN, no_match, and pglob.
00450 { 00451 Char pathbuf[MAXPATHLEN + 1]; 00452 00453 /* 00454 * a null pathname is invalid -- POSIX 1003.1 sect. 2.4. 00455 */ 00456 if (*pattern == EOS) 00457 return (0); 00458 return (glob2(pathbuf, pathbuf, pattern, pglob, no_match)); 00459 } |
|
Definition at line 467 of file mcw_glob.c. References Char, EOS, glob_t::gl_flags, glob_t::gl_matchc, glob3(), globextend(), ismeta, Lstat, no_match, p, pathend, pglob, q, S_ISDIR, SEP, and Stat().
00468 { 00469 struct stat sbuf; 00470 int anymeta; 00471 Char *p, *q; 00472 00473 /* 00474 * loop over pattern segments until end of pattern or until segment with 00475 * meta character found. 00476 */ 00477 anymeta = 0; 00478 for (;;) { 00479 if (*pattern == EOS) { /* end of pattern? */ 00480 *pathend = EOS; 00481 00482 if (Lstat(pathbuf, &sbuf)) 00483 return (0); 00484 00485 if (((pglob->gl_flags & GLOB_MARK) && 00486 pathend[-1] != SEP) && 00487 (S_ISDIR(sbuf.st_mode) 00488 #ifdef S_IFLNK 00489 || (S_ISLNK(sbuf.st_mode) && 00490 (Stat(pathbuf, &sbuf) == 0) && 00491 S_ISDIR(sbuf.st_mode)) 00492 #endif 00493 )) { 00494 *pathend++ = SEP; 00495 *pathend = EOS; 00496 } 00497 ++pglob->gl_matchc; 00498 return (globextend(pathbuf, pglob)); 00499 } 00500 00501 /* find end of next segment, copy tentatively to pathend */ 00502 q = pathend; 00503 p = pattern; 00504 while (*p != EOS && *p != SEP) { 00505 if (ismeta(*p)) 00506 anymeta = 1; 00507 *q++ = *p++; 00508 } 00509 00510 if (!anymeta) { /* no expansion, do next segment */ 00511 pathend = q; 00512 pattern = p; 00513 while (*pattern == SEP) 00514 *pathend++ = *pattern++; 00515 } 00516 else /* need expansion, recurse */ 00517 return (glob3(pathbuf, pathend, pattern, p, pglob, no_match)); 00518 } 00519 /* NOTREACHED */ 00520 } |
|
Definition at line 524 of file mcw_glob.c. References Char, DIR, DOT, EOS, glob_t::gl_errfunc, glob_t::gl_flags, glob2(), M_ALTNOT, M_NOT, m_not, match(), MAXPATHLEN, no_match, Opendir(), pathend, pglob, and restpattern.
00525 { 00526 #if 0 00527 extern int errno; 00528 #endif 00529 DIR *dirp; 00530 struct dirent *dp; 00531 int err; 00532 Char m_not = (pglob->gl_flags & GLOB_ALTNOT) ? M_ALTNOT : M_NOT; 00533 char cpathbuf[MAXPATHLEN], *ptr; 00534 #ifdef SOLARIS_DIRENT_PATCH 00535 /* declaration of vars used in the solaris-patch */ 00536 char dname[255]; 00537 int ii; 00538 #endif 00539 00540 *pathend = EOS; 00541 00542 #if 0 00543 errno = 0; 00544 #endif 00545 00546 if (!(dirp = Opendir(pathbuf))) { 00547 /* todo: don't call for ENOENT or ENOTDIR? */ 00548 for (ptr = cpathbuf; (*ptr++ = (char) *pathbuf++) != EOS;) 00549 continue; 00550 #if 0 00551 if ((pglob->gl_errfunc && (*pglob->gl_errfunc) (cpathbuf, errno)) || 00552 (pglob->gl_flags & GLOB_ERR)) 00553 #else 00554 if ( (pglob->gl_flags & GLOB_ERR)) 00555 #endif 00556 return (GLOB_ABEND); 00557 else 00558 return (0); 00559 } 00560 00561 err = 0; 00562 00563 /* search directory for matching names */ 00564 while ((dp = readdir(dirp)) != NULL) { 00565 register unsigned char *sc; 00566 register Char *dc; 00567 00568 #ifdef SOLARIS_DIRENT_PATCH 00569 /********** 00570 begin patch 00571 **********/ 00572 00573 #ifndef SOLARIS_DIRENT_ZERO 00574 for (ii = -2 ; dp->d_name[ii] != '\0' ; ++ii) { 00575 dname[ii+2] = dp->d_name[ii]; 00576 } 00577 dname[ii+2] = '\0'; 00578 #else 00579 strcpy(dname, dp->d_name); /* John Koger, March 1999 */ 00580 #endif 00581 /********** 00582 end patch 00583 now use dname for dp->d_name 00584 **********/ 00585 00586 /* initial DOT must be matched literally */ 00587 if (dname[0] == DOT && *pattern != DOT) 00588 continue; 00589 for (sc = (unsigned char *) dname, dc = pathend; 00590 #else 00591 if (dp->d_name[0] == DOT && *pattern != DOT) 00592 continue; 00593 for (sc = (unsigned char *) dp->d_name, dc = pathend; 00594 #endif 00595 (*dc++ = *sc++) != '\0';) 00596 continue; 00597 if (match(pathend, pattern, restpattern, (int) m_not) == no_match) { 00598 *pathend = EOS; 00599 continue; 00600 } 00601 err = glob2(pathbuf, --dc, restpattern, pglob, no_match); 00602 if (err) 00603 break; 00604 } 00605 /* todo: check error from readdir? */ 00606 (void) closedir(dirp); 00607 return (err); 00608 } |
|
Definition at line 626 of file mcw_glob.c. References Char, glob_t::gl_offs, glob_t::gl_pathc, glob_t::gl_pathv, i, p, pglob, ptr_t, xmalloc, and xrealloc.
00627 { 00628 register char **pathv; 00629 register int i; 00630 unsigned int newsize; 00631 char *copy; 00632 Char *p; 00633 00634 newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); 00635 pathv = (char **) (pglob->gl_pathv ? 00636 xrealloc((ptr_t) pglob->gl_pathv, (size_t) newsize) : 00637 xmalloc((size_t) newsize)); 00638 if (pathv == NULL) 00639 return (GLOB_NOSPACE); 00640 00641 if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { 00642 /* first time around -- clear initial gl_offs items */ 00643 pathv += pglob->gl_offs; 00644 for (i = pglob->gl_offs; --i >= 0;) 00645 *--pathv = NULL; 00646 } 00647 pglob->gl_pathv = pathv; 00648 00649 for (p = path; *p++;) 00650 continue; 00651 if ((copy = (char *) xmalloc((size_t) (p - path))) != NULL) { 00652 register char *dc = copy; 00653 register Char *sc = path; 00654 00655 while ((*dc++ = *sc++) != '\0') 00656 continue; 00657 pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; 00658 } 00659 pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; 00660 return ((copy == NULL) ? GLOB_NOSPACE : 0); 00661 } |
|
Definition at line 719 of file mcw_glob.c.
00720 { 00721 register int i; 00722 register char **pp; 00723 00724 if (pglob->gl_pathv != NULL) { 00725 pp = pglob->gl_pathv + pglob->gl_offs; 00726 for (i = pglob->gl_pathc; i--; ++pp) 00727 if (*pp) 00728 xfree((ptr_t) *pp), *pp = NULL; 00729 xfree((ptr_t) pglob->gl_pathv), pglob->gl_pathv = NULL; 00730 } 00731 } |
|
Definition at line 669 of file mcw_glob.c. References c, Char, EOS, M_ALL, M_END, M_MASK, m_not, M_ONE, M_RNG, M_SET, match(), name, pat, and patend.
00670 { 00671 int ok, negate_range; 00672 Char c, k; 00673 00674 while (pat < patend) { 00675 c = *pat++; 00676 switch (c & M_MASK) { 00677 case M_ALL: 00678 if (pat == patend) 00679 return (1); 00680 do 00681 if (match(name, pat, patend, m_not)) 00682 return (1); 00683 while (*name++ != EOS); 00684 return (0); 00685 case M_ONE: 00686 if (*name++ == EOS) 00687 return (0); 00688 break; 00689 case M_SET: 00690 ok = 0; 00691 if ((k = *name++) == EOS) 00692 return (0); 00693 if ((negate_range = ((*pat & M_MASK) == m_not)) != 0) 00694 ++pat; 00695 while (((c = *pat++) & M_MASK) != M_END) { 00696 if ((*pat & M_MASK) == M_RNG) { 00697 if (c <= k && k <= pat[1]) 00698 ok = 1; 00699 pat += 2; 00700 } 00701 else if (c == k) 00702 ok = 1; 00703 } 00704 if (ok == negate_range) 00705 return (0); 00706 break; 00707 default: 00708 k = *name++; 00709 if (k != c) 00710 return (0); 00711 break; 00712 } 00713 } 00714 return (*name == EOS); 00715 } |
|
Routines that allows filename wildcarding to be handled inside to3d. The advantage: limitations of shell command line lengths.
Definition at line 751 of file mcw_glob.c.
00752 { 00753 glob_t gl ; 00754 int ii , gnum, gold , ilen ; 00755 char ** gout ; 00756 char * fn ; 00757 char prefix[4] , fpre[128] , fname[256] ; 00758 int b1,b2,b3,b4,b5 , ib,ig , lpre ; 00759 00760 if( nin <= 0 ){ *nout = 0 ; return ; } 00761 00762 gnum = 0 ; 00763 gout = NULL ; 00764 00765 for( ii=0 ; ii < nin ; ii++ ){ 00766 fn = fin[ii] ; 00767 00768 ig = 0 ; 00769 00770 /** look for 3D: prefix **/ 00771 00772 if( strlen(fn) > 9 && fn[0] == '3' && fn[1] == 'D' ){ 00773 ib = 0 ; 00774 prefix[ib++] = '3' ; 00775 prefix[ib++] = 'D' ; 00776 if( fn[2] == ':' ){ prefix[ib++] = '\0' ; } 00777 else { prefix[ib++] = fn[2] ; prefix[ib++] = '\0' ; } 00778 00779 ig = sscanf( fn+ib , "%d:%d:%d:%d:%d:%s" , /* must scan all */ 00780 &b1,&b2,&b3,&b4,&b5 , fname ) ; /* six items OK */ 00781 00782 /** if have all 6 3D: items, then make a 3D: prefix for output **/ 00783 00784 if( ig == 6 ){ 00785 sprintf(fpre , "%s:%d:%d:%d:%d:%d:" , prefix,b1,b2,b3,b4,b5) ; 00786 lpre = strlen(fpre) ; 00787 } else { 00788 ig = 0 ; 00789 } 00790 } 00791 00792 if( strlen(fn) > 9 && fn[0] == '3' && fn[1] == 'A' && fn[3] == ':' ){ 00793 ib = 0 ; 00794 prefix[ib++] = '3' ; 00795 prefix[ib++] = 'A' ; 00796 prefix[ib++] = fn[2] ; 00797 prefix[ib++] = '\0' ; 00798 00799 ig = sscanf( fn+ib , "%d:%d:%d:%s" , /* must scan all */ 00800 &b1,&b2,&b3, fname ) ; /* four items OK */ 00801 00802 /** if have all 4 3A: items, then make a 3A: prefix for output **/ 00803 00804 if( ig == 4 ){ 00805 sprintf(fpre , "%s:%d:%d:%d:" , prefix,b1,b2,b3) ; 00806 lpre = strlen(fpre) ; 00807 } else { 00808 ig = 0 ; 00809 } 00810 } 00811 00812 if( ig > 0 ) (void) glob( fname , 0 , NULL , &gl ) ; /* 3D: was OK */ 00813 else (void) glob( fn , 0 , NULL , &gl ) ; /* not OK */ 00814 00815 /** put each matched string into the output array **/ 00816 00817 if( gl.gl_pathc > 0 ){ 00818 00819 /** make space for output now **/ 00820 gold = gnum ; 00821 gnum += gl.gl_pathc ; 00822 if( gout == NULL ) gout = (char **) malloc ( sizeof(char *)*gnum); 00823 else gout = (char **) realloc(gout, sizeof(char *)*gnum); 00824 00825 for( ib=0 ; ib < gl.gl_pathc ; ib++ ){ 00826 ilen = strlen( gl.gl_pathv[ib] ) + 1 ; /* length of this name */ 00827 if( ig > 0 ) ilen += lpre ; /* plus 3D: prefix? */ 00828 00829 gout[ib+gold] = (char *) malloc( sizeof(char) * ilen ) ; /* output! */ 00830 00831 if( ig > 0 ){ 00832 strcpy( gout[ib+gold] , fpre ) ; /* 3D: prefix */ 00833 strcat( gout[ib+gold] , gl.gl_pathv[ib] ) ; /* then name */ 00834 } 00835 else { 00836 strcpy( gout[ib+gold] , gl.gl_pathv[ib] ) ; /* just name */ 00837 } 00838 } 00839 00840 } else if( ig == 6 && strcmp(fname,"ALLZERO") == 0 ){ /* 06 Mar 2001 */ 00841 00842 gold = gnum ; gnum++ ; 00843 if( gout == NULL ) gout = (char **) malloc ( sizeof(char *)*gnum); 00844 else gout = (char **) realloc(gout, sizeof(char *)*gnum); 00845 00846 ilen = lpre + strlen(fname) + 1 ; 00847 gout[gold] = (char *) malloc( sizeof(char) * ilen ) ; /* output! */ 00848 strcpy( gout[gold] , fpre ) ; 00849 strcat( gout[gold] , fname ) ; 00850 00851 } else { /* 30 Apr 2001 */ 00852 00853 if( warn ) /* 13 Jul 2001 - print only if told to do so */ 00854 fprintf(stderr,"** Can't find file %s\n", (ig>0) ? fname : fn ) ; 00855 } 00856 00857 globfree( &gl ) ; 00858 } 00859 00860 *nout = gnum ; *fout = gout ; return ; 00861 } |
|
make space for output now * Definition at line 908 of file mcw_glob.c.
|
|
Definition at line 740 of file mcw_glob.c.
00740 { warn = www; return; } /* 13 Jul 2001 */ |
|
Simpler interface to MCW_file_expand().
Definition at line 877 of file mcw_glob.c.
00878 { 00879 char **fin=NULL, *fcop ; 00880 int ii , nin , lf , ls ; 00881 00882 if( fnam == NULL || *fnam == '\0' ){ *nout = 0 ; return ; } 00883 fcop = strdup(fnam) ; lf = strlen(fcop) ; 00884 ls = 1 ; 00885 for( nin=ii=0 ; ii < lf ; ii++ ){ 00886 if( isspace(fcop[ii]) ){ /* This is a blank, so next */ 00887 ls = 1 ; /* non-blank is a new word. */ 00888 fcop[ii] = '\0' ; /* Set this char to NUL. */ 00889 00890 } else { /* Not a blank. */ 00891 00892 if( ls ){ /* If last was a blank, is new name. */ 00893 fin = (char **) realloc( fin , sizeof(char *)*(nin+1) ) ; 00894 fin[nin++] = fcop+ii ; 00895 } 00896 ls = 0 ; 00897 } 00898 } 00899 00900 if( nin == 0 ){ *nout = 0 ; free(fcop) ; return ; } 00901 00902 MCW_file_expand( nin , fin , nout , fout ) ; 00903 free(fin) ; free(fcop) ; return ; 00904 } |
|
Definition at line 184 of file mcw_glob.c. References Char, and MAXPATHLEN.
00185 { 00186 char buf[MAXPATHLEN]; 00187 register char *dc = buf; 00188 00189 if (!*str) 00190 return (opendir(".")); 00191 while ((*dc++ = *str++) != '\0') 00192 continue; 00193 return (opendir(buf)); 00194 } |
|
Definition at line 223 of file mcw_glob.c. References Char, MAXPATHLEN, S_ISDIR, and sb.
00224 { 00225 char buf[MAXPATHLEN]; 00226 register char *dc = buf; 00227 00228 while ((*dc++ = *fn++) != '\0') 00229 continue; 00230 #ifdef NAMEI_BUG 00231 { 00232 int st; 00233 00234 st = stat(buf, sb); 00235 if (*buf) 00236 dc--; 00237 return (*--dc == '/' && !S_ISDIR(sb->st_mode) ? -1 : st); 00238 } 00239 #else 00240 return (stat(buf, sb)); 00241 #endif /* NAMEI_BUG */ 00242 } |
|
Definition at line 245 of file mcw_glob.c. References Char.
00246 { 00247 do 00248 if (*str == ch) 00249 return (str); 00250 while (*str++); 00251 return (NULL); 00252 } |
Variable Documentation
|
Definition at line 739 of file mcw_glob.c. Referenced by MCW_warn_expand(). |