/* extract the dependencies string from a GObject Introspection 1.0 typelib file and print it on stdout */ #include #include #include #define G_IR_MAGIC "GOBJ\nMETADATA\r\n\032" int main(int argc, char ** argv) { FILE * typelib; char * magic; uint32_t deps_offset; char * deps; if (argc < 2) { fprintf(stderr, "too few arguments\n"); exit(1); } typelib = fopen(argv[1], "r"); if (typelib == NULL) { fprintf(stderr, "failed to open %s\n", argv[1]); exit(1); } magic = malloc(16); deps = malloc(8192); if ((magic == NULL) || (deps == NULL)) { fprintf(stderr, "failed to allocate memory\n"); exit(1); } if (fread(magic, 16, 1, typelib) < 1) { fprintf(stderr, "failed to read magic from typelib\n"); exit(1); } if (strcmp(magic, G_IR_MAGIC)) { fprintf(stderr, "magic mismatch, not a typelib?\n"); exit(1); } fseek(typelib, 36, SEEK_SET); if (fread(&deps_offset, 4, 1, typelib) < 1) { fprintf(stderr, "failed to read deps offset from typelib\n"); exit(1); } if (deps_offset > 0) { fseek(typelib, deps_offset, SEEK_SET); if (fscanf(typelib, "%8191s", deps) < 1) { fprintf(stderr, "failed to read deps from typelib\n"); exit(1); } printf("%s\n", deps); } free(deps); free(magic); fclose(typelib); return 0; }