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_filestuff.c File Reference

#include "mrilib.h"
#include "thd.h"
#include <sys/vfs.h>

Go to the source code of this file.


Defines

#define FNAME(a, b)   statfs(a,b)
#define FSTYP   statfs
#define BSIZE   f_bsize
#define BFREE   f_bavail

Functions

time_t THD_file_mtime (char *pathname)
int THD_is_ondisk (char *pathname)
int THD_cwd (char *pathname)
int THD_mkdir (char *pathname)
int THD_is_file (char *pathname)
int THD_is_symlink (char *pathname)
unsigned long THD_filesize (char *pathname)
int THD_is_directory (char *pathname)
int THD_is_executable (char *pathname)
int THD_equiv_files (char *path1, char *path2)
char * THD_trailname (char *fname, int lev)
int THD_filename_ok (char *name)
int THD_filename_pure (char *name)
int THD_freemegabytes (char *pathname)

Define Documentation

#define BFREE   f_bavail
 

Definition at line 273 of file thd_filestuff.c.

#define BSIZE   f_bsize
 

Definition at line 272 of file thd_filestuff.c.

#define FNAME a,
b       statfs(a,b)
 

Definition at line 270 of file thd_filestuff.c.

#define FSTYP   statfs
 

Definition at line 271 of file thd_filestuff.c.

Referenced by THD_freemegabytes().


Function Documentation

int THD_cwd char *    pathname
 

Change working directory.

Definition at line 37 of file thd_filestuff.c.

00038 {
00039    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00040    return ( chdir(pathname) == 0 ) ;
00041 }

int THD_equiv_files char *    path1,
char *    path2
 

Determine if two filenames are really the same thing.

Definition at line 160 of file thd_filestuff.c.

Referenced by AFNI_append_sessions(), AFNI_finalize_read_sess_CB(), NLFIT_get_many_MODELs(), PLUG_get_many_plugins(), THD_get_many_timeseries(), THD_getpathprogs(), and THD_normalize_flist().

00161 {
00162    static struct stat buf1 , buf2 ; int ii ;
00163 
00164    if( path1 == NULL || path2 == NULL ) return -1 ;
00165    ii = stat( path1 , &buf1 ) ; if( ii != 0 ) return -1 ;
00166    ii = stat( path2 , &buf2 ) ; if( ii != 0 ) return -1 ;
00167 
00168    ii = (buf1.st_dev == buf2.st_dev) && (buf1.st_ino == buf2.st_ino) ;
00169    return ii ;
00170 }

time_t THD_file_mtime char *    pathname
 

Return the time at which the file was last modified.

Definition at line 13 of file thd_filestuff.c.

Referenced by main().

00014 {
00015    static struct stat buf ; int ii ;
00016 
00017    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00018    ii = stat( pathname , &buf ) ; if( ii != 0 ) return 0 ;
00019    return (time_t)buf.st_mtime ;
00020 }

int THD_filename_ok char *    name
 

Check if a filename is OK - that is, has no crummy characters.

The filename can have a '/' in it. To insist that there be not '/', use THD_filename_pure(). The list of crummy characters can be inferred from the source code.

Definition at line 220 of file thd_filestuff.c.

References name.

Referenced by AFNI_finalize_saveim_CB(), AFNI_finalize_write_palette_CB(), AFNI_finalsave_layout_CB(), AFNI_process_setup(), CL_read_opts(), init_options(), ISQ_snapfile(), main(), multivector_write(), PRIC_main(), RCREND_finalize_saveim_CB(), RCREND_save_many_CB(), RCREND_save_this_CB(), REND_finalize_saveim_CB(), REND_save_many_CB(), REND_save_this_CB(), SUMA_AFNI_Extract_Colors(), SUMA_AfniPrefix(), SUMA_BrainVoyager_Read_vmr(), SUMA_OpenDX_Read_CruiseVolHead(), T3D_initialize_user_data(), TAG_write_CB(), THD_filename_pure(), THD_mkdir(), THD_warp3D(), THD_write_minc(), THD_write_nifti(), THD_zeropad(), tross_commandline(), validate_datasets(), VOLREG_main(), and WINsorize().

