- fix: added error detection for block removal error (error in one file influenced evaluation in following files)

This commit is contained in:
2017-03-06 14:47:34 +00:00
parent 57f349be10
commit 39e5ad42bb
3 changed files with 41 additions and 11 deletions

View File

@@ -45,6 +45,11 @@ STATIC regex_t regXproto;
STATIC regex_t regXprefix; STATIC regex_t regXprefix;
STATIC regex_t regXparameter; STATIC regex_t regXparameter;
// line evaluation related variables
STATIC uint32_t cfile_parser_removeCommentHelper = 0;
STATIC uint32_t cfile_parser_removeBraceHelper = 0;
STATIC char *cfile_parser_parameterStorage = NULL;
int8_t cfile_parser_init() int8_t cfile_parser_init()
{ {
if (0 > regcomp(&regX, FUNCTION_BASE, (REG_EXTENDED | REG_NEWLINE))) if (0 > regcomp(&regX, FUNCTION_BASE, (REG_EXTENDED | REG_NEWLINE)))
@@ -398,7 +403,6 @@ STATIC int8_t cBlockRemoval(char *aLine, const char *aBlockStart, const char *aB
*/ */
STATIC int8_t removeCcomments(char *aLine) STATIC int8_t removeCcomments(char *aLine)
{ {
static uint32_t helper = 0;
char *comment = NULL; char *comment = NULL;
if (NULL == aLine) if (NULL == aLine)
@@ -415,7 +419,7 @@ STATIC int8_t removeCcomments(char *aLine)
comment = NULL; comment = NULL;
} }
return cBlockRemoval(aLine, CPARS_COMMENT_BLOCK_START, CPARS_COMMENT_BLOCK_END, &helper, true); return cBlockRemoval(aLine, CPARS_COMMENT_BLOCK_START, CPARS_COMMENT_BLOCK_END, &cfile_parser_removeCommentHelper, true);
} }
STATIC int8_t evaluateParameter(char *aParameter, cfunction_t *aFunction) STATIC int8_t evaluateParameter(char *aParameter, cfunction_t *aFunction)
@@ -467,8 +471,6 @@ STATIC int8_t evaluateParameter(char *aParameter, cfunction_t *aFunction)
*/ */
STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine) STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
{ {
static char *parameterStorage = NULL;
static uint32_t braceHelper = 0;
const size_t maxGroup = CFILE_PARSER_MAX_REGEX_MATCHING_GROUPS; const size_t maxGroup = CFILE_PARSER_MAX_REGEX_MATCHING_GROUPS;
regmatch_t matchGroup[maxGroup]; regmatch_t matchGroup[maxGroup];
bool functionEnd = false; bool functionEnd = false;
@@ -478,7 +480,7 @@ STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
{ {
return NULL; return NULL;
} }
if (0 != cBlockRemoval(aLine, "{", "}", &braceHelper, false)) if (0 != cBlockRemoval(aLine, "{", "}", &cfile_parser_removeBraceHelper, false))
{ {
return NULL; return NULL;
} }
@@ -571,7 +573,7 @@ STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
xmallocStrlcpy(&cfile_parser_function->name, &aLine[matchGroup[2].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 2)); xmallocStrlcpy(&cfile_parser_function->name, &aLine[matchGroup[2].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 2));
if (XREGEX_IS_MATCHGROUP(matchGroup, 3)) if (XREGEX_IS_MATCHGROUP(matchGroup, 3))
{ {
xmallocStrlcat(&parameterStorage, &aLine[matchGroup[3].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 3)); xmallocStrlcat(&cfile_parser_parameterStorage, &aLine[matchGroup[3].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 3));
} }
break; break;
} }
@@ -579,7 +581,7 @@ STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
{ {
if (XREGEX_IS_MATCHGROUP(matchGroup, 1)) if (XREGEX_IS_MATCHGROUP(matchGroup, 1))
{ {
xmallocStrlcat(&parameterStorage, &aLine[matchGroup[1].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 1)); xmallocStrlcat(&cfile_parser_parameterStorage, &aLine[matchGroup[1].rm_so], XREGEX_SIZEOF_MATCHGROUP(matchGroup, 1));
} }
if (functionEnd) if (functionEnd)
{ {
@@ -601,9 +603,9 @@ STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
// return evaluated function // return evaluated function
if (0 == cfile_parser_functionLine) if (0 == cfile_parser_functionLine)
{ {
evaluateParameter(parameterStorage, cfile_parser_function); evaluateParameter(cfile_parser_parameterStorage, cfile_parser_function);
free(parameterStorage); free(cfile_parser_parameterStorage);
parameterStorage = NULL; cfile_parser_parameterStorage = NULL;
cfunction_t *funTemp = cfile_parser_function; cfunction_t *funTemp = cfile_parser_function;
cfile_parser_function = NULL; cfile_parser_function = NULL;
return funTemp; return funTemp;
@@ -648,5 +650,25 @@ int8_t cfile_parser(char *aPath, cfunction_list_t *aList)
free(fileLine); free(fileLine);
(void) fclose(fdesc); (void) fclose(fdesc);
// error detection for block removal
if (0 != cfile_parser_removeCommentHelper || 0 != cfile_parser_removeBraceHelper)
{
DEBUG_LOG_APPEND(1, "Helper (%d/%d) %s %s\n", cfile_parser_removeCommentHelper, cfile_parser_removeBraceHelper, gnu_basename(aPath),
cfile_parser_parameterStorage);
cfile_parser_removeCommentHelper = 0;
cfile_parser_removeBraceHelper = 0;
return -2;
}
// error detection for function parameter detection
if (NULL != cfile_parser_parameterStorage)
{
DEBUG_LOG_APPEND(1, "Function parameter not free: %s\n", cfile_parser_parameterStorage);
free(cfile_parser_parameterStorage);
cfile_parser_parameterStorage = NULL;
return -3;
}
return 0; return 0;
} }

View File

@@ -277,6 +277,14 @@ int stubser_createStub(char *path, char* aNoSuffix, char *aOutput)
if (0 != ret) if (0 != ret)
{ {
printf(STUB_CONSOLE_PARSE_ERROR_S2, gnu_basename(path), ret); printf(STUB_CONSOLE_PARSE_ERROR_S2, gnu_basename(path), ret);
if (-2 == ret)
{
printf(" Block removal error\n");
}
else if (-3 == ret)
{
printf(" Function parameter detection error\n");
}
ret = -1; ret = -1;
goto end_stubser_createStub; goto end_stubser_createStub;
} }