diff options
author | Ian Lynagh <igloo@earth.li> | 2010-05-05 19:19:21 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2010-05-05 19:19:21 +0000 |
commit | 52584954ef6bd07031adfce9dd4c3a5d564c878f (patch) | |
tree | df775c21e7dc839355a058db3c7be03f2ee6686b /utils | |
parent | 2f7dc066ab1812a945c1cd6bc7b9a3e3011432b8 (diff) | |
download | haskell-52584954ef6bd07031adfce9dd4c3a5d564c878f.tar.gz |
Fix hp2ps when the .hp file has large string literals
Diffstat (limited to 'utils')
-rw-r--r-- | utils/hp2ps/HpFile.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/utils/hp2ps/HpFile.c b/utils/hp2ps/HpFile.c index 9db94977df..1f2bf2d8d0 100644 --- a/utils/hp2ps/HpFile.c +++ b/utils/hp2ps/HpFile.c @@ -404,15 +404,24 @@ GetString(infp) FILE *infp; { unsigned int i; - char stringbuffer[5000]; + char *stringbuffer; + size_t stringbuffersize; ASSERT(ch == '\"'); + stringbuffersize = 5000; + stringbuffer = xmalloc(stringbuffersize); + ch = getc(infp); /* skip the '\"' that begins the string */ - for (i = 0; i < (sizeof stringbuffer)-1 && ch != '\"'; i++) { - stringbuffer[ i ] = ch; - ch = getc(infp); + i = 0; + while (ch != '\"') { + if (i == stringbuffersize - 1) { + stringbuffersize = 2 * stringbuffersize; + stringbuffer = xrealloc(stringbuffer, stringbuffersize); + } + stringbuffer[ i++ ] = ch; + ch = getc(infp); } stringbuffer[i] = '\0'; |