On Mon, 22 Apr 2013 09:01:23 +0900 HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote: > > + if (info->flag_force) { > > + if (access(path, W_OK) == 0) > > + return TRUE; /* We have write permission */ > > + err_str = strerror(errno); > > + } else { > > + err_str = "File exists"; > > How about strerror(EEXIST)? It's better to avoid hard code to use the > same string as what libc returns. Yes, this solution is better. Here the updated patch: --- makedumpfile.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) --- a/makedumpfile.c +++ b/makedumpfile.c @@ -730,6 +730,24 @@ open_dump_file(void) } int +check_dump_file(const char *path) +{ + char *err_str; + + if (access(path, F_OK) != 0) + return TRUE; /* File does not exist */ + if (info->flag_force) { + if (access(path, W_OK) == 0) + return TRUE; /* We have write permission */ + err_str = strerror(errno); + } else { + err_str = strerror(EEXIST); + } + ERRMSG("Can't open the dump file (%s). %s\n", path, err_str); + return FALSE; +} + +int open_dump_bitmap(void) { int i, fd; @@ -8609,6 +8627,9 @@ main(int argc, char *argv[]) MSG("Try `makedumpfile --help' for more information.\n"); goto out; } + if (!check_dump_file(info->name_dumpfile)) + goto out; + if (!open_files_for_rearranging_dumpdata()) goto out; @@ -8626,9 +8647,11 @@ main(int argc, char *argv[]) MSG("Try `makedumpfile --help' for more information.\n"); goto out; } - if (!reassemble_dumpfile()) + if (!check_dump_file(info->name_dumpfile)) goto out; + if (!reassemble_dumpfile()) + goto out; MSG("\n"); MSG("The dumpfile is saved to %s.\n", info->name_dumpfile); } else if (info->flag_dmesg) { @@ -8637,6 +8660,8 @@ main(int argc, char *argv[]) MSG("Try `makedumpfile --help' for more information.\n"); goto out; } + if (!check_dump_file(info->name_dumpfile)) + goto out; if (!dump_dmesg()) goto out; @@ -8648,6 +8673,16 @@ main(int argc, char *argv[]) MSG("Try `makedumpfile --help' for more information.\n"); goto out; } + if (info->flag_split) { + for (i = 0; i < info->num_dumpfile; i++) { + if (!check_dump_file(SPLITTING_DUMPFILE(i))) + goto out; + } + } else { + if (!check_dump_file(info->name_dumpfile)) + goto out; + } + if (!create_dumpfile()) goto out;