diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-07 15:35:35 +0100 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-02-07 15:35:35 +0100 |
commit | 6eb815b57676f75ed5205590409f384244b2580a (patch) | |
tree | 5a4017883ee428b230aa15d37ddf1cffd86975db /src | |
parent | 0f89077b0ab09644ddbe387b377aa785e0719b3c (diff) | |
download | abrt-6eb815b57676f75ed5205590409f384244b2580a.tar.gz abrt-6eb815b57676f75ed5205590409f384244b2580a.tar.xz abrt-6eb815b57676f75ed5205590409f384244b2580a.zip |
abrt-cli: delete half-copied dir on dir copy error
Also, make -d DIR to try deletion itself before resorting to abrtd
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/CLI.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/cli/CLI.cpp b/src/cli/CLI.cpp index 2ac63422..59c145f5 100644 --- a/src/cli/CLI.cpp +++ b/src/cli/CLI.cpp @@ -230,7 +230,8 @@ static struct dump_dir *steal_directory(const char *base_dir, const char *dump_d if (copy_file_recursive(dump_dir_name, dd_dst->dd_dir) < 0) { /* error. copy_file_recursive already emitted error message */ - dd_close(dd_dst); + /* Don't leave half-copied dir lying around */ + dd_delete(dd_dst); xfunc_die(); } @@ -453,6 +454,18 @@ int main(int argc, char** argv) } case OPT_DELETE: { + /* Try to delete it ourselves */ + struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY); + if (dd) + { + if (dd->locked) /* it is not readonly */ + { + dd_delete(dd); + break; + } + dd_close(dd); + } + /* Ask abrtd to do it for us */ exitcode = call_DeleteDebugDump(dump_dir_name); if (exitcode == ENOENT) error_msg_and_die("Crash '%s' not found", dump_dir_name); |