summaryrefslogtreecommitdiff
path: root/src/import/import-tar.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-01-20 03:00:07 +0100
committerLennart Poettering <lennart@poettering.net>2015-01-20 15:06:58 +0100
commit0d6e763b48cabe8899a20823b015c9a988e38659 (patch)
tree960c84d9046c927e4b6801766d2283a879e5a68b /src/import/import-tar.c
parent56ebfaf1ca185a93ffb372b6e1a1fa3a957d93cd (diff)
import: port pull-raw to helper tools implemented for pull-tar
This allows us to reuse a lot more code, and simplify pull-raw drastically.
Diffstat (limited to 'src/import/import-tar.c')
-rw-r--r--src/import/import-tar.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/src/import/import-tar.c b/src/import/import-tar.c
index 43227f61f3..08839caae7 100644
--- a/src/import/import-tar.c
+++ b/src/import/import-tar.c
@@ -22,7 +22,6 @@
#include <sys/prctl.h>
#include <curl/curl.h>
-#include "hashmap.h"
#include "utf8.h"
#include "strv.h"
#include "copy.h"
@@ -46,8 +45,6 @@ struct TarImport {
TarImportFinished on_finished;
void *userdata;
- bool finished;
-
char *local;
bool force_local;
@@ -74,6 +71,7 @@ TarImport* tar_import_unref(TarImport *i) {
if (i->temp_path) {
(void) btrfs_subvol_remove(i->temp_path);
(void) rm_rf_dangerous(i->temp_path, false, true, false);
+ free(i->temp_path);
}
free(i->final_path);
@@ -124,6 +122,28 @@ int tar_import_new(TarImport **ret, sd_event *event, const char *image_root, Tar
return 0;
}
+static int tar_import_make_local_copy(TarImport *i) {
+ int r;
+
+ assert(i);
+ assert(i->tar_job);
+
+ if (!i->local)
+ return 0;
+
+ if (!i->final_path) {
+ r = import_make_path(i->tar_job->url, i->tar_job->etag, i->image_root, ".tar-", NULL, &i->final_path);
+ if (r < 0)
+ return log_oom();
+
+ r = import_make_local_copy(i->final_path, i->image_root, i->local, i->force_local);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
static void tar_import_job_on_finished(ImportJob *j) {
TarImport *i;
int r;
@@ -132,7 +152,6 @@ static void tar_import_job_on_finished(ImportJob *j) {
assert(j->userdata);
i = j->userdata;
-
if (j->error != 0) {
r = j->error;
goto finish;
@@ -160,25 +179,18 @@ static void tar_import_job_on_finished(ImportJob *j) {
r = log_error_errno(errno, "Failed to rename to final image name: %m");
goto finish;
}
- }
- if (i->local) {
- if (!i->final_path) {
- r = import_make_path(j->url, j->etag, i->image_root, ".tar-", NULL, &i->final_path);
- if (r < 0)
- goto finish;
- }
-
- r = import_make_local_copy(i->final_path, i->image_root, i->local, i->force_local);
- if (r < 0)
- goto finish;
+ free(i->temp_path);
+ i->temp_path = NULL;
}
+ r = tar_import_make_local_copy(i);
+ if (r < 0)
+ goto finish;
+
r = 0;
finish:
- i->finished = true;
-
if (i->on_finished)
i->on_finished(i, r, i->userdata);
else