10 #define LBX_MAGIC 0x0000fead
22 struct lbx_state *lbx_fopen(FILE *f)
24 struct lbx_state *new = NULL;
25 uint16_t nfiles, version;
28 if (fread(&nfiles, sizeof nfiles, 1, f) != 1) goto readerr;
29 if (fread(&magic, sizeof magic, 1, f) != 1) goto readerr;
30 if (fread(&version, sizeof version, 1, f) != 1) goto readerr;
32 nfiles = letohs(nfiles);
33 magic = letohl(magic);
34 version = letohs(version);
36 if (magic != LBX_MAGIC) {
37 lbx_errno = LBX_EMAGIC;
41 new = malloc(sizeof *new + (nfiles+1)*(sizeof *new->offsets));
47 *new = (struct lbx_state){
52 if (fread(new->offsets, sizeof *new->offsets, nfiles+1, f) != nfiles+1)
67 struct lbx_state *lbx_open(const char *path)
69 struct lbx_state *new = NULL;
72 if ((f = fopen(path, "rb"))) {
81 size_t lbx_numfiles(struct lbx_state *lbx)
86 void lbx_close(struct lbx_state *lbx)
94 const char *lbx_strerror(void)
97 return strerror(-lbx_errno);
100 case LBX_ESUCCESS: return "Success";
101 case LBX_EMAGIC: return "Bad magic number";
102 case LBX_EEOF: return "Unexpected end-of-file";
105 return "Unknown error";