/* Insert all file from directory into ffindex */ int ffindex_insert_list_file(FILE *data_file, FILE *index_file, size_t *start_offset, FILE *list_file) { size_t offset = *start_offset; char path[PATH_MAX]; while(fgets(path, PATH_MAX, list_file) != NULL) ffindex_insert_file(data_file, index_file, &offset, ffnchomp(path, strlen(path)), basename(path)); /* update return value */ *start_offset = offset; return 0; }
int ffindex_insert(FILE *data_file, FILE *index_file, size_t *start_offset, char *input_name) { struct stat sb; if(stat(input_name, &sb) != -1) { if(S_ISDIR(sb.st_mode)) { return ffindex_insert_dir(data_file, index_file, start_offset, input_name) == FFINDEX_OK ? SUCCESS : FAILURE; } else if(S_ISREG(sb.st_mode)) { return ffindex_insert_file(data_file, index_file, start_offset, input_name, basename(input_name)) == FFINDEX_OK ? SUCCESS : FAILURE; } } return FAILURE; }
/* Insert all files from directory into ffindex */ int ffindex_insert_dir(FILE *data_file, FILE *index_file, size_t *start_offset, char *input_dir_name) { DIR *dir = opendir(input_dir_name); if(dir == NULL) { fferror_print(__FILE__, __LINE__, __func__, input_dir_name); return -1; } size_t input_dir_name_len = strlen(input_dir_name); char path[PATH_MAX]; strncpy(path, input_dir_name, NAME_MAX); if(input_dir_name[input_dir_name_len - 1] != '/') { path[input_dir_name_len] = '/'; input_dir_name_len += 1; } size_t offset = *start_offset; struct dirent *entry; while((entry = readdir(dir)) != NULL) { if(entry->d_name[0] == '.') continue; strncpy(path + input_dir_name_len, entry->d_name, NAME_MAX); struct stat sb; if(stat(path, &sb) == -1) fferror_print(__FILE__, __LINE__, __func__, path); if(!S_ISREG(sb.st_mode)) continue; ffindex_insert_file(data_file, index_file, &offset, path, entry->d_name); } closedir(dir); /* update return value */ *start_offset = offset; return 0; }