Lines Matching refs:pp

285 	register Pathcomp_t *pp= (Pathcomp_t*)data;  in free_bltin()  local
286 if(pp->flags&PATH_STD_DIR) in free_bltin()
289 if(strcmp(pp->name,"/bin")==0 || memcmp(pp->name,np->nvname,pp->len) || np->nvname[pp->len]!='/') in free_bltin()
292 stakputs(np->nvname+pp->len+1); in free_bltin()
298 if((void*)np->nvenv==pp->bltin_lib) in free_bltin()
307 register Pathcomp_t *pp=first, *old=0, *ppnext; in path_delete() local
308 while(pp) in path_delete()
310 ppnext = pp->next; in path_delete()
311 if(--pp->refcount<=0) in path_delete()
313 if(pp->lib) in path_delete()
314 free((void*)pp->lib); in path_delete()
315 if(pp->blib) in path_delete()
316 free((void*)pp->blib); in path_delete()
317 if(pp->bltin_lib || (pp->flags&PATH_STD_DIR)) in path_delete()
319 nv_scan(sh_bltin_tree(),free_bltin,pp,0,0); in path_delete()
321 if(pp->bltin_lib) in path_delete()
322 dlclose(pp->bltin_lib); in path_delete()
325 free((void*)pp); in path_delete()
330 old = pp; in path_delete()
331 pp = ppnext; in path_delete()
339 static char *path_lib(Pathcomp_t *pp, char *path) in path_lib() argument
355 for( ;pp; pp=pp->next) in path_lib()
357 path_checkdup(pp); in path_lib()
358 if(pp->ino==statb.st_ino && pp->dev==statb.st_dev && pp->mtime==statb.st_mtime) in path_lib()
359 return(pp->lib); in path_lib()
373 void path_dump(register Pathcomp_t *pp)
376 while(pp)
379 pp,pp->dev,pp->ino,pp->len,pp->flags,pp->len,pp->name);
380 pp = pp->next;
388 static void path_checkdup(register Pathcomp_t *pp) in path_checkdup() argument
390 register char *name = pp->name; in path_checkdup()
396 pp->flags |= PATH_SKIP; in path_checkdup()
397 pp->dev = *name=='/'; in path_checkdup()
400 pp->mtime = statb.st_mtime; in path_checkdup()
401 pp->ino = statb.st_ino; in path_checkdup()
402 pp->dev = statb.st_dev; in path_checkdup()
405 first = (pp->flags&PATH_CDPATH)?pp->shp->cdpathlist:path_get(""); in path_checkdup()
406 for(oldpp=first; oldpp && oldpp!=pp; oldpp=oldpp->next) in path_checkdup()
408 if(pp->ino==oldpp->ino && pp->dev==oldpp->dev && pp->mtime==oldpp->mtime) in path_checkdup()
414 pp->flags |= flag; in path_checkdup()
415 if(((pp->flags&(PATH_PATH|PATH_SKIP))==PATH_PATH)) in path_checkdup()
419 path_chkpaths(first,0,pp,offset); in path_checkdup()
429 Pathcomp_t *path_nextcomp(register Pathcomp_t *pp, const char *name, Pathcomp_t *last) in path_nextcomp() argument
434 pp = 0; in path_nextcomp()
437 for(;pp && pp!=last;pp=ppnext) in path_nextcomp()
439 if(ppnext=pp->next) in path_nextcomp()
440 ppnext->shp = pp->shp; in path_nextcomp()
441 if(!pp->dev && !pp->ino) in path_nextcomp()
442 path_checkdup(pp); in path_nextcomp()
443 if(pp->flags&PATH_SKIP) in path_nextcomp()
445 if(!last || *pp->name!='/') in path_nextcomp()
448 if(!pp) /* this should not happen */ in path_nextcomp()
449 pp = last; in path_nextcomp()
451 if(pp && (pp->name[0]!='.' || pp->name[1])) in path_nextcomp()
453 if(*pp->name!='/') in path_nextcomp()
459 stakwrite(pp->name,pp->len); in path_nextcomp()
460 if(pp->name[pp->len-1]!='/') in path_nextcomp()
465 while(pp && pp!=last && (pp=pp->next)) in path_nextcomp()
467 if(!(pp->flags&PATH_SKIP)) in path_nextcomp()
468 return(pp); in path_nextcomp()
475 Pathcomp_t *pp = (void*)path_addpath((Pathcomp_t*)0,(std_path),PATH_PATH); in defpath_init() local
476 if(shp->defpathlist = (void*)pp) in defpath_init()
477 pp->shp = shp; in defpath_init()
478 return(pp); in defpath_init()
484 Pathcomp_t *pp; in path_init() local
489 pp = (void*)path_addpath((Pathcomp_t*)shp->pathlist,val,PATH_PATH); in path_init()
490 if(shp->pathlist = (void*)pp) in path_init()
491 pp->shp = shp; in path_init()
495 if(!(pp=(Pathcomp_t*)shp->defpathlist)) in path_init()
496 pp = defpath_init(shp); in path_init()
497 shp->pathlist = (void*)path_dup(pp); in path_init()
501 pp = (void*)path_addpath((Pathcomp_t*)shp->pathlist,val,PATH_FPATH); in path_init()
502 if(shp->pathlist = (void*)pp) in path_init()
503 pp->shp = shp; in path_init()
513 register Pathcomp_t *pp=0; in path_get() local
520 pp = (Pathcomp_t*)shp->pathlist; in path_get()
522 if(!pp && (!(PATHNOD)->nvalue.cp) || sh_isstate(SH_DEFPATH)) in path_get()
524 if(!(pp=(Pathcomp_t*)shp->defpathlist)) in path_get()
525 pp = defpath_init(shp); in path_get()
527 return(pp); in path_get()
533 static int path_opentype(const char *name, register Pathcomp_t *pp, int fun) in path_opentype() argument
539 if(pp) in path_opentype()
540 shp = pp->shp; in path_opentype()
554 pp = path_nextcomp(oldpp=pp,name,0); in path_opentype()
569 while( fd<0 && pp); in path_opentype()
588 int path_open(const char *name, register Pathcomp_t *pp) in path_open() argument
590 return(path_opentype(name,pp,0)); in path_open()
681 Pathcomp_t *pp=0; in path_search() local
710 …if((np=nv_search(name,shp->track_tree,0)) && !nv_isattr(np,NV_NOALIAS) && (pp=(Pathcomp_t*)np->nva… in path_search()
713 path_nextcomp(pp,name,pp); in path_search()
717 pp = path_absolute(name,oldpp?*oldpp:NIL(Pathcomp_t*)); in path_search()
719 *oldpp = pp; in path_search()
720 if(!pp && (np=nv_search(name,shp->fun_tree,HASH_NOSCOPE))&&np->nvalue.ip) in path_search()
722 if(!pp) in path_search()
725 if(flag==0 || !pp || (pp->flags&PATH_FPATH)) in path_search()
727 if(!pp) in path_search()
728 pp=sh_isstate(SH_DEFPATH)?shp->defpathlist:shp->pathlist; in path_search()
729 if(pp && strmatch(name,e_alphanum) && (fno=path_opentype(name,pp,1))>=0) in path_search()
742 else if(pp && !sh_isstate(SH_DEFPATH) && *name!='/' && flag<3) in path_search()
745 path_alias(np,pp); in path_search()
753 Pathcomp_t *path_absolute(register const char *name, Pathcomp_t *pp) in path_absolute() argument
761 if(!pp && !(pp=path_get(""))) in path_absolute()
767 isfun = (pp->flags&PATH_FPATH); in path_absolute()
768 if(oldpp=pp) in path_absolute()
770 pp = path_nextcomp(pp,name,0); in path_absolute()
863 if(!pp || f>=0) in path_absolute()
968 Pathcomp_t *libpath, *pp=0; in path_exec() local
981 pp=path_get(arg0); in path_exec()
986 while(pp && (pp->flags&PATH_SKIP)) in path_exec()
987 pp = pp->next; in path_exec()
988 if(pp || slash) do in path_exec()
991 if(libpath=pp) in path_exec()
993 pp = path_nextcomp(pp,arg0,0); in path_exec()
999 while(pp && (pp->flags&PATH_FPATH)) in path_exec()
1000 pp = path_nextcomp(pp,arg0,0); in path_exec()
1002 while(pp); in path_exec()
1416 register Pathcomp_t *pp, *oldpp; in path_addcomp() local
1430 for(pp=first; pp; pp=pp->next) in path_addcomp()
1432 if(memcmp(name,pp->name,len)==0 && (pp->name[len]==':' || pp->name[len]==0)) in path_addcomp()
1434 pp->flags |= flag; in path_addcomp()
1438 for(pp=first, oldpp=0; pp; oldpp=pp, pp=pp->next); in path_addcomp()
1439 pp = newof((Pathcomp_t*)0,Pathcomp_t,1,len+1); in path_addcomp()
1440 pp->refcount = 1; in path_addcomp()
1441 memcpy((char*)(pp+1),name,len+1); in path_addcomp()
1442 pp->name = (char*)(pp+1); in path_addcomp()
1443 pp->len = len; in path_addcomp()
1445 oldpp->next = pp; in path_addcomp()
1447 first = pp; in path_addcomp()
1448 pp->flags = flag; in path_addcomp()
1451 pp->dev = 1; in path_addcomp()
1452 pp->flags |= PATH_BUILTIN_LIB; in path_addcomp()
1453 pp->blib = malloc(4); in path_addcomp()
1454 strcpy(pp->blib,LIBCMD); in path_addcomp()
1458 path_chkpaths(first,old,pp,offset); in path_addcomp()
1466 static int path_chkpaths(Pathcomp_t *first, Pathcomp_t* old,Pathcomp_t *pp, int offset) in path_chkpaths() argument
1471 stakseek(offset+pp->len); in path_chkpaths()
1472 if(pp->len==1 && *stakptr(offset)=='/') in path_chkpaths()
1479 stakseek(offset+pp->len+n+2); in path_chkpaths()
1480 sp = stakptr(offset+pp->len); in path_chkpaths()
1505 char *ptr = stakptr(offset+pp->len+1); in path_chkpaths()
1513 if(!(pp->flags & PATH_BUILTIN_LIB) || strchr(ep,'-')) in path_chkpaths()
1515 if ((pp->flags & (PATH_BUILTIN_LIB|PATH_STD_DIR)) == PATH_BUILTIN_LIB) in path_chkpaths()
1517 free(pp->blib); in path_chkpaths()
1518 pp->blib = 0; in path_chkpaths()
1520 pp->flags |= PATH_BUILTIN_LIB; in path_chkpaths()
1522 pp->flags |= PATH_STD_DIR; in path_chkpaths()
1527 k += pp->len+1; in path_chkpaths()
1528 pp->blib = sp = malloc(k); in path_chkpaths()
1531 strcpy(pp->blib,pp->name); in path_chkpaths()
1532 sp += pp->len; in path_chkpaths()
1541 pp->lib = (char*)malloc(cp-sp+pp->len+2); in path_chkpaths()
1542 memcpy((void*)pp->lib,(void*)sp,m); in path_chkpaths()
1543 memcpy((void*)&pp->lib[m],stakptr(offset),pp->len); in path_chkpaths()
1544 pp->lib[k=m+pp->len] = '/'; in path_chkpaths()
1545 strcpy((void*)&pp->lib[k+1],ep); in path_chkpaths()
1546 pathcanon(&pp->lib[m],0); in path_chkpaths()
1550 stakputs(pp->lib); in path_chkpaths()
1551 free((void*)pp->lib); in path_chkpaths()
1604 Pathcomp_t *pp = (Pathcomp_t*)old->shp->defpathlist; in path_addpath() local
1605 if(!pp) in path_addpath()
1606 pp = defpath_init(old->shp); in path_addpath()
1607 first = path_dup(pp); in path_addpath()
1625 register Pathcomp_t *pp=first; in path_dup() local
1626 while(pp) in path_dup()
1628 pp->refcount++; in path_dup()
1629 pp = pp->next; in path_dup()
1639 register Pathcomp_t *pp=first, *next, *pq; in path_newdir() local
1641 for(pp=first; pp; pp=pp->next) in path_newdir()
1643 pp->flags &= ~PATH_SKIP; in path_newdir()
1644 if(*pp->name=='/') in path_newdir()
1647 if((next=pp->next) && (next->flags&PATH_BFPATH)) in path_newdir()
1649 pp->next = next->next; in path_newdir()
1653 if(stat(pp->name,&statb)<0 || !S_ISDIR(statb.st_mode)) in path_newdir()
1655 pp->dev = 0; in path_newdir()
1656 pp->ino = 0; in path_newdir()
1659 pp->dev = statb.st_dev; in path_newdir()
1660 pp->ino = statb.st_ino; in path_newdir()
1661 pp->mtime = statb.st_mtime; in path_newdir()
1662 for(pq=first;pq!=pp;pq=pq->next) in path_newdir()
1664 if(pp->ino==pq->ino && pp->dev==pq->dev) in path_newdir()
1665 pp->flags |= PATH_SKIP; in path_newdir()
1667 for(pq=pp;pq=pq->next;) in path_newdir()
1669 if(pp->ino==pq->ino && pp->dev==pq->dev) in path_newdir()
1672 if((pp->flags&(PATH_PATH|PATH_SKIP))==PATH_PATH) in path_newdir()
1676 stakputs(pp->name); in path_newdir()
1678 next = pp->next; in path_newdir()
1679 pp->next = 0; in path_newdir()
1680 path_chkpaths(first,(Pathcomp_t*)0,pp,offset); in path_newdir()
1681 if(pp->next) in path_newdir()
1682 pp = pp->next; in path_newdir()
1683 pp->next = next; in path_newdir()
1693 register Pathcomp_t *pp=first, *old=0; in path_unsetfpath() local
1706 while(pp) in path_unsetfpath()
1708 if((pp->flags&PATH_FPATH) && !(pp->flags&PATH_BFPATH)) in path_unsetfpath()
1710 if(pp->flags&PATH_PATH) in path_unsetfpath()
1711 pp->flags &= ~PATH_FPATH; in path_unsetfpath()
1714 Pathcomp_t *ppsave=pp; in path_unsetfpath()
1716 old->next = pp->next; in path_unsetfpath()
1718 first = pp->next; in path_unsetfpath()
1719 pp = pp->next; in path_unsetfpath()
1730 old = pp; in path_unsetfpath()
1731 pp = pp->next; in path_unsetfpath()
1738 register Pathcomp_t *pp=first; in path_dirfind() local
1739 while(pp) in path_dirfind()
1741 if(memcmp(name,pp->name,pp->len)==0 && name[pp->len]==c) in path_dirfind()
1742 return(pp); in path_dirfind()
1743 pp = pp->next; in path_dirfind()
1753 Pathcomp_t *pp = (Pathcomp_t*)np->nvalue.cp; in talias_get() local
1755 if(!pp) in talias_get()
1757 path_nextcomp(pp,nv_name(np),pp); in talias_get()
1766 Pathcomp_t *pp = (Pathcomp_t*)np->nvalue.cp; in talias_put() local
1767 if(--pp->refcount<=0) in talias_put()
1768 free((void*)pp); in talias_put()
1779 void path_alias(register Namval_t *np,register Pathcomp_t *pp) in path_alias() argument
1781 if(pp) in path_alias()
1787 np->nvalue.cp = (char*)pp; in path_alias()
1788 pp->refcount++; in path_alias()
1790 path_nextcomp(pp,nv_name(np),pp); in path_alias()