# HG changeset patch # User John Tsiombikas # Date 1380504381 -10800 # Node ID 4058337fbb927fe1b3a741ad3b400b6fba515cf3 # Parent 0fe02696fb1eaf0e849ee48e62f157f1ddc0fdaf texture filename cleanup when setting a texture to a material diff -r 0fe02696fb1e -r 4058337fbb92 src/goat3d.cc --- a/src/goat3d.cc Sun Sep 29 23:05:44 2013 +0300 +++ b/src/goat3d.cc Mon Sep 30 04:26:21 2013 +0300 @@ -1,9 +1,17 @@ #include #include +#include +#include #include "goat3d.h" #include "goat3d_impl.h" #include "log.h" +#ifndef _MSC_VER +#include +#else +#include +#endif + struct goat3d { Scene *scn; unsigned int flags; @@ -20,6 +28,8 @@ static long write_file(const void *buf, size_t bytes, void *uptr); static long seek_file(long offs, int whence, void *uptr); +static std::string clean_filename(const char *str); + extern "C" { struct goat3d *goat3d_create(void) @@ -197,7 +207,7 @@ void goat3d_set_mtl_attrib_map(struct goat3d_material *mtl, const char *attrib, const char *mapname) { - (*mtl)[attrib].map = std::string(mapname); + (*mtl)[attrib].map = clean_filename(mapname); } const char *goat3d_get_mtl_attrib_map(struct goat3d_material *mtl, const char *attrib) @@ -706,3 +716,23 @@ } return ftell((FILE*)uptr); } + +static std::string clean_filename(const char *str) +{ + const char *last_slash = strrchr(str, '/'); + if(!last_slash) { + last_slash = strrchr(str, '\\'); + } + + if(last_slash) { + str = last_slash + 1; + } + + char *buf = (char*)alloca(strlen(str) + 1); + char *dest = buf; + while(*str) { + char c = *str++; + *dest++ = tolower(c); + } + return buf; +}