49 if( f1 -> filetime < f2 -> filetime )
53 else if( f1 -> filetime == f2 -> filetime )
55 if( f1 -> filetime_nsec < f2 -> filetime_nsec )
59 else if( f1 -> filetime_nsec > f2 -> filetime_nsec )
64 else if( f1 -> filetime > f2 -> filetime )
85 struct dirent *entry = NULL;
91 if( ( dp = opendir( dir ) ) == NULL )
93 n_log(
LOG_ERR , dir ,
"cannot open directory: %s, %s" , dir , strerror( errno ) );
96 if( chdir( dir ) == -1 )
98 n_log(
LOG_ERR , dir ,
"cannot chdir to directory %s, %s" , dir , strerror( errno ) );
103 while( ( entry = readdir( dp ) ) != NULL )
105 if( stat( entry -> d_name , &statbuf ) != -1 )
107 if( S_ISDIR( statbuf . st_mode ) )
109 if( strcmp(
"." , entry -> d_name ) == 0 || strcmp(
".." , entry -> d_name ) == 0 )
114 if( recurse != FALSE )
116 if(
n_scan_dir( entry -> d_name , result, recurse ) == FALSE )
118 n_log(
LOG_ERR , entry -> d_name ,
"error while recursively scanning %s" , entry -> d_name );
122 else if( S_ISREG( statbuf . st_mode ) )
126 file -> name = strdup( entry -> d_name );
128 file -> filetime = statbuf . st_mtime ;
129 file -> filetime_nsec = statbuf . st_mtimensec ;
131 file -> filetime = statbuf . st_mtim . tv_sec ;
132 file -> filetime_nsec = statbuf . st_mtim . tv_nsec ;
134 file -> filetime = statbuf . st_mtime ;
135 file -> filetime_nsec = 0 ;
142 n_log(
LOG_ERR ,
"Not a S_ISDIR or S_ISREG file: %s" , entry -> d_name );
147 n_log(
LOG_ERR ,
"unable to stat %s, %s" , entry -> d_name , strerror( errno ) );
152 n_log(
LOG_ERR ,
"readdir failed: %s" , strerror( errno ) );
#define Malloc(__ptr, __struct, __size)
Malloc Handler to get errors and set to 0.
#define __n_assert(__ptr, __ret)
macro to assert things
int list_push_sorted(LIST *list, void *ptr, int(*comparator)(const void *a, const void *b), void(*destructor)(void *ptr))
Add a pointer sorted in the list , starting by the end of the list.
Structure of a generic LIST container.
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
#define LOG_ERR
error conditions
int n_scan_dir(const char *dir, LIST *result, const int recurse)
Scan given directory and return a LIST of char.
void n_free_file_info(void *ptr)
free a N_FILE_INFO struct
static int n_comp_file_info(const void *a, const void *b)
local comparison function for sorting filenames, case insensitive
files configuration header