00221 {
00222    int ll , ii ;
00223 
00224    if( name == NULL ) return 0 ;
00225    ll = strlen( name ) ; if( ll == 0 ) return 0 ;
00226 
00227    for( ii=0 ; ii < ll ; ii++ )
00228       if( iscntrl(name[ii]) || isspace(name[ii]) ||
00229                                name[ii] == ';'   ||
00230           name[ii] == '*'   || name[ii] == '?'   ||
00231           name[ii] == '&'   || name[ii] == '|'   ||
00232           name[ii] == '"'   || name[ii] == '>'   ||
00233           name[ii] == '<'   || name[ii] == '\''  ||
00234           name[ii] == '['   || name[ii] == ']'   ||
00235           name[ii] == '('   || name[ii] == ')'   ||
00236           name[ii] == '{'   || name[ii] == '}'   ||
00237           name[ii] == '!'   || (name[ii] & 128) != 0 ) return 0 ;
00238 
00239    return 1 ;
00240 }

int THD_filename_pure char *    name
 

Check if a filename is pure - no crummy characters, no '/'.

Definition at line 245 of file thd_filestuff.c.

References name, and THD_filename_ok().

Referenced by AFNI_process_environ(), AFNI_process_setup(), main(), PLUGIN_init(), process_NIML_Node_ROI(), RT_check_info(), RT_main(), RT_process_info(), and SUMA_AFNI_Extract_Colors().

00246 {
00247    int ii ;
00248 
00249    ii = THD_filename_ok( name ) ;
00250    if( ii ) ii = (strstr(name,"/") == NULL) ;
00251    return ii ;
00252 }

unsigned long THD_filesize char *    pathname
 

Return the file length (0 if file not found).

Definition at line 118 of file thd_filestuff.c.

Referenced by AFNI_logger(), AFNI_suck_file(), csfft_cox(), ge4_read_header(), ge_header(), main(), mri_imcount_dicom(), mri_read3D_analyze75(), mri_read_analyze75(), mri_read_dicom(), read_ge_header(), read_URL_ftp(), read_URL_http(), suck_file(), SUMA_BinarySuck(), SUMA_BrainVoyager_Read_vmr(), SUMA_file_suck(), SUMA_suck_file(), THD_get_all_timeseries(), THD_load_datablock(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), and THD_open_one_dataset().

00119 {
00120    static struct stat buf ; int ii ;
00121 
00122    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00123    ii = stat( pathname , &buf ) ; if( ii != 0 ) return 0 ;
00124    return buf.st_size ;
00125 }

int THD_freemegabytes char *    pathname
 

Get free space (in megabytes) on a disk partition. Return value is -1 if can't be determined. ----------------------------------------------------------------

Definition at line 288 of file thd_filestuff.c.

References FNAME, and FSTYP.

Referenced by AFNI_startup_timeout_CB().

00289 {
00290 #ifdef FNAME
00291    int ii ; struct FSTYP buf ;
00292    if( pathname == NULL || *pathname == '\0' ) return -1 ;
00293    ii = FNAME( pathname , &buf ) ;
00294    if( ii ) return -1 ;
00295    ii = (int)((double)(buf.BFREE) * (double)(buf.BSIZE) / (1024.0*1024.0)) ;
00296    return ii ;
00297 #else
00298    return -1 ;
00299 #endif
00300 }

int THD_is_directory char *    pathname
 

Determine if this is really a directory or not.

Definition at line 130 of file thd_filestuff.c.

