Archived
1
0

fix the crap string block things

This commit is contained in:
Marrub 2015-08-27 09:14:32 -04:00
parent cdf32f3453
commit dcb3534546
2 changed files with 16 additions and 10 deletions

View File

@ -522,9 +522,9 @@ char *LT_ReadNumber()
break;
}
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str[i++] = c;
@ -586,18 +586,18 @@ void LT_ReadString(LT_Token *tk, char term)
return;
}
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str = LT_Escaper(str, i++, c);
}
else
{
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str[i++] = c;
@ -997,9 +997,9 @@ LT_Token LT_GetToken()
while(c != EOF && (isalnum(c) || c == '_'))
{
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str[i++] = c;
@ -1036,14 +1036,20 @@ LT_Token LT_GetToken()
char *LT_ReadLiteral()
{
size_t i = 0;
size_t strBlocks = 1;
int c;
char *str = LT_Alloc(4096);
char *str = LT_Alloc(TOKEN_STR_BLOCK_LENGTH);
while(LT_TRUE)
{
c = fgetc(parseFile);
if(c == '\r' || c == '\n' || c == EOF) break;
if(i >= (TOKEN_STR_BLOCK_LENGTH * strBlocks))
{
str = LT_ReAlloc(str, 1 + TOKEN_STR_BLOCK_LENGTH * ++strBlocks);
}
str[i++] = c;
}

View File

@ -36,7 +36,7 @@ THE SOFTWARE.
// [marrub] This can be changed if you have either a lot of very
// long strings, or a lot of very small strings, for optimization.
#define TOKEN_STR_BLOCK_LENGTH 128
#define TOKEN_STR_BLOCK_LENGTH 4096
// [marrub] When using in FFI, remove this from the declarations.
// Also make sure to redefine this if your platform is not supported.