Doxygen Source Code Documentation
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
|
|
Definition at line 273 of file thd_filestuff.c. |
|
|
Definition at line 272 of file thd_filestuff.c. |
|
|
Definition at line 270 of file thd_filestuff.c. |
|
|
Definition at line 271 of file thd_filestuff.c. Referenced by THD_freemegabytes(). |
Function Documentation
|
|
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 }
|
|
||||||||||||
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
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. 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 }
|
|
|
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 }
|
|
|
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 }
|
|
|
|
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 }
|
|
|
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 }
|
|
|
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 }
|
|
||||||||||||
|
Find a 'trailing name in a pathname. For example, for fname = "/bob/cox/is/the/author/of/AFNI",
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 }
|