PCS_API PcsFileInfo *pcs_meta(Pcs handle, const char *path) { PcsFileInfoList *filist; PcsFileInfo *meta = NULL; char *dir, *key; PcsFileInfoListIterater iterater; pcs_clear_errmsg(handle); dir = pcs_utils_basedir(path); key = pcs_utils_filename(path); filist = pcs_search(handle, dir, key, PcsFalse); pcs_free(dir); pcs_free(key); if (!filist) return NULL; pcs_filist_iterater_init(filist, &iterater, PcsFalse); while(pcs_filist_iterater_next(&iterater)) { if (pcs_utils_strcmpi(path, iterater.current->path) == 0) { meta = iterater.current; break; } } if (meta) { meta = pcs_fileinfo_clone(meta); if (!meta) { pcs_set_errmsg(handle, "Can't clone the meta data."); } } else { pcs_set_errmsg(handle, "Can't find the file."); } pcs_filist_destroy(filist); return meta; }
static void exec_search(Pcs pcs, struct params *params) { PcsFileInfoList *list; printf("\n%sSearch %s in %s\n", params->is_recursion ? "Recursive " : "", params->args[1], params->args[0]); list = pcs_search(pcs, params->args[0], params->args[1], params->is_recursion); putchar('\n'); if (list) { print_filelist(list); pcs_filist_destroy(list); } else { print_filelist_head(4); } }