summaryrefslogtreecommitdiffstats
path: root/disk-utils/mkswap.c
diff options
context:
space:
mode:
Diffstat (limited to 'disk-utils/mkswap.c')
-rw-r--r--disk-utils/mkswap.c47
1 files changed, 20 insertions, 27 deletions
diff --git a/disk-utils/mkswap.c b/disk-utils/mkswap.c
index 34fe687d1..0144921e7 100644
--- a/disk-utils/mkswap.c
+++ b/disk-utils/mkswap.c
@@ -363,10 +363,9 @@ new_prober(int fd)
#endif
static void
-wipe_device(int fd, const char *devname, int force, int is_blkdevice)
+wipe_device(int fd, const char *devname, int force)
{
char *type = NULL;
- int whole = 0;
int zap = 1;
#ifdef HAVE_LIBBLKID
blkid_probe pr = NULL;
@@ -375,29 +374,21 @@ wipe_device(int fd, const char *devname, int force, int is_blkdevice)
if (lseek(fd, 0, SEEK_SET) != 0)
errx(EXIT_FAILURE, _("unable to rewind swap-device"));
- if (is_blkdevice && is_whole_disk_fd(fd, devname)) {
- /* don't zap bootbits on whole disk -- we know nothing
- * about bootloaders on the device */
- whole = 1;
- zap = 0;
- } else {
#ifdef HAVE_LIBBLKID
- pr = new_prober(fd);
- blkid_probe_enable_partitions(pr, 1);
- blkid_probe_enable_superblocks(pr, 0);
-
- if (blkid_do_fullprobe(pr) == 0 &&
- blkid_probe_lookup_value(pr, "PTTYPE",
- (const char **) &type, NULL) == 0 &&
- type) {
- type = xstrdup(type);
- zap = 0;
- }
-#else
- /* don't zap if compiled without libblkid */
+ pr = new_prober(fd);
+ blkid_probe_enable_partitions(pr, 1);
+ blkid_probe_enable_superblocks(pr, 0);
+
+ if (blkid_do_fullprobe(pr) == 0 &&
+ blkid_probe_lookup_value(pr, "PTTYPE",
+ (const char **) &type, NULL) == 0 && type) {
+ type = xstrdup(type);
zap = 0;
-#endif
}
+#else
+ /* don't zap if compiled without libblkid */
+ zap = 0;
+#endif
}
if (zap) {
@@ -405,6 +396,7 @@ wipe_device(int fd, const char *devname, int force, int is_blkdevice)
* Wipe boodbits
*/
char buf[1024];
+ const char *data = NULL;
if (lseek(fd, 0, SEEK_SET) != 0)
errx(EXIT_FAILURE, _("unable to rewind swap-device"));
@@ -421,18 +413,19 @@ wipe_device(int fd, const char *devname, int force, int is_blkdevice)
blkid_probe_enable_superblocks(pr, 1);
blkid_probe_enable_partitions(pr, 0);
- blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_MAGIC);
+ blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_MAGIC|BLKID_SUBLKS_TYPE);
- while (blkid_do_probe(pr) == 0)
+ while (blkid_do_probe(pr) == 0) {
+ if (blkid_probe_lookup_value(pr, "TYPE", &data, NULL) == 0 && data)
+ warnx(_("%s: warning: wiping old %s signature."), devname, data);
blkid_do_wipe(pr, 0);
+ }
#endif
} else {
warnx(_("%s: warning: don't erase bootbits sectors"),
devname);
if (type)
fprintf(stderr, _(" (%s partition table detected). "), type);
- else if (whole)
- fprintf(stderr, _(" on whole disk. "));
else
fprintf(stderr, _(" (compiled without libblkid). "));
fprintf(stderr, "Use -f to force.\n");
@@ -603,7 +596,7 @@ main(int argc, char **argv) {
if (check)
check_blocks();
- wipe_device(DEV, device_name, force, S_ISBLK(statbuf.st_mode));
+ wipe_device(DEV, device_name, force);
hdr = (struct swap_header_v1_2 *) signature_page;
hdr->version = 1;