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;
}
printf("%sRequired\n", prefix);
}
+void print_guid(unsigned char guid[static 16])
+{
+ for (unsigned i = 0; i < 16; i++) {
+ printf("%02hhx", guid[i]);
+ if (i == 15)
+ putchar('\n');
+ else
+ putchar(' ');
+ }
+}
int main(int argc, char **argv)
{
printf("Version: %u\n", pkg->version);
printf("License: %u\n", pkg->license);
+ printf("GUID: ");
+ print_guid(pkg->guid);
printf("Flags: %lx\n", pkg->flags);
print_upkg_flags("\t", pkg->flags);
struct upkg {
unsigned version, license;
+ unsigned char guid[16];
unsigned long flags;
unsigned long name_count, export_count, import_count;