diff options
| author | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-02-17 15:44:20 +0100 |
|---|---|---|
| committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2011-02-17 15:44:20 +0100 |
| commit | 406b2cffd5e9120bea74ab01479039714ce9e2d5 (patch) | |
| tree | d2bf7a52531a8b9071eeaa0c5ec0ab051bbe41ea /src/lib | |
| parent | 502c13505f5306f1c167de786c4bd4cb759a228b (diff) | |
| download | abrt-406b2cffd5e9120bea74ab01479039714ce9e2d5.tar.gz abrt-406b2cffd5e9120bea74ab01479039714ce9e2d5.tar.xz abrt-406b2cffd5e9120bea74ab01479039714ce9e2d5.zip | |
move steal_directory() into libreport
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/Makefile.am | 3 | ||||
| -rw-r--r-- | src/lib/steal_directory.c | 41 | ||||
| -rw-r--r-- | src/lib/steal_directory.h | 1 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index aece0533..5879e2e3 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -41,7 +41,8 @@ libreport_la_SOURCES = \ abrt_types.c \ hooklib.c hooklib.h \ parse_release.c \ - parse_options.c parse_options.h + parse_options.c parse_options.h \ + steal_directory.c steal_directory.h libreport_la_CPPFLAGS = \ -Wall -Werror \ -I$(srcdir)/../include/report -I$(srcdir)/../include \ diff --git a/src/lib/steal_directory.c b/src/lib/steal_directory.c new file mode 100644 index 00000000..25b84272 --- /dev/null +++ b/src/lib/steal_directory.c @@ -0,0 +1,41 @@ +#include "abrtlib.h" + +struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name) +{ + const char *base_name = strrchr(dump_dir_name, '/'); + if (base_name) + base_name++; + else + base_name = dump_dir_name; + + struct dump_dir *dd_dst; + unsigned count = 100; + char *dst_dir_name = concat_path_file(base_dir, base_name); + while (1) + { + dd_dst = dd_create(dst_dir_name, (uid_t)-1); + free(dst_dir_name); + if (dd_dst) + break; + if (--count == 0) + { + error_msg("Can't create new dump dir in '%s'", base_dir); + goto ret; + } + struct timeval tv; + gettimeofday(&tv, NULL); + dst_dir_name = xasprintf("%s/%s.%u", base_dir, base_name, (int)tv.tv_usec); + } + + log("Creating copy in '%s'", dd_dst->dd_dir); + if (copy_file_recursive(dump_dir_name, dd_dst->dd_dir) < 0) + { + /* error. copy_file_recursive already emitted error message */ + /* Don't leave half-copied dir lying around */ + dd_delete(dd_dst); + xfunc_die(); + } + + ret: + return dd_dst; +} diff --git a/src/lib/steal_directory.h b/src/lib/steal_directory.h new file mode 100644 index 00000000..6b8e0620 --- /dev/null +++ b/src/lib/steal_directory.h @@ -0,0 +1 @@ +struct dump_dir *steal_directory(const char *base_dir, const char *dump_dir_name); |
