X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=vrlugburz;a=blobdiff_plain;f=src%2Fscenefile.c;fp=src%2Fscenefile.c;h=8baf91aae482124c92d56d191daf40d0a61ffeee;hp=dda0499c390416add38224f4fcfa324dd4dd075b;hb=6066118fc6a58b379f52b9aaaf45200b136812b9;hpb=95e4bd8e387c3cb9fc325ae922052bf7bc7ae8ea diff --git a/src/scenefile.c b/src/scenefile.c index dda0499..8baf91a 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); @@ -199,12 +207,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);