diff --git a/cmFileSys.c b/cmFileSys.c index 800812c..0fb29ca 100644 --- a/cmFileSys.c +++ b/cmFileSys.c @@ -896,39 +896,40 @@ cmFsRC_t _cmFileSysDirGetEntries( cmFileSysDeRecd_t* drp, const cmChar_t* dirSt goto errLabel; } - - // is the entry a file - if( _cmFileSysIsFile(drp->p,fn) ) + // is a link + if( _cmFileSysIsLink(drp->p,fn) ) { - if( cmIsFlag(drp->filterFlags,kFileFsFl)==false ) + if( cmIsFlag(drp->filterFlags,kLinkFsFl) == false ) continue; - flags |= kFileFsFl; + flags |= kLinkFsFl; + + if( cmIsFlag(drp->filterFlags,kRecurseLinksFsFl) ) + if((rc = _cmFileSysDirGetEntries(drp,fn)) != kOkFsRC ) + goto errLabel; } else { - // is the entry a dir - if( _cmFileSysIsDir(drp->p,fn) ) + + // is the entry a file + if( _cmFileSysIsFile(drp->p,fn) ) { - if( cmIsFlag(drp->filterFlags,kDirFsFl) == false) + if( cmIsFlag(drp->filterFlags,kFileFsFl)==false ) continue; - flags |= kDirFsFl; - - if( cmIsFlag(drp->filterFlags,kRecurseFsFl) ) - if((rc = _cmFileSysDirGetEntries(drp,fn)) != kOkFsRC ) - goto errLabel; + flags |= kFileFsFl; } else { - if( _cmFileSysIsLink(drp->p,fn) ) + // is the entry a dir + if( _cmFileSysIsDir(drp->p,fn) ) { - if( cmIsFlag(drp->filterFlags,kLinkFsFl) == false ) + if( cmIsFlag(drp->filterFlags,kDirFsFl) == false) continue; - flags |= kLinkFsFl; + flags |= kDirFsFl; - if( cmIsFlag(drp->filterFlags,kRecurseLinksFsFl) ) + if( cmIsFlag(drp->filterFlags,kRecurseFsFl) ) if((rc = _cmFileSysDirGetEntries(drp,fn)) != kOkFsRC ) goto errLabel; } diff --git a/cmPgmOpts.c b/cmPgmOpts.c index f717496..6e3ab56 100644 --- a/cmPgmOpts.c +++ b/cmPgmOpts.c @@ -479,11 +479,23 @@ _cmPoArg_t* _cmPgmOptInsertArg( _cmPo_t* p, _cmPoOpt_t* r ) a->opt = r; a->valStr = NULL; - a->link = p->args; // link into master arg list - p->args = a; + // link onto the end of the master arg list + _cmPoArg_t* ap = p->args; + while( ap!=NULL && ap->link != NULL ) + ap=ap->link; + if( ap == NULL ) + p->args = a; + else + ap->link = a; - a->inst = r->inst; // link into opt recd list - r->inst = a; + // link onto the end of the opt recd list + ap = r->inst; + while( ap!=NULL && ap->inst!=NULL) + ap=ap->inst; + if( ap==NULL) + r->inst = a; + else + ap->inst = a; // if no parm. type flag was given then the arg is implicitely a bool and the value is true. //if( (r->flags & kTypeMaskPoFl) == 0 )