static int open_output(Writer *w, const char* host) {
    _cleanup_free_ char *_output = NULL;
    const char *output;
    int r;

    switch (arg_split_mode) {
    case JOURNAL_WRITE_SPLIT_NONE:
        output = arg_output ?: REMOTE_JOURNAL_PATH "/remote.journal";
        break;

    case JOURNAL_WRITE_SPLIT_HOST: {
        _cleanup_free_ char *name;

        assert(host);

        name = filename_escape(host);
        if (!name)
            return log_oom();

        r = asprintf(&_output, "%s/remote-%s.journal",
                     arg_output ?: REMOTE_JOURNAL_PATH,
                     name);
        if (r < 0)
            return log_oom();

        output = _output;
        break;
    }

    default:
        assert_not_reached("what?");
    }

    r = journal_file_open_reliably(output,
                                   O_RDWR|O_CREAT, 0640,
                                   arg_compress, arg_seal,
                                   &w->metrics,
                                   w->mmap,
                                   NULL, &w->journal);
    if (r < 0)
        log_error_errno(r, "Failed to open output journal %s: %m",
                        output);
    else
        log_info("Opened output file %s", w->journal->path);
    return r;
}
示例#2
0
static int open_output(RemoteServer *s, Writer *w, const char* host) {
        _cleanup_free_ char *_filename = NULL;
        const char *filename;
        int r;

        switch (s->split_mode) {
        case JOURNAL_WRITE_SPLIT_NONE:
                filename = s->output;
                break;

        case JOURNAL_WRITE_SPLIT_HOST: {
                _cleanup_free_ char *name;

                assert(host);

                name = filename_escape(host);
                if (!name)
                        return log_oom();

                r = asprintf(&_filename, "%s/remote-%s.journal", s->output, name);
                if (r < 0)
                        return log_oom();

                filename = _filename;
                break;
        }

        default:
                assert_not_reached("what?");
        }

        r = journal_file_open_reliably(filename,
                                       O_RDWR|O_CREAT, 0640,
                                       s->compress, (uint64_t) -1, s->seal,
                                       &w->metrics,
                                       w->mmap, NULL,
                                       NULL, &w->journal);
        if (r < 0)
                return log_error_errno(r, "Failed to open output journal %s: %m", filename);

        log_debug("Opened output file %s", w->journal->path);
        return 0;
}