As I always forget to delete the produced dump file when testing something, I'd like to see a `-f' option that forces makedumpfile to overwrite existing files. Signed-off-by: Bernhard Walle <bwalle at suse.de> --- makedumpfile.8 | 10 ++++++++++ makedumpfile.c | 11 +++++++++-- makedumpfile.h | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) --- a/makedumpfile.8 +++ b/makedumpfile.8 @@ -144,6 +144,16 @@ support compressed data. # makedumpfile \-E \-d 31 \-x vmlinux /proc/vmcore dumpfile .TP +\fB\-f\fR +Force existing files to be overwritten. +.br +.B Example: +.br +# makedumpfile \-f \-x vmlinux /proc/vmcore dumpfile +.br +This command overwrites \fIdumpfile\fR if it already exists. + +.TP \fB\-x\fR \fIVMLINUX\fR Specify the first kernel's \fIVMLINUX\fR with debug information to analyze the first kernel's memory usage. --- a/makedumpfile.c +++ b/makedumpfile.c @@ -409,6 +409,10 @@ int open_dump_file(struct DumpInfo *info) { int fd; + int open_flags = O_RDWR|O_CREAT; + + if (!info->flag_force) + open_flags |= O_EXCL; if (info->flag_flatten) { if ((info->name_dumpfile @@ -420,7 +424,7 @@ open_dump_file(struct DumpInfo *info) fd = STDOUT_FILENO; strcpy(info->name_dumpfile, FILENAME_STDOUT); - } else if ((fd = open(info->name_dumpfile, O_RDWR|O_CREAT|O_EXCL, + } else if ((fd = open(info->name_dumpfile, open_flags, S_IRUSR|S_IWUSR)) < 0) { ERRMSG("Can't open the dump file(%s). %s\n", info->name_dumpfile, strerror(errno)); @@ -4624,7 +4628,7 @@ main(int argc, char *argv[]) vt = &info->vm_table; info->block_order = DEFAULT_ORDER; - while ((opt = getopt(argc, argv, "b:cDd:EFg:hi:Rvx:")) != -1) { + while ((opt = getopt(argc, argv, "b:cDd:EFg:hi:Rvx:f")) != -1) { switch (opt) { case 'b': info->block_order = atoi(optarg); @@ -4646,6 +4650,9 @@ main(int argc, char *argv[]) case 'F': info->flag_flatten = 1; break; + case 'f': + info->flag_force = 1; + break; case 'g': info->flag_generate_config = 1; info->name_configfile = optarg; --- a/makedumpfile.h +++ b/makedumpfile.h @@ -552,6 +552,7 @@ struct DumpInfo { format to a standard out */ int flag_rearrange; /* flag of creating dumpfile from flattened format */ + int flag_force; /* overwrite existing stuff */ long page_size; /* size of page */ long page_shift; unsigned long long max_mapnr; /* number of page descriptor */