summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2011-02-17 15:44:20 +0100
committerJiri Moskovcak <jmoskovc@redhat.com>2011-02-17 15:44:20 +0100
commit406b2cffd5e9120bea74ab01479039714ce9e2d5 (patch)
treed2bf7a52531a8b9071eeaa0c5ec0ab051bbe41ea /src/lib
parent502c13505f5306f1c167de786c4bd4cb759a228b (diff)
downloadabrt-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.am3
-rw-r--r--src/lib/steal_directory.c41
-rw-r--r--src/lib/steal_directory.h1
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);