105 long long timestamp = 0;
107 std::string pattern( aFilespec.fn_str() );
108 std::string dir_path( aDirPath.fn_str() );
110 DIR* dir = opendir( dir_path.c_str() );
114 for( dirent* dir_entry = readdir( dir ); dir_entry; dir_entry = readdir( dir ) )
117 if( fnmatch( pattern.c_str(), dir_entry->d_name, FNM_CASEFOLD | FNM_PERIOD ) != 0 )
120 std::string entry_path = dir_path +
'/' + dir_entry->d_name;
121 struct stat entry_stat;
123 if( lstat( entry_path.c_str(), &entry_stat ) == 0 )
126 if( S_ISLNK( entry_stat.st_mode ) )
128 char buffer[PATH_MAX + 1];
129 ssize_t pathLen = readlink( entry_path.c_str(), buffer, PATH_MAX );
133 struct stat linked_stat;
134 buffer[pathLen] =
'\0';
135 std::string linked_path = dir_path +
'/' + buffer;
137 if( lstat( linked_path.c_str(), &linked_stat ) == 0 )
138 entry_stat = linked_stat;
142 if( S_ISREG( entry_stat.st_mode ) )
144 timestamp += entry_stat.st_mtime * 1000;
145 timestamp += entry_stat.st_size;
151 timestamp += (signed) std::hash<std::string>{}( std::string( dir_entry->d_name ) );