summaryrefslogtreecommitdiff
path: root/utils/mcpu-archive.h
blob: dfe493c53ab1765e6cc77b4f1bc3edb36e0302ed (plain)
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
#ifndef __MCPU_ARCHIVE_H
#define __MCPU_ARCHIVE_H

#include <stddef.h>


typedef struct mcpu_archive_member
{
  char          *name;
  unsigned char *data;
  size_t         size;
  char         **symbols;
  size_t         symbol_count;
} mcpu_archive_member;


typedef struct mcpu_archive
{
  mcpu_archive_member *members;
  size_t                member_count;
  int                   had_symbol_index;
} mcpu_archive;


void mcpu_archive_init( mcpu_archive *archive );
void mcpu_archive_free( mcpu_archive *archive );
void mcpu_archive_member_free( mcpu_archive_member *member );

int mcpu_archive_read( const char *path, mcpu_archive *archive,
                       char *err, size_t errsz );
int mcpu_archive_write( const char *path, const mcpu_archive *archive,
                        int write_symbol_index, char *err, size_t errsz );

int mcpu_archive_member_load( const char *path, mcpu_archive_member *member,
                              char *err, size_t errsz );
int mcpu_archive_append( mcpu_archive *archive, mcpu_archive_member *member,
                         char *err, size_t errsz );

const char *mcpu_archive_basename( const char *path );

#endif