Skip to content

Commit

Permalink
mkswap: avoid mkswap usage on already mounted device
Browse files Browse the repository at this point in the history
Signed-off-by: Karel Zak <kzak@redhat.com>
  • Loading branch information
karelzak committed Feb 7, 2007
1 parent f93a4af commit 8abb4c2
Showing 1 changed file with 37 additions and 2 deletions.
39 changes: 37 additions & 2 deletions disk-utils/mkswap.c
Expand Up @@ -36,6 +36,7 @@
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#include <mntent.h>
#include <sys/ioctl.h> /* for _IO */
#include <sys/utsname.h>
#include <sys/stat.h>
Expand Down Expand Up @@ -476,6 +477,29 @@ isnzdigit(char c) {
return (c >= '1' && c <= '9');
}


/*
* Check to make certain that our new filesystem won't be created on
* an already mounted partition. Code adapted from mke2fs, Copyright
* (C) 1994 Theodore Ts'o. Also licensed under GPL.
* (C) 2006 Karel Zak -- port to mkswap
*/
static int
check_mount(void) {
FILE * f;
struct mntent * mnt;

if ((f = setmntent (MOUNTED, "r")) == NULL)
return 0;
while ((mnt = getmntent (f)) != NULL)
if (strcmp (device_name, mnt->mnt_fsname) == 0)
break;
endmntent (f);
if (!mnt)
return 0;
return 1;
}

int
main(int argc, char ** argv) {
struct stat statbuf;
Expand Down Expand Up @@ -639,8 +663,19 @@ main(int argc, char ** argv) {
/* Want a block device. Probably not /dev/hda or /dev/hdb. */
if (!S_ISBLK(statbuf.st_mode))
check=0;
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
die(_("Will not try to make swapdevice on '%s'"));
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340) {
fprintf(stderr,
_("%s: error: "
"will not try to make swapdevice on '%s'\n"),
program_name, device_name);
exit(1);
} else if (check_mount()) {
fprintf(stderr,
_("%s: error: "
"%s is mounted; will not make swapspace.\n"),
program_name, device_name);
exit(1);
}

#ifdef __sparc__
if (!force && version == 0) {
Expand Down

0 comments on commit 8abb4c2

Please sign in to comment.