static void PRS(int argc, char *argv[]) { int i, j; char *arg, *dev, *tmp = 0; char options[128]; int opt = 0; int opts_for_fsck = 0; struct sigaction sa; /* * Set up signal action */ memset(&sa, 0, sizeof(struct sigaction)); sa.sa_handler = signal_cancel; sigaction(SIGINT, &sa, 0); sigaction(SIGTERM, &sa, 0); num_devices = 0; num_args = 0; instance_list = 0; for (i=1; i < argc; i++) { arg = argv[i]; if (!arg) continue; if ((arg[0] == '/' && !opts_for_fsck) || strchr(arg, '=')) { if (num_devices >= MAX_DEVICES) { bb_error_msg_and_die("too many devices"); } dev = blkid_get_devname(cache, arg, NULL); if (!dev && strchr(arg, '=')) { /* * Check to see if we failed because * /proc/partitions isn't found. */ if (access("/proc/partitions", R_OK) < 0) { bb_perror_msg_and_die("cannot open /proc/partitions " "(is /proc mounted?)"); } /* * Check to see if this is because * we're not running as root */ if (geteuid()) bb_error_msg_and_die( "must be root to scan for matching filesystems: %s\n", arg); else bb_error_msg_and_die( "cannot find matching filesystem: %s", arg); } devices[num_devices++] = dev ? dev : string_copy(arg); continue; } if (arg[0] != '-' || opts_for_fsck) { if (num_args >= MAX_ARGS) { bb_error_msg_and_die("too many arguments"); } args[num_args++] = string_copy(arg); continue; } for (j=1; arg[j]; j++) { if (opts_for_fsck) { options[++opt] = arg[j]; continue; } switch (arg[j]) { case 'A': doall++; break; case 'C': progress++; if (arg[j+1]) { progress_fd = string_to_int(arg+j+1); if (progress_fd < 0) progress_fd = 0; else goto next_arg; } else if ((i+1) < argc && argv[i+1][0] != '-') { progress_fd = string_to_int(argv[i]); if (progress_fd < 0) progress_fd = 0; else { goto next_arg; i++; } } break; case 'V': verbose++; break; case 'N': noexecute++; break; case 'R': skip_root++; break; case 'T': notitle++; break; case 'M': like_mount++; break; case 'P': parallel_root++; break; case 's': serialize++; break; case 't': tmp = 0; if (fstype) bb_show_usage(); if (arg[j+1]) tmp = arg+j+1; else if ((i+1) < argc) tmp = argv[++i]; else bb_show_usage(); fstype = string_copy(tmp); compile_fs_type(fstype, &fs_type_compiled); goto next_arg; case '-': opts_for_fsck++; break; case '?': bb_show_usage(); break; default: options[++opt] = arg[j]; break; } } next_arg: if (opt) { options[0] = '-'; options[++opt] = '\0'; if (num_args >= MAX_ARGS) { bb_error_msg("too many arguments"); } args[num_args++] = string_copy(options); opt = 0; } } if (getenv("FSCK_FORCE_ALL_PARALLEL")) force_all_parallel++; if ((tmp = getenv("FSCK_MAX_INST"))) max_running = atoi(tmp); }
static void PRS(int argc, char *argv[]) { int i, j; char *arg, *dev, *tmp = 0; char options[128]; int opt = 0; int opts_for_fsck = 0; #ifdef HAVE_SIGNAL_H struct sigaction sa; memset(&sa, 0, sizeof(struct sigaction)); sa.sa_handler = signal_cancel; sigaction(SIGINT, &sa, 0); sigaction(SIGTERM, &sa, 0); #endif num_devices = 0; num_args = 0; instance_list = 0; progname = argv[0]; for (i=1; i < argc; i++) { arg = argv[i]; if (!arg) continue; if ((arg[0] == '/' && !opts_for_fsck) || strchr(arg, '=')) { if (num_devices >= MAX_DEVICES) { fprintf(stderr, _("%s: too many devices\n"), progname); exit(EXIT_ERROR); } dev = blkid_get_devname(cache, arg, NULL); if (!dev && strchr(arg, '=')) { if (access("/proc/partitions", R_OK) < 0) { fprintf(stderr, "Couldn't open /proc/partitions: %s\n", strerror(errno)); fprintf(stderr, "Is /proc mounted?\n"); exit(EXIT_ERROR); } if (geteuid()) fprintf(stderr, "Must be root to scan for matching filesystems: %s\n", arg); else fprintf(stderr, "Couldn't find matching filesystem: %s\n", arg); exit(EXIT_ERROR); } devices[num_devices++] = dev ? dev : string_copy(arg); continue; } if (arg[0] != '-' || opts_for_fsck) { if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(arg); continue; } for (j=1; arg[j]; j++) { if (opts_for_fsck) { options[++opt] = arg[j]; continue; } switch (arg[j]) { case 'A': doall++; break; case 'C': progress++; if (arg[j+1]) { progress_fd = string_to_int(arg+j+1); if (progress_fd < 0) progress_fd = 0; else goto next_arg; } else if ((i+1) < argc && !strncmp(argv[i+1], "-", 1) == 0) { progress_fd = string_to_int(argv[i]); if (progress_fd < 0) progress_fd = 0; else { goto next_arg; i++; } } break; case 'V': verbose++; break; case 'N': noexecute++; break; case 'R': skip_root++; break; case 'T': notitle++; break; case 'M': ignore_mounted++; break; case 'P': parallel_root++; break; case 's': serialize++; break; case 't': tmp = 0; if (fstype) usage(); if (arg[j+1]) tmp = arg+j+1; else if ((i+1) < argc) tmp = argv[++i]; else usage(); fstype = string_copy(tmp); compile_fs_type(fstype, &fs_type_compiled); goto next_arg; case '-': opts_for_fsck++; break; case '?': usage(); break; default: options[++opt] = arg[j]; break; } } next_arg: if (opt) { options[0] = '-'; options[++opt] = '\0'; if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(options); opt = 0; } } if (getenv("FSCK_FORCE_ALL_PARALLEL")) force_all_parallel++; if ((tmp = getenv("FSCK_MAX_INST"))) max_running = atoi(tmp); }
static void PRS(int argc, char *argv[]) { int i, j; char *arg, *tmp; char options[128]; int opt = 0; int opts_for_fsck = 0; #ifdef HAVE_SIGNAL_H struct sigaction sa; /* * Set up signal action */ memset(&sa, 0, sizeof(struct sigaction)); sa.sa_handler = signal_cancel; sigaction(SIGINT, &sa, 0); sigaction(SIGTERM, &sa, 0); #endif num_devices = 0; num_args = 0; instance_list = 0; progname = argv[0]; for (i=1; i < argc; i++) { arg = argv[i]; if (!arg) continue; if ((arg[0] == '/' && !opts_for_fsck) || (strncmp(arg, "LABEL=", 6) == 0) || (strncmp(arg, "UUID=", 5) == 0)) { if (num_devices >= MAX_DEVICES) { fprintf(stderr, _("%s: too many devices\n"), progname); exit(EXIT_ERROR); } devices[num_devices++] = interpret_device(string_copy(arg)); continue; } if (arg[0] != '-' || opts_for_fsck) { if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(arg); continue; } for (j=1; arg[j]; j++) { if (opts_for_fsck) { options[++opt] = arg[j]; continue; } switch (arg[j]) { case 'A': doall++; break; case 'C': progress++; break; case 'V': verbose++; break; case 'N': noexecute++; break; case 'R': skip_root++; break; case 'T': notitle++; break; case 'M': like_mount++; break; case 'P': parallel_root++; break; case 's': serialize++; break; case 't': if (fstype) usage(); if (arg[j+1]) tmp = arg+j+1; else if ((i+1) < argc) tmp = argv[++i]; else usage(); fstype = string_copy(tmp); compile_fs_type(fstype, &fs_type_compiled); goto next_arg; case '-': opts_for_fsck++; break; case '?': usage(); break; default: options[++opt] = arg[j]; break; } } next_arg: if (opt) { options[0] = '-'; options[++opt] = '\0'; if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(options); opt = 0; } } if (getenv("FSCK_FORCE_ALL_PARALLEL")) force_all_parallel++; if ((tmp = getenv("FSCK_MAX_INST"))) max_running = atoi(tmp); }
static void PRS(int argc, char *argv[]) { int i, j; char *arg; char options[128]; int opt = 0; int opts_for_fsck = 0; num_devices = 0; num_args = 0; instance_list = 0; progname = argv[0]; for (i=1; i < argc; i++) { arg = argv[i]; if (!arg) continue; if ((arg[0] == '/' && !opts_for_fsck) || (strncmp(arg, "LABEL=", 6) == 0) || (strncmp(arg, "UUID=", 5) == 0)) { if (num_devices >= MAX_DEVICES) { fprintf(stderr, _("%s: too many devices\n"), progname); exit(EXIT_ERROR); } devices[num_devices++] = interpret_device(string_copy(arg)); continue; } if (arg[0] != '-' || opts_for_fsck) { if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(arg); continue; } for (j=1; arg[j]; j++) { if (opts_for_fsck) { options[++opt] = arg[j]; continue; } switch (arg[j]) { case 'A': doall++; break; case 'C': progress++; break; case 'V': verbose++; break; case 'N': noexecute++; break; case 'R': skip_root++; break; case 'T': notitle++; break; case 'M': like_mount++; break; case 'P': parallel_root++; break; case 's': serialize++; break; case 't': if (arg[j+1]) { fstype = string_copy(arg+j+1); compile_fs_type(fstype, &fs_type_compiled); goto next_arg; } if ((i+1) < argc) { i++; fstype = string_copy(argv[i]); compile_fs_type(fstype, &fs_type_compiled); goto next_arg; } usage(); break; case '-': opts_for_fsck++; break; case '?': usage(); break; default: options[++opt] = arg[j]; break; } } next_arg: if (opt) { options[0] = '-'; options[++opt] = '\0'; if (num_args >= MAX_ARGS) { fprintf(stderr, _("%s: too many arguments\n"), progname); exit(EXIT_ERROR); } args[num_args++] = string_copy(options); opt = 0; } } if (getenv("FSCK_FORCE_ALL_PARALLEL")) force_all_parallel++; }