[PATCH 1/3] mke2fs: print a message when creating a regular file

Theodore Ts'o
2014-05-05T13:04:09Z

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
misc/mke2fs.c | 6 ++++--
misc/util.c | 11 +++++++----
misc/util.h | 1 +
3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/misc/mke2fs.c b/misc/mke2fs.c
index 2c51999..51532ef 100644
--- a/misc/mke2fs.c
+++ b/misc/mke2fs.c
@@ -103,6 +103,7 @@ static int quotatype = -1; /* Initialize both user and group quotas by default
static __u64 offset;
static blk64_t journal_location = ~0LL;
static int proceed_delay = -1;
+static blk64_t dev_size;

static struct ext2_super_block fs_param;
static char *fs_uuid = NULL;
@@ -1402,7 +1403,6 @@ static void PRS(int argc, char *argv[])
char * extended_opts = 0;
char * fs_type = 0;
char * usage_types = 0;
- blk64_t dev_size;
/*
* NOTE: A few words about fs_blocks_count and blocksize:
*
@@ -1768,6 +1768,8 @@ profile_error:
flags = CREATE_FILE;
if (isatty(0) && isatty(1))
flags |= CHECK_FS_EXIST;
+ if (!quiet)
+ flags |= VERBOSE_CREATE;
if (!check_plausibility(device_name, flags, &is_device) && !force)
proceed_question(proceed_delay);

@@ -2573,7 +2575,7 @@ int main (int argc, char *argv[])
journal_blocks = figure_journal_size(journal_size, fs);

/* Can't undo discard ... */
- if (!noaction && discard && (io_ptr != undo_io_manager)) {
+ if (!noaction && discard && dev_size && (io_ptr != undo_io_manager)) {
retval = mke2fs_discard_device(fs);
if (!retval && io_channel_discard_zeroes_data(fs->io)) {
if (verbose)
diff --git a/misc/util.c b/misc/util.c
index be16ebe..15b4ce5 100644
--- a/misc/util.c
+++ b/misc/util.c
@@ -106,7 +106,7 @@ void proceed_question(int delay)
}

/*
- * return 1 if the device looks plausible
+ * return 1 if the device looks plausible, creating the file if necessary
*/
int check_plausibility(const char *device, int flags, int *ret_is_dev)
{
@@ -117,10 +117,13 @@ int check_plausibility(const char *device, int flags, int *ret_is_dev)
char *fs_type = NULL;
char *fs_label = NULL;

- if (flags & CREATE_FILE)
- fl |= O_CREAT;
-
fd = open(device, fl, 0666);
+ if ((fd < 0) && (errno == ENOENT) && (flags & CREATE_FILE)) {
+ fl |= O_CREAT;
+ fd = open(device, fl, 0666);
+ if (fd >= 0 && (flags & VERBOSE_CREATE))
+ printf(_("Creating regular file %s\n"), device);
+ }
if (fd < 0) {
fprintf(stderr, _("Could not open %s: %s\n"),
device, error_message(errno));
diff --git a/misc/util.h b/misc/util.h
index 745568e..476164b 100644
--- a/misc/util.h
+++ b/misc/util.h
@@ -21,6 +21,7 @@ extern char *journal_location_string;
#define CHECK_BLOCK_DEV 0x0001
#define CREATE_FILE 0x0002
#define CHECK_FS_EXIST 0x0004
+#define VERBOSE_CREATE 0x0008

#ifndef HAVE_STRCASECMP
extern int strcasecmp (char *s1, char *s2);
--
1.9.0