#include "link.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>

int link_kern(const Args* args, FileIter input_files)
{
    int res = 0;

    FILE* output_fp = fopen(args->output_file, "wb");
    if (!output_fp) {
        fprintf(stderr,
            "could not open output file '%s' for writing: %s\n",
            args->output_file,
            strerror(errno));
        goto leave_0;
    }

    FILE* input_fp = NULL;
    Header header = (Header) { 0 };

    const char* input_filename = file_iter_next(&input_files);
    while (input_filename != NULL) {
        input_fp = fopen(input_filename, "rb");
        if (!input_fp) {
            fprintf(stderr,
                "could not open input file '%s' for reading: %s\n",
                input_filename,
                strerror(errno));
            goto leave_1;
        }

        int read_res = header_read_from(&header, input_fp, input_filename);
        if (read_res != 0) {
            res = -1;
            goto leave_1;
        }
        header_print(&header);

        fclose(input_fp);
        input_fp = NULL;

        input_filename = file_iter_next(&input_files);
    }

    res = 0;
leave_1:
    if (input_fp)
        fclose(input_fp);
    if (header.header_size != 0)
        header_destroy(&header);
    fclose(output_fp);
leave_0:
    return res;
}