diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2005-10-26 09:08:01 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2005-10-26 09:08:01 +0000 |
| commit | 77484a4e2d9d3e8ab82855b2b3baf0bbe7e81ba5 (patch) | |
| tree | b36b9541b2f71af67625da5378f03c429aaea39c /fluid/code.cxx | |
| parent | cf296e05655e1282cbf5a9bc5bfdfd2f4480e662 (diff) | |
FLUID writes RGB and Bitmap image data as an array of decimal numbers instead of a string since "a certain compiler by a large operating system vendor which shall remain unnamed" can not handle long strings and produces heap overflows.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4607 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'fluid/code.cxx')
| -rw-r--r-- | fluid/code.cxx | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/fluid/code.cxx b/fluid/code.cxx index afbbfd586..d50f37fd9 100644 --- a/fluid/code.cxx +++ b/fluid/code.cxx @@ -226,6 +226,25 @@ void write_cstring(const char *w, int length) { // write a C string, quoting characters if necessary: void write_cstring(const char *w) {write_cstring(w,strlen(w));} +// write an array of C binary data (does not add a null): +void write_cdata(const char *s, int length) { + if (varused_test) return; + const unsigned char *w = (const unsigned char *)s; + const unsigned char *e = w+length; + int linelength = 1; + putc('{', code_file); + for (; w < e;) { + unsigned char c = *w++; + if (c>99) linelength += 4; + else if (c>9) linelength += 3; + else linelength += 2; + if (linelength >= 77) {fputs("\n",code_file); linelength = 0;} + fprintf(code_file, "%d", c); + if (w<e) putc(',', code_file); + } + putc('}', code_file); +} + void write_c(const char* format,...) { if (varused_test) {varused = 1; return;} va_list args; |
