aboutsummaryrefslogtreecommitdiff
path: root/nerv/lib/io/chunk_file.h
blob: 71f0d03ecbf7a677f54fed8950f12ee7ac104801 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef NERV_CHUNK_FILE_H
#define NERV_CHUNK_FILE_H
#include "../../common.h"
enum {
    CF_NORMAL,
    CF_INVALID_FORMAT,
    CF_END_OF_FILE,
    CF_SECTION_OVERFLOW,
    CF_WRITE_ERROR,
    CF_ERR_OPEN_FILE,
    CF_INVALID_OP,
    CF_READ,
    CF_WRITE,
    CF_CLOSED
};

typedef struct ChunkInfo {
    struct ChunkInfo *next;
    char *metadata;
    off_t offset, length;
} ChunkInfo;

typedef struct ChunkFile {
    FILE *fp;
    ChunkInfo *info;
    int status;
} ChunkFile;

typedef struct ChunkData {
    FILE *fp;
    char *data;
} ChunkData;

typedef void (*ChunkDataWriter_t)(void *);
ChunkFile *nerv_chunk_file_create(const char *fn, const char *mode, int *status);
int nerv_chunk_file_write_chunkdata(ChunkFile *cfp, const char *mdstr,
                                    ChunkDataWriter_t writer, void *writer_arg);
ChunkData *nerv_chunk_file_get_chunkdata(ChunkFile *cfp, ChunkInfo *cip, int *status);
void nerv_chunk_file_close(ChunkFile *cfp);
void nerv_chunk_file_destroy(ChunkFile *cfp);
void nerv_chunk_data_destroy(ChunkData *cdp);
const char *nerv_chunk_file_errstr(int status);
#endif