12 unsigned long name_offset, export_offset, import_offset;
13 unsigned char guid[16];
16 static struct upkg *init_upkg(unsigned char hdr[static UPKG_HDR_SIZE])
20 pkg = malloc(sizeof *pkg);
25 pkg->priv = malloc(sizeof *pkg->priv);
31 pkg->version = unpack_16_le(hdr+4);
32 pkg->license = unpack_16_le(hdr+6);
33 pkg->flags = unpack_32_le(hdr+8);
34 pkg->name_count = unpack_32_le(hdr+12);
35 pkg->export_count = unpack_32_le(hdr+20);
36 pkg->import_count = unpack_32_le(hdr+28);
38 pkg->priv->name_offset = unpack_32_le(hdr+16);
39 pkg->priv->export_offset = unpack_32_le(hdr+24);
40 pkg->priv->import_offset = unpack_32_le(hdr+32);
45 struct upkg *upkg_fopen(const char *path)
47 unsigned char hdr_buf[UPKG_HDR_SIZE];
51 if (!(f = fopen(path, "rb"))) {
54 if (fread(hdr_buf, sizeof hdr_buf, 1, f) != 1) {
57 if (unpack_32_le(hdr_buf) != UPKG_HDR_MAGIC) {
61 /* Initialize package structure. */
62 pkg = init_upkg(hdr_buf);
74 int upkg_close(struct upkg *pkg)
77 return fclose(pkg->priv->f);