static INT64_T do_search(int argc, char **argv) { CHIRP_SEARCH *S; int flags = 0; if (argc == 4 && *argv[1] == '-') { if (strchr(argv[1], 'i')) flags |= CHIRP_SEARCH_INCLUDEROOT; if (strchr(argv[1], 'm')) flags |= CHIRP_SEARCH_METADATA; if (strchr(argv[1], 's')) flags |= CHIRP_SEARCH_STOPATFIRST; } if (argc == 4) S = chirp_reli_opensearch(current_host, argv[2], argv[3], flags, stoptime); else S = chirp_reli_opensearch(current_host, argv[1], argv[2], flags, stoptime); struct chirp_searchent *res; while((res = chirp_client_readsearch(S)) != NULL) { if(res->err) { printf("%s error on %s: %s\n", strerrsource(res->errsource), res->path, strerror(res->err)); continue; } printf("%-30s", res->path); if(flags & CHIRP_SEARCH_METADATA) printf("\t" INT64_FORMAT "\t" INT64_FORMAT "\n", res->info.cst_size, res->info.cst_ino); else printf("\n"); } chirp_client_closesearch(S); return 0; }
int main( int argc, char *argv[] ) { const char *paths = NULL; const char *pattern; int flags = 0; signed char c; while((c = getopt(argc, argv, "+smi")) > -1) { switch (c) { case 's': flags |= PFS_SEARCH_STOPATFIRST; break; case 'i': flags |= PFS_SEARCH_INCLUDEROOT; break; case 'm': flags |= PFS_SEARCH_METADATA; break; } } if (argc-optind == 1) { paths = "."; pattern = argv[optind]; } else if (argc-optind == 2) { paths = argv[optind]; pattern = argv[optind+1]; } else { printf("use: parrot_search [options] [path] <pattern>\n"); exit(EXIT_FAILURE); } SEARCH *s = parrot_opensearch(paths, pattern, flags); if (!s) { fprintf(stdout, "could not search: %s\n", strerror(errno)); exit(EXIT_FAILURE); } struct searchent *res; int i = 0; while ((res = parrot_readsearch(s)) != NULL) { if (res->err) { printf("%s error on %s: %s\n", strerrsource(res->errsource), res->path, strerror(res->err)); continue; } i++; printf("%-30s", res->path); if (flags & PFS_SEARCH_METADATA) printf("\t%-10ld\t%-10ld\n", (long)res->info->st_size, (long)res->info->st_ino); else printf("\n"); } if (i==0) printf("no results\n"); parrot_closesearch(s); return 0; }