Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

thd_getpathprogs.c File Reference

#include "mrilib.h"
#include "thd.h"

Go to the source code of this file.


Functions

char * THD_find_executable (char *ename)
THD_string_arrayTHD_getpathprogs (THD_string_array *dlist)
THD_string_arrayTHD_get_all_executables (char *dname)

Variables

int einit = 0
THD_string_arrayelist = NULL

Function Documentation

char* THD_find_executable char *    ename
 

Find an executable in the PATH by its name, if it exists. If not, NULL is returned. If it exists, a pointer to static storage is returned (i.e., don't free() this pointer!). ------------------------------------------------------------------------------

Definition at line 13 of file thd_getpathprogs.c.

References THD_string_array::ar, einit, ENTRY, THD_string_array::num, RETURN, THD_getpathprogs(), and THD_trailname().

Referenced by ISQ_setup_ppmto_filters(), JPEG_matrix_gray(), mpeg_setup(), mri_read_stuff(), mri_write_jpg(), setup_mri_write_angif(), and THD_write_minc().

00014 {
00015    char *etr , *str ;
00016    int ii ;
00017 
00018 ENTRY("THD_find_executable") ;
00019 
00020    if( !einit ){ einit = 1 ; elist = THD_getpathprogs(NULL) ; }
00021    if( elist == NULL ) RETURN(NULL) ;
00022 
00023    etr = THD_trailname( ename , 0 ) ;
00024 
00025    for( ii=0 ; ii < elist->num ; ii++ ){
00026       str = THD_trailname( elist->ar[ii] , 0 ) ;
00027       if( strcmp(str,etr) == 0 ) RETURN(elist->ar[ii]) ;
00028    }
00029 
00030    RETURN(NULL) ;
00031 }

THD_string_array* THD_get_all_executables char *    dname
 

Read all executable filenames from a directory.

Definition at line 128 of file thd_getpathprogs.c.

References ADDTO_SARR, THD_string_array::ar, DESTROY_SARR, ENTRY, far, INIT_SARR, THD_string_array::num, RETURN, SARR_NUM, STATUS, THD_extract_regular_files(), THD_get_all_filenames(), and THD_is_executable().

Referenced by THD_getpathprogs().

00129 {
00130    int ir , ll , ii ;
00131    char *fname , *tname ;
00132    float *far ;
00133    THD_string_array *outar, *alist, *rlist ;
00134 
00135 ENTRY("THD_get_all_executables") ;
00136 
00137    /*----- sanity check and initialize -----*/
00138 
00139    if( dname == NULL || strlen(dname) == 0 ) RETURN(NULL) ;
00140    INIT_SARR( outar ) ;
00141 
00142    /*----- find all regular files -----*/
00143 
00144 if(PRINT_TRACING){
00145 char str[256];sprintf(str,"call THD_get_all_filenames(%s)",dname); STATUS(str);
00146 }
00147    alist = THD_get_all_filenames( dname ) ;
00148 
00149    if( alist == NULL ) RETURN(NULL) ;
00150 STATUS("call THD_extract_regular_files") ;
00151    rlist = THD_extract_regular_files( alist ) ;
00152    DESTROY_SARR( alist ) ;
00153    if( rlist == NULL ) RETURN(NULL) ;
00154 
00155    /* 04 Feb 2002: don't include .so libraries, etc. */
00156 
00157    for( ir=0 ; ir < rlist->num ; ir++ ){
00158       fname = rlist->ar[ir] ;
00159       if( THD_is_executable(fname) &&
00160           !strstr(fname,".so")     &&
00161           !strstr(fname,".la")       ) ADDTO_SARR(outar,fname) ;
00162    }
00163 
00164    DESTROY_SARR(rlist) ;
00165 
00166    if( SARR_NUM(outar) == 0 ) DESTROY_SARR(outar) ;
00167 
00168    RETURN( outar );
00169 }

THD_string_array* THD_getpathprogs THD_string_array   dlist
 

Return a list of all executable files in the PATH and the dlist.

Definition at line 36 of file thd_getpathprogs.c.

References ADDTO_SARR, THD_string_array::ar, DESTROY_SARR, ENTRY, free, INIT_SARR, malloc, my_getenv(), THD_string_array::num, RETURN, SARR_NUM, THD_equiv_files(), THD_get_all_executables(), THD_is_directory(), and THD_MAX_NAME.

Referenced by THD_find_executable().

00037 {
00038    int id , ii , ndir ;
00039    char *epath , *eee ;
00040    THD_string_array *elist , *tlist , *qlist ;
00041 
00042 ENTRY("THD_getpathprogs") ;
00043 
00044    /*----- sanity check and initialize -----*/
00045 
00046    epath = my_getenv( "PATH" ) ;
00047    ndir  = (dlist != NULL) ? dlist->num : 0 ;
00048 
00049    if( ndir == 0 && epath == NULL ) RETURN(NULL) ;
00050 
00051    INIT_SARR(elist) ;
00052    INIT_SARR(qlist) ;  /* 04 Feb 2002: list of searched directories */
00053 
00054    /*----- for each input directory, find all executable files -----*/
00055 
00056    for( id=0 ; id < ndir ; id++ ){
00057 
00058       tlist = THD_get_all_executables( dlist->ar[id] ) ;
00059       if( tlist == NULL ) continue ;
00060 
00061       for( ii=0 ; ii < tlist->num ; ii++ )  /* copy names to output array */
00062          ADDTO_SARR( elist , tlist->ar[ii] ) ;
00063 
00064       ADDTO_SARR(qlist,dlist->ar[id]) ;     /* 04 Feb 2002 */
00065 
00066       DESTROY_SARR(tlist) ;
00067    }
00068 
00069    /*----- also do directories in environment path, if any -----*/
00070 
00071    if( epath != NULL ){
00072       int epos =0 , ll = strlen(epath) ;
00073       char *elocal ;
00074       char ename[THD_MAX_NAME] ;
00075 
00076       /* copy path list into local memory */
00077 
00078       elocal = (char *) malloc( sizeof(char) * (ll+2) ) ;
00079       strcpy( elocal , epath ) ; elocal[ll] = ' ' ; elocal[ll+1] = '\0' ;
00080 
00081       /* replace colons with blanks */
00082 
00083       for( ii=0 ; ii < ll ; ii++ )
00084          if( elocal[ii] == ':' ) elocal[ii] = ' ' ;
00085 
00086       /* extract blank delimited strings,
00087          use as directory names to get timeseries files */
00088 
00089       do{
00090          ii = sscanf( elocal+epos , "%s%n" , ename , &id ) ;
00091          if( ii < 1 ) break ;  /* no read ==> end of work */
00092          epos += id ;          /* epos = char after last one scanned */
00093 
00094          ii = strlen(ename) ;                         /* make sure name has */
00095          if( ename[ii-1] != '/' ){                    /* a trailing '/' on it */
00096             ename[ii]  = '/' ; ename[ii+1] = '\0' ;
00097          }
00098          if( !THD_is_directory(ename) ) continue ;    /* 25 Feb 2002 */
00099 
00100          /* 04 Feb 2002: check if we already searched this directory */
00101 
00102          for( ii=0 ; ii < qlist->num ; ii++ )
00103             if( THD_equiv_files(qlist->ar[ii],ename) ) break ;
00104          if( ii < qlist->num ) continue ;  /* skip this directory */
00105          ADDTO_SARR(qlist,ename) ;
00106 
00107          tlist = THD_get_all_executables( ename ) ; /* read this directory */
00108          if( tlist != NULL ){
00109             for( ii=0 ; ii < tlist->num ; ii++ )    /* move names to output */
00110                ADDTO_SARR( elist , tlist->ar[ii] ) ;
00111             DESTROY_SARR(tlist) ;
00112          }
00113 
00114       } while( epos < ll ) ;  /* scan until 'epos' is after end of epath */
00115 
00116       free(elocal) ;
00117    }
00118 
00119    if( SARR_NUM(elist) == 0 ) DESTROY_SARR(elist) ;
00120 
00121    DESTROY_SARR(qlist) ;  /* 04 Feb 2002 */
00122    RETURN(elist) ;
00123 }

Variable Documentation

int einit = 0 [static]
 

Definition at line 4 of file thd_getpathprogs.c.

Referenced by THD_find_executable().

THD_string_array* elist = NULL [static]
 

Definition at line 5 of file thd_getpathprogs.c.

 

Powered by Plone

This site conforms to the following standards: