wipefs: clean up code

This is C, use int & bits for boolean stuff rather than army of
variables.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2013-04-26 12:43:31 +02:00
parent 7e658c15a2
commit 1666c15588
1 changed files with 35 additions and 28 deletions

View File

@ -62,6 +62,14 @@ enum {
WP_MODE_PARSABLE
};
enum {
WP_FL_NOACT = (1 << 1),
WP_FL_ALL = (1 << 2),
WP_FL_QUIET = (1 << 3),
WP_FL_BACKUP = (1 << 4),
WP_FL_FORCE = (1 << 5)
};
static const char *type_pattern;
static void
@ -287,15 +295,16 @@ free_wipe(struct wipe_desc *wp)
}
}
static void do_wipe_real(blkid_probe pr, const char *devname, struct wipe_desc *w, int noact, int quiet)
static void do_wipe_real(blkid_probe pr, const char *devname,
struct wipe_desc *w, int flags)
{
size_t i;
if (blkid_do_wipe(pr, noact))
if (blkid_do_wipe(pr, (flags & WP_FL_NOACT) != 0))
warn(_("%s: failed to erase %s magic string at offset 0x%08jx"),
devname, w->type, w->offset);
if (quiet)
if (flags & WP_FL_QUIET)
return;
printf(_("%s: %zd bytes were erased at offset 0x%08jx (%s): "),
@ -329,26 +338,25 @@ err:
}
static struct wipe_desc *
do_wipe(struct wipe_desc *wp, const char *devname, int noact, int all, int bkp, int quiet, int force)
do_wipe(struct wipe_desc *wp, const char *devname, int flags)
{
int flags;
int mode = O_RDWR;
blkid_probe pr;
struct wipe_desc *w, *wp0;
int zap = all ? 1 : wp->zap;
char *fn_base = NULL;
int zap = (flags & WP_FL_ALL) ? 1 : wp->zap;
char *backup = NULL;
flags = O_RDWR;
if (!force)
flags |= O_EXCL;
pr = new_probe(devname, flags);
if (!(flags & WP_FL_FORCE))
mode |= O_EXCL;
pr = new_probe(devname, mode);
if (!pr)
return NULL;
if (zap && bkp) {
if (zap && (flags & WP_FL_BACKUP)) {
const char *home = getenv ("HOME");
if (!home)
errx(EXIT_FAILURE, _("failed to create a signature backup, $HOME undefined"));
xasprintf (&fn_base, "%s/wipefs-%s-", home, basename(devname));
xasprintf (&backup, "%s/wipefs-%s-", home, basename(devname));
}
wp0 = clone_offset(wp);
@ -373,14 +381,14 @@ do_wipe(struct wipe_desc *wp, const char *devname, int noact, int all, int bkp,
continue;
if (zap) {
if (bkp)
do_backup(wp, fn_base);
do_wipe_real(pr, devname, wp, noact, quiet);
if (backup)
do_backup(wp, backup);
do_wipe_real(pr, devname, wp, flags);
}
}
for (w = wp0; w != NULL; w = w->next) {
if (!w->on_disk && !quiet)
if (!w->on_disk && !(flags & WP_FL_QUIET))
warnx(_("%s: offset 0x%jx not found"), devname, w->offset);
}
@ -388,7 +396,7 @@ do_wipe(struct wipe_desc *wp, const char *devname, int noact, int all, int bkp,
close(blkid_probe_get_fd(pr));
blkid_free_probe(pr);
free_wipe(wp0);
free(fn_base);
free(backup);
return wp;
}
@ -423,7 +431,7 @@ int
main(int argc, char **argv)
{
struct wipe_desc *wp0 = NULL, *wp;
int c, all = 0, bkp = 0, force = 0, has_offset = 0, noact = 0, quiet = 0;
int c, has_offset = 0, flags = 0;
int mode = WP_MODE_PRETTY;
static const struct option longopts[] = {
@ -457,19 +465,19 @@ main(int argc, char **argv)
switch(c) {
case 'a':
all++;
flags |= WP_FL_ALL;
break;
case 'b':
bkp++;
flags |= WP_FL_BACKUP;
break;
case 'f':
force++;
flags |= WP_FL_FORCE;
break;
case 'h':
usage(stdout);
break;
case 'n':
noact++;
flags |= WP_FL_NOACT;
break;
case 'o':
wp0 = add_offset(wp0, strtosize_or_err(optarg,
@ -480,7 +488,7 @@ main(int argc, char **argv)
mode = WP_MODE_PARSABLE;
break;
case 'q':
quiet++;
flags |= WP_FL_QUIET;
break;
case 't':
type_pattern = optarg;
@ -497,10 +505,10 @@ main(int argc, char **argv)
if (optind == argc)
usage(stderr);
if (bkp && !(all || has_offset))
if ((flags & WP_FL_BACKUP) && !((flags & WP_FL_ALL) || has_offset))
warnx(_("The --backup option is meaningless in this context"));
if (!all && !has_offset) {
if (!(flags & WP_FL_ALL) && !has_offset) {
/*
* Print only
*/
@ -516,8 +524,7 @@ main(int argc, char **argv)
*/
while (optind < argc) {
wp = clone_offset(wp0);
wp = do_wipe(wp, argv[optind++], noact, all, bkp, quiet,
force);
wp = do_wipe(wp, argv[optind++], flags);
free_wipe(wp);
}
}