Browse Source

fix the crap string block things

master
Marrub 5 years ago
parent
commit
dcb3534546
2 changed files with 16 additions and 10 deletions
  1. +15
    -9
      src/lt.c
  2. +1
    -1
      src/lt.h

+ 15
- 9
src/lt.c 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;
}


+ 1
- 1
src/lt.h 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.


Loading…
Cancel
Save