From b250513be0eb1c19b90bfc0d7805feb745eb06f7 Mon Sep 17 00:00:00 2001 From: fincs Date: Fri, 6 Mar 2015 21:16:00 +0100 Subject: [PATCH] Fix invalid string management [thanks to mtheall for pointing this out] --- source/picasso.h | 2 +- source/picasso_frontend.cpp | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/source/picasso.h b/source/picasso.h index 689346a..48c8e56 100644 --- a/source/picasso.h +++ b/source/picasso.h @@ -101,7 +101,7 @@ enum struct Uniform { - const char* name; + std::string name; int pos, size; int type; }; diff --git a/source/picasso_frontend.cpp b/source/picasso_frontend.cpp index 83c6dc6..e05bc75 100644 --- a/source/picasso_frontend.cpp +++ b/source/picasso_frontend.cpp @@ -161,7 +161,7 @@ int main(int argc, char* argv[]) for (int i = 0; i < g_uniformCount; i ++) { Uniform& u = g_uniformTable[i]; - size_t l = strlen(u.name)+1; + size_t l = u.name.length()+1; f.WriteWord(sp); sp += l; f.WriteHword(u.pos-0x10); f.WriteHword(u.pos+u.size-1-0x10); @@ -176,9 +176,9 @@ int main(int argc, char* argv[]) // Write symbols for (int i = 0; i < g_uniformCount; i ++) { - const char* u = g_uniformTable[i].name; - size_t l = strlen(u)+1; - f.WriteRaw(u, l); + std::string& u = g_uniformTable[i].name; + size_t l = u.length()+1; + f.WriteRaw(u.c_str(), l); } if (hFile) @@ -196,18 +196,19 @@ int main(int argc, char* argv[]) for (int i = 0; i < g_uniformCount; i ++) { Uniform& u = g_uniformTable[i]; + const char* name = u.name.c_str(); if (u.type == UTYPE_FVEC) - fprintf(f2, "#define %s_FVEC_%s 0x%02X\n", prefix, u.name, u.pos-0x20); + fprintf(f2, "#define %s_FVEC_%s 0x%02X\n", prefix, name, u.pos-0x20); else if (u.type == UTYPE_IVEC) - fprintf(f2, "#define %s_IVEC_%s 0x%02X\n", prefix, u.name, u.pos-0x80); + fprintf(f2, "#define %s_IVEC_%s 0x%02X\n", prefix, name, u.pos-0x80); else if (u.type == UTYPE_BOOL) { if (u.size == 1) - fprintf(f2, "#define %s_FLAG_%s BIT(%d)\n", prefix, u.name, u.pos-0x88); + fprintf(f2, "#define %s_FLAG_%s BIT(%d)\n", prefix, name, u.pos-0x88); else - fprintf(f2, "#define %s_FLAG_%s(_n) BIT(%d+(_n))\n", prefix, u.name, u.pos-0x88); + fprintf(f2, "#define %s_FLAG_%s(_n) BIT(%d+(_n))\n", prefix, name, u.pos-0x88); } - fprintf(f2, "#define %s_ULEN_%s %d\n", prefix, u.name, u.size); + fprintf(f2, "#define %s_ULEN_%s %d\n", prefix, name, u.size); } fclose(f2);