Referenced by adwarp_refashion_dataset(), AFNI_finalize_read_palette_CB(), AFNI_finalize_read_sess_CB(), AFNI_read_inputs(), AFNI_refashion_dataset(), main(), mpeg_setup(), mri_imcount_mpeg(), mri_read_mpeg(), NLFIT_get_all_MODELs(), NLFIT_get_many_MODELs(), PLUG_get_all_plugins(), PLUG_get_many_plugins(), T3D_check_data(), THD_extract_directories(), THD_get_all_filenames(), THD_get_many_timeseries(), THD_getpathprogs(), THD_init_session(), THD_mkdir(), and THD_write_datablock().

00131 {
00132    static struct stat buf ; int ii ;
00133 
00134    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00135    ii = stat( pathname , &buf ) ; if( ii != 0 ) return 0 ;
00136    ii = (buf.st_mode & S_IFDIR) != 0 ; return ii ;
00137 }

int THD_is_executable char *    pathname
 

Determine if this is really an executable file or not.

Definition at line 142 of file thd_filestuff.c.

Referenced by THD_get_all_executables().

00143 {
00144    static struct stat buf ; int ii ;
00145 
00146    if( pathname == NULL || *pathname == '\0' )  return 0  ;
00147    ii = stat( pathname , &buf )      ; if( ii ) return 0  ;
00148    ii = (buf.st_mode & S_IXOTH) != 0 ; if( ii ) return ii ;
00149 
00150    /* 15 Jul 2002: also check if file is owned & executable by user */
00151 
00152    ii = ( getuid() == buf.st_uid       &&
00153           (buf.st_mode & S_IXUSR) != 0   ) ;
00154    return ii ;
00155 }

int THD_is_file char *    pathname
 

Determine if this is really a regular file or not.

Definition at line 94 of file thd_filestuff.c.

Referenced by AFNI_finalize_read_palette_CB(), AFNI_finalize_read_sess_CB(), AFNI_parse_args(), afni_vol2surf(), basis_write_iresp(), basis_write_sresp(), check_one_output_file(), check_outfile(), check_output_file(), DRAW_saveas_finalize_CB(), EDIT_main(), form_clusters(), get_options(), HISTO_main(), main(), mcw_malloc_dump(), NLFIT_read_MODEL(), output_ts_array(), PBAR_enviro_bigmaps(), PLUG_read_plugin(), RCREND_save_many_CB(), RCREND_save_this_CB(), RENAME_main(), REND_save_many_CB(), REND_save_this_CB(), SUMA_FormAfnidset(), T3D_check_data(), THD_extract_regular_files(), THD_is_dataset(), THD_open_one_dataset(), THD_rename_dataset_files(), TTRR_load_CB(), validate_options(), VOLREG_main(), write_3dtime(), write_afni_data(), write_afni_fict(), write_afni_fizt(), write_bucket(), write_bucket_data(), write_output(), write_results(), and write_ts_array().

00095 {
00096    static struct stat buf ; int ii ;
00097 
00098    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00099    ii = stat( pathname , &buf ) ; if( ii != 0 ) return 0 ;
00100    ii = (buf.st_mode & S_IFREG) != 0 ; return ii ;
00101 }

int THD_is_ondisk char *    pathname
 

Determine if this exists at all (file, directory, ...).

Definition at line 25 of file thd_filestuff.c.

Referenced by ISQ_snapfile(), main(), THD_mkdir(), and XSAVE_output().

00026 {
00027    static struct stat buf ; int ii ;
00028 
00029    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00030    ii = stat( pathname , &buf ) ;
00031    return (ii == 0) ;
00032 }

int THD_is_symlink char *    pathname
 

Determine if this is really a symbolic link or not.

Definition at line 106 of file thd_filestuff.c.

00107 {
00108    char buf[32] ; int ii ;
00109 
00110    if( pathname == NULL || *pathname == '\0' ) return 0 ;
00111    ii = readlink( pathname , buf , 32 ) ;
00112    return (ii > 0) ;
00113 }

int THD_mkdir char *    pathname
 

Create a directory. Returns 1 if OK, 0 if not.

Definition at line 46 of file thd_filestuff.c.

References free, THD_filename_ok(), THD_is_directory(), and THD_is_ondisk().

