fix a lot of things resultant of inadequate testing
This commit is contained in:
parent
537179902a
commit
c0c57b3ae8
32
src/lt.c
32
src/lt.c
|
@ -447,7 +447,6 @@ LT_BOOL LT_Assert(LT_BOOL assertion, const char *fmt, ...)
|
|||
|
||||
LT_SetGarbage(assertString);
|
||||
|
||||
free(ftString);
|
||||
free(asBuffer);
|
||||
}
|
||||
|
||||
|
@ -546,7 +545,7 @@ char *LT_ReadNumber()
|
|||
return LT_SetGarbage(LT_ReAlloc(str, i));
|
||||
}
|
||||
|
||||
char *LT_ReadString(char term)
|
||||
void LT_ReadString(LT_Token *tk, char term)
|
||||
{
|
||||
size_t i = 0, strBlocks = 1;
|
||||
char *str = LT_Alloc(TOKEN_STR_BLOCK_LENGTH);
|
||||
|
@ -563,10 +562,14 @@ char *LT_ReadString(char term)
|
|||
|
||||
if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal"))
|
||||
{
|
||||
char *emptyString = LT_Alloc(1);
|
||||
char *emptyString = LT_Alloc(2);
|
||||
emptyString[0] = '\0';
|
||||
emptyString[1] = '\0';
|
||||
|
||||
return LT_SetGarbage(emptyString);
|
||||
tk->string = LT_SetGarbage(emptyString);
|
||||
tk->strlen = 0;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if(c == '\\' && cfg.escapeChars)
|
||||
|
@ -575,8 +578,10 @@ char *LT_ReadString(char term)
|
|||
|
||||
if(LT_Assert(c == EOF || c == '\n', "LT_ReadString: Unterminated string literal"))
|
||||
{
|
||||
str[i] = '\0';
|
||||
return str;
|
||||
str[i++] = '\0';
|
||||
tk->strlen = (unsigned)i - 1;
|
||||
tk->string = LT_SetGarbage(LT_ReAlloc(str, i));
|
||||
return;
|
||||
}
|
||||
|
||||
if(i > (TOKEN_STR_BLOCK_LENGTH * strBlocks))
|
||||
|
@ -611,12 +616,16 @@ char *LT_ReadString(char term)
|
|||
}
|
||||
#endif
|
||||
|
||||
return LT_SetGarbage(LT_ReAlloc(str, i));
|
||||
tk->strlen = (unsigned)i - 1;
|
||||
tk->string = LT_SetGarbage(LT_ReAlloc(str, i));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
char *LT_Escaper(char *str, size_t pos, char escape)
|
||||
{
|
||||
unsigned i;
|
||||
LT_BOOL exitloop;
|
||||
|
||||
switch(escape)
|
||||
{
|
||||
|
@ -629,7 +638,9 @@ char *LT_Escaper(char *str, size_t pos, char escape)
|
|||
case 't': str[pos] = '\t'; break;
|
||||
case 'v': str[pos] = '\v'; break;
|
||||
case 'x': // [marrub] THIS ONE IS FUN
|
||||
for(i = 0;;)
|
||||
i = 0;
|
||||
exitloop = LT_FALSE;
|
||||
while(!exitloop)
|
||||
{
|
||||
int c = fgetc(parseFile);
|
||||
|
||||
|
@ -655,6 +666,7 @@ char *LT_Escaper(char *str, size_t pos, char escape)
|
|||
default:
|
||||
ungetc(c, parseFile);
|
||||
str[pos] = i;
|
||||
exitloop = LT_TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -941,7 +953,7 @@ LT_Token LT_GetToken()
|
|||
else if(c == cc)
|
||||
{
|
||||
tk.token = LT_TkNames[TOK_String];
|
||||
tk.string = LT_ReadString(c);
|
||||
LT_ReadString(&tk, c);
|
||||
return tk;
|
||||
}
|
||||
}
|
||||
|
@ -962,7 +974,7 @@ LT_Token LT_GetToken()
|
|||
else if(c == cc)
|
||||
{
|
||||
tk.token = LT_TkNames[TOK_Charac];
|
||||
tk.string = LT_ReadString(c);
|
||||
LT_ReadString(&tk, c);
|
||||
return tk;
|
||||
}
|
||||
}
|
||||
|
|
6
src/lt.h
6
src/lt.h
|
@ -108,6 +108,7 @@ typedef struct
|
|||
{
|
||||
const char *token;
|
||||
char *string;
|
||||
unsigned strlen;
|
||||
int pos;
|
||||
} LT_Token;
|
||||
|
||||
|
@ -128,7 +129,8 @@ typedef struct LT_GarbageList_s
|
|||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
LT_DLLEXPORT void LT_EXPORT LT_Init(LT_Config initCfg);
|
||||
|
@ -148,7 +150,7 @@ LT_DLLEXPORT void LT_EXPORT LT_SetPos(int newPos);
|
|||
LT_DLLEXPORT void LT_EXPORT LT_CloseFile(void);
|
||||
|
||||
LT_DLLEXPORT char *LT_EXPORT LT_ReadNumber(void);
|
||||
LT_DLLEXPORT char *LT_EXPORT LT_ReadString(char term);
|
||||
LT_DLLEXPORT void LT_EXPORT LT_ReadString(LT_Token *tk, char term);
|
||||
LT_DLLEXPORT char *LT_EXPORT LT_Escaper(char *str, size_t pos, char escape);
|
||||
LT_DLLEXPORT LT_Token LT_EXPORT LT_GetToken(void);
|
||||
LT_DLLEXPORT void LT_EXPORT LT_SkipWhite(void);
|
||||
|
|
Reference in New Issue
Block a user