Пример #1
0
int tar_import_new(
                TarImport **ret,
                sd_event *event,
                const char *image_root,
                TarImportFinished on_finished,
                void *userdata) {

        _cleanup_(tar_import_unrefp) TarImport *i = NULL;
        int r;

        assert(ret);

        i = new0(TarImport, 1);
        if (!i)
                return -ENOMEM;

        i->input_fd = i->tar_fd = -1;
        i->on_finished = on_finished;
        i->userdata = userdata;

        RATELIMIT_INIT(i->progress_rate_limit, 100 * USEC_PER_MSEC, 1);
        i->last_percent = (unsigned) -1;

        i->image_root = strdup(image_root ?: "/var/lib/machines");
        if (!i->image_root)
                return -ENOMEM;

        i->grow_machine_directory = path_startswith(i->image_root, "/var/lib/machines");

        if (event)
                i->event = sd_event_ref(event);
        else {
                r = sd_event_default(&i->event);
                if (r < 0)
                        return r;
        }

        *ret = i;
        i = NULL;

        return 0;
}
Пример #2
0
int tar_export_new(
    TarExport **ret,
    sd_event *event,
    TarExportFinished on_finished,
    void *userdata) {

    _cleanup_(tar_export_unrefp) TarExport *e = NULL;
    int r;

    assert(ret);

    e = new0(TarExport, 1);
    if (!e)
        return -ENOMEM;

    e->output_fd = e->tar_fd = -1;
    e->on_finished = on_finished;
    e->userdata = userdata;
    e->quota_referenced = (uint64_t) -1;

    RATELIMIT_INIT(e->progress_rate_limit, 100 * USEC_PER_MSEC, 1);
    e->last_percent = (unsigned) -1;

    if (event)
        e->event = sd_event_ref(event);
    else {
        r = sd_event_default(&e->event);
        if (r < 0)
            return r;
    }

    *ret = e;
    e = NULL;

    return 0;
}