int r;
char *err;
- argv[i++] = "/sbin/mkfs";
+ argv[i++] = "mkfs";
argv[i++] = "-t";
argv[i++] = fstype;
* to every block and does bad block detection, neither of which
* are useful behaviour for virtual devices.
*/
- if (strcmp (fstype, "ntfs") == 0)
+ if (STREQ (fstype, "ntfs"))
argv[i++] = "-Q";
/* mkfs.reiserfs produces annoying interactive prompts unless you
* tell it to be quiet.
*/
- if (strcmp (fstype, "reiserfs") == 0)
+ if (STREQ (fstype, "reiserfs"))
argv[i++] = "-f";
/* Same for JFS. */
- if (strcmp (fstype, "jfs") == 0)
+ if (STREQ (fstype, "jfs"))
argv[i++] = "-f";
/* For GFS, GFS2, assume a single node. */
- if (strcmp (fstype, "gfs") == 0 || strcmp (fstype, "gfs2") == 0) {
+ if (STREQ (fstype, "gfs") || STREQ (fstype, "gfs2")) {
argv[i++] = "-p";
argv[i++] = "lock_nolock";
/* The man page says this is default, but it doesn't seem to be: */
r = commandv (NULL, &err, argv);
if (r == -1) {
- reply_with_error ("mkfs: %s: %s: %s", fstype, device, err);
+ reply_with_error ("%s: %s: %s", fstype, device, err);
free (err);
return -1;
}
const char *extra[2];
char blocksize_s[32];
+ if (blocksize <= 0 || !is_power_of_2 (blocksize)) {
+ reply_with_error ("block size must be > 0 and a power of 2");
+ return -1;
+ }
+
snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
extra[0] = "-b";