Referenced by mri_imcount_mpeg(), and mri_read_mpeg().

00047 {
00048    int lp , ii , jj ;
00049    char *pnam ;
00050 
00051    /* check if input is OK, or if it already exists */
00052 
00053    if( !THD_filename_ok(pathname) ) return 0 ;
00054    if(  THD_is_ondisk  (pathname) ) return THD_is_directory(pathname) ;
00055 
00056    pnam = strdup(pathname) ;  /* modifiable copy */
00057    lp = strlen(pnam) ; ii = 0 ;
00058 
00059    /* loop over path segments, creating them if needed */
00060 
00061    while(1){
00062 
00063      /* advance ii to point to end of next path segment,
00064         at the next '/' character, or at the end of pnam */
00065 
00066      ii += strspn(pnam+ii,"/") ; ii += strcspn(pnam+ii,"/") ;
00067 
00068      /* insert a NUL to replace the '/', temporarily */
00069 
00070      if( ii < lp ) pnam[ii] = '\0' ;
00071 
00072      /* if this segment doesn't already exist, create it */
00073 
00074      if( !THD_is_directory(pnam) ){
00075        jj = mkdir( pnam , 0755 ) ;
00076        if( jj != 0 ){ free(pnam); return 0; } /* bad */
00077      }
00078 
00079      /* if reached end of path string, we're done */
00080 
00081      if( ii == lp ){ free(pnam); return 1; }  /* good */
00082 
00083      /* reinsert '/' if it was excised */
00084 
00085      pnam[ii] = '/' ;
00086    }
00087 
00088    return 0 ; /* unreachable */
00089 }

char* THD_trailname char *    fname,
int    lev
 

Find a 'trailing name in a pathname.

For example, for fname = "/bob/cox/is/the/author/of/AFNI",

  • the lev=0 trailing name is "AFNI",
  • the lev=1 trailing name is "of/AFNI",
  • the lev=2 trailing name is "author/of/AFNI", and so on. That is, "lev" is the number of directory names above the last name to keep. The pointer returned is to some place in the middle of fname; that is, this is not a malloc()-ed string, so don't try to free() it!. -------------------------------------------------------------------

Definition at line 185 of file thd_filestuff.c.

Referenced by AFNI_set_window_titles(), AFNI_startup_timeout_CB(), AFNI_update_surface_widgets(), AFNI_write_many_dataset_CB(), ENV_sesstrail(), MAIN_workprocess(), make_PLUGIN_dataset_link(), PLUG_get_many_plugins(), PLUG_read_plugin(), PLUTO_commandstring(), read_URL_tmpdir(), TAG_get_dset_CB(), THD_fetch_many_datasets(), THD_find_executable(), THD_get_all_timeseries(), THD_init_session(), THD_open_1D(), THD_open_3D(), THD_open_analyze(), THD_open_ctfmri(), THD_open_ctfsam(), THD_open_minc(), THD_open_mpeg(), THD_open_nifti(), and write_bucket_data().

00186 {
00187    int fpos , flen , flev ;
00188 
00189    if( fname == NULL || (flen=strlen(fname)) <= 1 ) return fname ;
00190 
00191    if( lev < 0 ) lev = 0 ;
00192 
00193    flev = 0 ;
00194    fpos = flen ;
00195    if( fname[fpos-1] == '/' ) fpos-- ;  /* skip trailing slash */
00196 
00197    /* fpos   = index of latest character I've accepted,
00198       fpos-1 = index of next character to examine,
00199       flev   = number of directory levels found so far */
00200 
00201    while( fpos > 0 ){
00202 
00203       if( fname[fpos-1] == '/' ){
00204          flev++ ; if( flev >  lev ) break ;  /* reached the lev we like */
00205       }
00206       fpos-- ;  /* scan backwards */
00207    }
00208 
00209    return (fname+fpos) ;
00210 }
 

Powered by Plone

This site conforms to the following standards: