static int read_file(struct input *input) { char filename[MAXPATHLEN]; FILE *realinput; char *line = input_line(input); int result; nthtoken(filename, line, " \n", 3); if (!(realinput = fopen(filename, "r"))) return 1; result = match_files(input, realinput); fclose(realinput); return result; }
char * select_file(char *input, int what_help) { char **list = NULL, *isdir = NULL, *path = NULL; char *new_fname = NULL; struct stat64 statbuf; int list_n, index; int strbufsize = find_path_max(); list_n = match_files(input, &path, &list, &isdir); if (list_n == 0) { myfree(path); flash(); return NULL; } index = selection_box((void **)list, isdir, list_n, SEL_FILES, what_help, NULL); if (index != -1) { new_fname = (char *)mymalloc(strbufsize + 1); snprintf(new_fname, strbufsize, "%s%s", path, list[index]); if (stat64(new_fname, &statbuf) == -1) { myfree(new_fname); new_fname = NULL; flash(); } else { if (S_ISDIR(statbuf.st_mode)) { strncat(new_fname, "/", strbufsize); } } } delete_array(list, list_n); myfree(isdir); myfree(path); return new_fname; }
static int exec_ironout(struct input *input, char *ironout) { char token[128]; char command[MAXPATHLEN]; FILE *output; char *line = input_line(input); int result; char *cur = command; line = nthtoken(token, line, " \n", 2); strcpy(cur, ironout); cur += strlen(cur); while (*line) { line = readtoken(token, line, " \n"); cur += sprintf(cur, " %s", token); } if (!(output = popen(command, "r"))) return 1; result = match_files(input, output); if (pclose(output)) return 1; return result; }
int main(int argc, char *const *argv) { FF_PKT *ff; char name[1000]; bool quiet = false; int i, ch; char *inc = NULL; char *exc = NULL; FILE *fd; setlocale(LC_ALL, ""); bindtextdomain("bacula", LOCALEDIR); textdomain("bacula"); lmgr_init_thread(); while ((ch = getopt(argc, argv, "ad:e:i:q?")) != -1) { switch (ch) { case 'a': /* print extended attributes *debug* */ attrs = 1; break; case 'd': /* set debug level */ if (*optarg == 't') { dbg_timestamp = true; } else { debug_level = atoi(optarg); if (debug_level <= 0) { debug_level = 1; } } break; case 'e': /* exclude patterns */ exc = optarg; break; case 'i': /* include patterns */ inc = optarg; break; case 'q': quiet = true; break; case '?': default: usage(); } } argc -= optind; argv += optind; jcr = new_jcr(sizeof(JCR), NULL); ff = init_find_files(); if (argc == 0 && !inc) { add_fname_to_include_list(ff, 0, "/"); /* default to / */ } else { for (i=0; i < argc; i++) { if (strcmp(argv[i], "-") == 0) { while (fgets(name, sizeof(name)-1, stdin)) { strip_trailing_junk(name); add_fname_to_include_list(ff, 0, name); } continue; } add_fname_to_include_list(ff, 0, argv[i]); } } if (inc) { fd = fopen(inc, "rb"); if (!fd) { printf(_("Could not open include file: %s\n"), inc); exit(1); } while (fgets(name, sizeof(name)-1, fd)) { strip_trailing_junk(name); add_fname_to_include_list(ff, 0, name); } fclose(fd); } if (exc) { fd = fopen(exc, "rb"); if (!fd) { printf(_("Could not open exclude file: %s\n"), exc); exit(1); } while (fgets(name, sizeof(name)-1, fd)) { strip_trailing_junk(name); add_fname_to_exclude_list(ff, name); } fclose(fd); } if (quiet) { match_files(jcr, ff, count_files); } else { match_files(jcr, ff, print_file); } printf(_("Files seen = %d\n"), num_files); term_include_exclude_files(ff); term_find_files(ff); free_jcr(jcr); term_last_jobs_list(); /* free jcr chain */ close_memory_pool(); lmgr_cleanup_main(); sm_dump(false); exit(0); }
static INT_PTR CDECL extract_notify( FDINOTIFICATIONTYPE fdint, PFDINOTIFICATION pfdin ) { WCHAR *file, *nameW, *path = NULL; INT_PTR ret; switch (fdint) { case fdintCABINET_INFO: return 0; case fdintCOPY_FILE: nameW = strdupAtoW( (pfdin->attribs & _A_NAME_IS_UTF) ? CP_UTF8 : CP_ACP, pfdin->psz1 ); if (opt_preserve_paths) { file = nameW; while (*file == '\\') file++; /* remove leading backslashes */ } else { if ((file = strrchrW( nameW, '\\' ))) file++; else file = nameW; } if (opt_dest_dir) { path = cab_alloc( (strlenW(opt_dest_dir) + strlenW(file) + 1) * sizeof(WCHAR) ); strcpyW( path, opt_dest_dir ); strcatW( path, file ); } else path = file; if (match_files( file )) { if (opt_verbose) { char *nameU = strdupWtoA( CP_UNIXCP, path ); printf( "extracting %s\n", nameU ); cab_free( nameU ); } create_directories( path ); /* FIXME: check for existing file and overwrite mode */ ret = (INT_PTR)CreateFileW( path, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); } else ret = 0; cab_free( nameW ); if (path != file) cab_free( path ); return ret; case fdintCLOSE_FILE_INFO: CloseHandle( (HANDLE)pfdin->hf ); return 0; case fdintNEXT_CABINET: WINE_TRACE("Next cab: status %u, path '%s', file '%s'\n", pfdin->fdie, pfdin->psz3, pfdin->psz1); return pfdin->fdie == FDIERROR_NONE ? 0 : -1; case fdintENUMERATE: return 0; default: WINE_FIXME( "Unexpected notification type %d.\n", fdint ); return 0; } }