return &alloc->pkg;
}
+static int pkg_init_guid(struct upkg *pkg)
+{
+ size_t rc;
+
+ if (pkg->version < 68) {
+ unsigned long heritage_count, heritage_offset;
+ unsigned char buf[8];
+
+ rc = fread(buf, 1, sizeof buf, pkg->priv->f);
+ if (rc < 8)
+ return -1;
+
+ heritage_count = unpack_32_le(buf+0);
+ heritage_offset = unpack_32_le(buf+4);
+
+ if (heritage_count == 0)
+ return -1;
+ if (fseek(pkg->priv->f, heritage_offset, SEEK_SET) != 0)
+ return -1;
+ }
+
+ rc = fread(pkg->guid, 1, 16, pkg->priv->f);
+ if (rc < 16)
+ return -1;
+
+ return 0;
+}
+
static int pkg_init_names(struct upkg *pkg)
{
size_t rc, len, nbuf = 0;
}
pkg->priv->f = f;
+ if (pkg_init_guid(pkg) != 0) {
+ goto err2;
+ }
+
if (pkg_init_names(pkg) != 0) {
goto err2;
}
.pkg = pkg,
.base = pkg->priv->exports[idx].offset,
.len = pkg->priv->exports[idx].size,
+ .name = pkg->priv->exports[idx].name,
};
return f;