X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fscenefile.c;h=92cdb1fefb464df045ef9ca45679c75c2a0f302a;hb=67b9bf8d28722bbc8c03c897c0a46d202286bd16;hp=dda0499c390416add38224f4fcfa324dd4dd075b;hpb=95e4bd8e387c3cb9fc325ae922052bf7bc7ae8ea;p=vrlugburz diff --git a/src/scenefile.c b/src/scenefile.c index dda0499..92cdb1f 100644 --- a/src/scenefile.c +++ b/src/scenefile.c @@ -61,6 +61,7 @@ int load_scenefile(struct scenefile *scn, const char *fname) char *sep; struct rbtree *rbtree = 0; + memset(scn, 0, sizeof *scn); varr_size = varr_max = narr_size = narr_max = tarr_size = tarr_max = 0; varr = narr = 0; @@ -73,8 +74,7 @@ int load_scenefile(struct scenefile *scn, const char *fname) if(!(rbtree = rb_create(cmp_facevert))) { fprintf(stderr, "load_scenefile: failed to create facevertex search tree\n"); - fclose(fp); - return -1; + goto fail; } rb_set_delete_func(rbtree, free_rbnode_key, 0); @@ -87,6 +87,14 @@ int load_scenefile(struct scenefile *scn, const char *fname) path_prefix = alloca(strlen(buf) + 1); strcpy(path_prefix, buf); + if(sep) { + sep = (char*)fname + (sep - buf); + } + if(!(scn->fname = strdup(sep ? sep + 1 : fname))) { + fprintf(stderr, "failed to allocate scenefile name buffer\n"); + goto fail; + } + if(!(mesh = malloc(sizeof *mesh))) { fprintf(stderr, "failed to allocate mesh\n"); fclose(fp); @@ -162,6 +170,7 @@ int load_scenefile(struct scenefile *scn, const char *fname) goto fail; } init_mesh(mesh); + mesh->name = strdup(cleanline(line + 2)); } break; @@ -199,12 +208,16 @@ int load_scenefile(struct scenefile *scn, const char *fname) } mesh = 0; - printf("load_scenefile: loaded %d meshes, %d vertices\n", scn->num_meshes, - varr_size); + printf("load_scenefile %s: loaded %d meshes, %d vertices\n", scn->fname, + scn->num_meshes, varr_size); res = 0; + if(0) { fail: + free(scn->fname); + } + fclose(fp); free(mesh); free(varr);