- WIP (dynamic function structure implementation started; only function type at the moment; running)
This commit is contained in:
21
src/ext/xregex.h
Normal file
21
src/ext/xregex.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*!
|
||||||
|
* @file xregex.h
|
||||||
|
* @brief
|
||||||
|
* @details
|
||||||
|
* Project: \n
|
||||||
|
* Subsystem: \n
|
||||||
|
* Module: \n
|
||||||
|
* Code: GNU-C\n
|
||||||
|
*
|
||||||
|
* @date 01.03.2017
|
||||||
|
* @author SESA354004
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef EXT_XREGEX_H_
|
||||||
|
#define EXT_XREGEX_H_
|
||||||
|
|
||||||
|
#include <regex.h>
|
||||||
|
|
||||||
|
#define XREGEX_IS_MATCHGROUP(groupArray, groupIndex) (groupArray[groupIndex].rm_so < groupArray[groupIndex].rm_eo)
|
||||||
|
|
||||||
|
#endif /* EXT_XREGEX_H_ */
|
@@ -18,7 +18,7 @@
|
|||||||
#include "xstring.h"
|
#include "xstring.h"
|
||||||
#include "stubser/stubser_if.h"
|
#include "stubser/stubser_if.h"
|
||||||
|
|
||||||
static int one(const struct dirent *unused)
|
STATIC int one(const struct dirent *unused)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@@ -12,13 +12,17 @@
|
|||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <regex.h>
|
#include "xregex.h"
|
||||||
#include "xtypes.h"
|
#include "xtypes.h"
|
||||||
#include "xstring.h"
|
#include "xstring.h"
|
||||||
#include "cfile_parser_loc.h"
|
|
||||||
#include "cfunction_if.h"
|
#include "cfunction_if.h"
|
||||||
|
#include "cfile_parser_loc.h"
|
||||||
|
|
||||||
|
#define CFILE_PARSTER_MAX_REGEX_MATCHING_GROUPS 10
|
||||||
|
|
||||||
STATIC bool cfile_parser_initialized = false;
|
STATIC bool cfile_parser_initialized = false;
|
||||||
|
STATIC uint8_t cfile_parser_functionLine = 0;
|
||||||
|
STATIC cfunction_t *cfile_parser_function = NULL;
|
||||||
STATIC regex_t regX;
|
STATIC regex_t regX;
|
||||||
STATIC regex_t regXsl;
|
STATIC regex_t regXsl;
|
||||||
STATIC regex_t regXmlStart;
|
STATIC regex_t regXmlStart;
|
||||||
@@ -221,62 +225,76 @@ int8_t cfile_parser_init()
|
|||||||
//
|
//
|
||||||
// return 0;
|
// return 0;
|
||||||
//}
|
//}
|
||||||
STATIC void cfile_parser_evaluateLine(char *aLine)
|
STATIC cfunction_t* cfile_parser_evaluateLine(char *aLine)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
const size_t maxGroup = CFILE_PARSTER_MAX_REGEX_MATCHING_GROUPS;
|
||||||
const size_t maxGroup = 10;
|
|
||||||
regmatch_t matchGroup[maxGroup];
|
regmatch_t matchGroup[maxGroup];
|
||||||
|
bool functionEnd = false;
|
||||||
|
cfunction_type_t tempFunctionType = CFUNCTION_TYPE_UNDEF;
|
||||||
|
|
||||||
char match[1024] =
|
if (cfile_parser_functionLine)
|
||||||
{ 0 };
|
|
||||||
static uint8_t mlFlag = 0;
|
|
||||||
|
|
||||||
if (mlFlag)
|
|
||||||
{
|
{
|
||||||
if (0 == regexec(®XmlEnd, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
if (0 == regexec(®XmlEnd, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_REGULAR;
|
||||||
printf("[ mle]");
|
printf("[ mle]");
|
||||||
mlFlag = 0;
|
++cfile_parser_functionLine;
|
||||||
|
functionEnd = true;
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®XmlProto, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
else if (0 == regexec(®XmlProto, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_PROTO;
|
||||||
printf("[ mlp]");
|
printf("[ mlp]");
|
||||||
mlFlag = 0;
|
++cfile_parser_functionLine;
|
||||||
|
functionEnd = true;
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®XmlPar, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
else if (0 == regexec(®XmlPar, aLine, maxGroup, matchGroup, REG_NOTEOL))
|
||||||
{
|
{
|
||||||
printf("[ ml+]");
|
printf("[ ml+]");
|
||||||
++mlFlag;
|
++cfile_parser_functionLine;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// fallback
|
tempFunctionType = CFUNCTION_TYPE_UNDEF;
|
||||||
mlFlag = 0;
|
++cfile_parser_functionLine;
|
||||||
return;
|
functionEnd = true;
|
||||||
|
// TODO fallback (free currently used memory)
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®Xsl, aLine, maxGroup, matchGroup, REG_NOTEOL) && matchGroup[2].rm_so < matchGroup[2].rm_eo)
|
else if (0 == regexec(®Xsl, aLine, maxGroup, matchGroup, REG_NOTEOL) && CFILE_PARSER_IS_MATCHGROUP_FUNCTION(matchGroup))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_REGULAR;
|
||||||
printf("[ sl ]");
|
printf("[ sl ]");
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®XmlStart, aLine, maxGroup, matchGroup, REG_NOTEOL) && matchGroup[2].rm_so < matchGroup[2].rm_eo)
|
else if (0 == regexec(®XmlStart, aLine, maxGroup, matchGroup, REG_NOTEOL) && CFILE_PARSER_IS_MATCHGROUP_FUNCTION(matchGroup))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_REGULAR;
|
||||||
printf("[ mls]");
|
printf("[ mls]");
|
||||||
++mlFlag;
|
++cfile_parser_functionLine;
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®Xproto, aLine, maxGroup, matchGroup, REG_NOTEOL) && matchGroup[2].rm_so < matchGroup[2].rm_eo)
|
else if (0 == regexec(®Xproto, aLine, maxGroup, matchGroup, REG_NOTEOL) && CFILE_PARSER_IS_MATCHGROUP_FUNCTION(matchGroup))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_PROTO;
|
||||||
printf("[prot]");
|
printf("[prot]");
|
||||||
}
|
}
|
||||||
else if (0 == regexec(®X, aLine, maxGroup, matchGroup, REG_NOTEOL) && matchGroup[2].rm_so < matchGroup[2].rm_eo)
|
else if (0 == regexec(®X, aLine, maxGroup, matchGroup, REG_NOTEOL) && CFILE_PARSER_IS_MATCHGROUP_FUNCTION(matchGroup))
|
||||||
{
|
{
|
||||||
|
tempFunctionType = CFUNCTION_TYPE_UNDEF;
|
||||||
printf("[ fuX]");
|
printf("[ fuX]");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (0)
|
||||||
|
{
|
||||||
|
uint8_t i = 0;
|
||||||
|
char *tempChar = NULL;
|
||||||
|
char match[1024] =
|
||||||
|
{ 0};
|
||||||
|
|
||||||
for (i = 0; i < maxGroup && 0 <= matchGroup[i].rm_so; ++i)
|
for (i = 0; i < maxGroup && 0 <= matchGroup[i].rm_so; ++i)
|
||||||
{
|
{
|
||||||
if (matchGroup[i].rm_so < matchGroup[i].rm_eo)
|
if (matchGroup[i].rm_so < matchGroup[i].rm_eo)
|
||||||
@@ -284,12 +302,59 @@ STATIC void cfile_parser_evaluateLine(char *aLine)
|
|||||||
if (0 < i)
|
if (0 < i)
|
||||||
printf(" ");
|
printf(" ");
|
||||||
printf("[%02d](%.3ld - %.3ld)[%03d]: ", i, matchGroup[i].rm_so, matchGroup[i].rm_eo, (int) (matchGroup[i].rm_eo - matchGroup[i].rm_so));
|
printf("[%02d](%.3ld - %.3ld)[%03d]: ", i, matchGroup[i].rm_so, matchGroup[i].rm_eo, (int) (matchGroup[i].rm_eo - matchGroup[i].rm_so));
|
||||||
printf("%.*s", (int) (matchGroup[i].rm_eo - matchGroup[i].rm_so), &aLine[matchGroup[i].rm_so]);
|
//printf("%.*s", (int) (matchGroup[i].rm_eo - matchGroup[i].rm_so), &aLine[matchGroup[i].rm_so]);
|
||||||
strlcpy(match, &aLine[matchGroup[i].rm_so], (size_t) (matchGroup[i].rm_eo - matchGroup[i].rm_so + 1));
|
strlcpy(match, &aLine[matchGroup[i].rm_so], (size_t) (matchGroup[i].rm_eo - matchGroup[i].rm_so + 1));
|
||||||
|
tempChar = strstr(match, "//");
|
||||||
|
if (NULL != tempChar)
|
||||||
|
{
|
||||||
|
*tempChar = '\0';
|
||||||
|
}
|
||||||
|
printf("%s", match);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch (cfile_parser_functionLine)
|
||||||
|
{
|
||||||
|
case 0: // single line function definition
|
||||||
|
case 1: // first line of multi line function definition
|
||||||
|
{
|
||||||
|
cfile_parser_function = cfunction_newFunction();
|
||||||
|
cfile_parser_function->type = tempFunctionType;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: // further lines
|
||||||
|
{
|
||||||
|
// TODO process parameter
|
||||||
|
if (functionEnd)
|
||||||
|
{
|
||||||
|
// TODO clean function
|
||||||
|
if (CFUNCTION_TYPE_UNDEF == tempFunctionType)
|
||||||
|
{
|
||||||
|
cfunction_freeFunction(&cfile_parser_function);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cfile_parser_function->type = tempFunctionType;
|
||||||
|
}
|
||||||
|
cfile_parser_functionLine = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// return evaluated function
|
||||||
|
if (0 == cfile_parser_functionLine)
|
||||||
|
{
|
||||||
|
cfunction_t *funTemp = cfile_parser_function;
|
||||||
|
cfile_parser_function = NULL;
|
||||||
|
return funTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int8_t cfile_parser(char *aPath, cfunction_list_t *aList)
|
int8_t cfile_parser(char *aPath, cfunction_list_t *aList)
|
||||||
{
|
{
|
||||||
@@ -315,7 +380,12 @@ int8_t cfile_parser(char *aPath, cfunction_list_t *aList)
|
|||||||
charRead = getline(&fileLine, &lineSize, fdesc);
|
charRead = getline(&fileLine, &lineSize, fdesc);
|
||||||
if (0 <= charRead)
|
if (0 <= charRead)
|
||||||
{
|
{
|
||||||
(void) cfile_parser_evaluateLine(fileLine);
|
cfunction_t *function = NULL;
|
||||||
|
function = cfile_parser_evaluateLine(fileLine);
|
||||||
|
if (NULL != function)
|
||||||
|
{
|
||||||
|
(void) cfunction_addFunction(aList, function);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (0 <= charRead);
|
} while (0 <= charRead);
|
||||||
|
|
||||||
|
@@ -22,4 +22,6 @@
|
|||||||
#define FUNCTION_ML_PROTO FUNCTION_ML_PAR "\\).*[[:blank:]]*;"
|
#define FUNCTION_ML_PROTO FUNCTION_ML_PAR "\\).*[[:blank:]]*;"
|
||||||
#define FUNCTION_PROTO FUNCTION_BASE "\\).*[[:blank:]]*;"
|
#define FUNCTION_PROTO FUNCTION_BASE "\\).*[[:blank:]]*;"
|
||||||
|
|
||||||
|
#define CFILE_PARSER_IS_MATCHGROUP_FUNCTION(matchGroup) (XREGEX_IS_MATCHGROUP(matchGroup, 1) && XREGEX_IS_MATCHGROUP(matchGroup, 2))
|
||||||
|
|
||||||
#endif /* STUBSER_CFILE_PARSER_LOC_H_ */
|
#endif /* STUBSER_CFILE_PARSER_LOC_H_ */
|
||||||
|
@@ -16,32 +16,41 @@
|
|||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "cfunction_if.h"
|
#include "cfunction_if.h"
|
||||||
|
|
||||||
cfunction_t* cfunction_newFunction(cfunction_list_t *aList)
|
cfunction_t* cfunction_newFunction()
|
||||||
{
|
{
|
||||||
cfunction_t *next = NULL;
|
cfunction_t *new = NULL;
|
||||||
|
|
||||||
if (NULL == aList)
|
new = (cfunction_t*) xmalloc(sizeof(cfunction_t));
|
||||||
{
|
memset(new, 0, sizeof(cfunction_t));
|
||||||
perror("Null pointer");
|
|
||||||
return NULL;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
next = (cfunction_t*) xmalloc(sizeof(cfunction_t));
|
int8_t cfunction_addFunction(cfunction_list_t *aList, cfunction_t *aNew)
|
||||||
memset(next, 0, sizeof(cfunction_t));
|
{
|
||||||
|
if (NULL == aList || NULL == aNew)
|
||||||
|
{
|
||||||
|
perror("Null pointer");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == aList->head)
|
if (NULL == aList->head)
|
||||||
{
|
{
|
||||||
aList->head = next;
|
aList->head = aNew;
|
||||||
|
aList->current = aNew;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aList->current->next = aNew;
|
||||||
|
aList->current = aNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
aList->current = next;
|
return 0;
|
||||||
|
|
||||||
return next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cfunction_parameter_t* cfunction_newParameter(struct _CFUNCTION_PARAMETER_LIST_T *aList)
|
cfunction_parameter_t* cfunction_newParameter(struct _CFUNCTION_PARAMETER_LIST_T *aList)
|
||||||
{
|
{
|
||||||
cfunction_parameter_t *next = NULL;
|
cfunction_parameter_t *new = NULL;
|
||||||
|
|
||||||
if (NULL == aList)
|
if (NULL == aList)
|
||||||
{
|
{
|
||||||
@@ -49,17 +58,18 @@ cfunction_parameter_t* cfunction_newParameter(struct _CFUNCTION_PARAMETER_LIST_T
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
next = (cfunction_parameter_t*) xmalloc(sizeof(cfunction_parameter_t));
|
new = (cfunction_parameter_t*) xmalloc(sizeof(cfunction_parameter_t));
|
||||||
memset(next, 0, sizeof(cfunction_parameter_t));
|
memset(new, 0, sizeof(cfunction_parameter_t));
|
||||||
|
|
||||||
if (NULL == aList->head)
|
if (NULL == aList->head)
|
||||||
{
|
{
|
||||||
aList->head = next;
|
aList->head = new;
|
||||||
}
|
}
|
||||||
|
|
||||||
aList->current = next;
|
aList->current = new;
|
||||||
|
++aList->amount;
|
||||||
|
|
||||||
return next;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* cfunction_newDetail(char **aDest, char *aSource, size_t aSize)
|
char* cfunction_newDetail(char **aDest, char *aSource, size_t aSize)
|
||||||
@@ -79,7 +89,7 @@ char* cfunction_newDetail(char **aDest, char *aSource, size_t aSize)
|
|||||||
return *aDest;
|
return *aDest;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t cfunction_freeParameter(struct _CFUNCTION_PARAMETER_LIST_T *aParameter)
|
STATIC int8_t cfunction_freeParameter(struct _CFUNCTION_PARAMETER_LIST_T *aParameter)
|
||||||
{
|
{
|
||||||
cfunction_parameter_t *work = NULL;
|
cfunction_parameter_t *work = NULL;
|
||||||
cfunction_parameter_t *next = NULL;
|
cfunction_parameter_t *next = NULL;
|
||||||
@@ -107,6 +117,26 @@ int8_t cfunction_freeParameter(struct _CFUNCTION_PARAMETER_LIST_T *aParameter)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int8_t cfunction_freeFunction(cfunction_t **aFunction)
|
||||||
|
{
|
||||||
|
cfunction_t *work = *aFunction;
|
||||||
|
|
||||||
|
if (NULL == aFunction || NULL == *aFunction)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(work->prefix);
|
||||||
|
free(work->dataType);
|
||||||
|
free(work->name);
|
||||||
|
cfunction_freeParameter(&work->parameter);
|
||||||
|
free(work);
|
||||||
|
|
||||||
|
*aFunction = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int8_t cfunction_freeList(cfunction_list_t *aList)
|
int8_t cfunction_freeList(cfunction_list_t *aList)
|
||||||
{
|
{
|
||||||
cfunction_t *work = NULL;
|
cfunction_t *work = NULL;
|
||||||
@@ -123,11 +153,7 @@ int8_t cfunction_freeList(cfunction_list_t *aList)
|
|||||||
while (work)
|
while (work)
|
||||||
{
|
{
|
||||||
next = work->next;
|
next = work->next;
|
||||||
free(work->prefix);
|
cfunction_freeFunction(&work);
|
||||||
free(work->dataType);
|
|
||||||
free(work->name);
|
|
||||||
cfunction_freeParameter(&work->parameter);
|
|
||||||
free(work);
|
|
||||||
work = next;
|
work = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,3 +162,19 @@ int8_t cfunction_freeList(cfunction_list_t *aList)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cfunction_printList(cfunction_list_t *aList)
|
||||||
|
{
|
||||||
|
cfunction_t *work = aList->head;
|
||||||
|
|
||||||
|
if (NULL == aList)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (work)
|
||||||
|
{
|
||||||
|
printf("[ cfu]: %d\n", work->type);
|
||||||
|
work = work->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -14,6 +14,16 @@
|
|||||||
#ifndef STUBSER_CFUNCTION_IF_H_
|
#ifndef STUBSER_CFUNCTION_IF_H_
|
||||||
#define STUBSER_CFUNCTION_IF_H_
|
#define STUBSER_CFUNCTION_IF_H_
|
||||||
|
|
||||||
|
/*! @brief Type of function definition */
|
||||||
|
typedef enum _CFUNCTION_TYPE_T
|
||||||
|
{
|
||||||
|
CFUNCTION_TYPE_UNDEF = 0, /*!< @brief undefined */
|
||||||
|
CFUNCTION_TYPE_REGULAR = 1, /*!< @brief Regular c function definition */
|
||||||
|
CFUNCTION_TYPE_STATIC = 2, /*!< @brief Static c function definition */
|
||||||
|
CFUNCTION_TYPE_PROTO = 3, /*!< @brief Prototype c function definition */
|
||||||
|
CFUNCTION_TYPE_LAST_ENUM
|
||||||
|
} cfunction_type_t;
|
||||||
|
|
||||||
/*! @brief Parameter list node */
|
/*! @brief Parameter list node */
|
||||||
typedef struct _CFUNCTION_PARAMETER_T
|
typedef struct _CFUNCTION_PARAMETER_T
|
||||||
{
|
{
|
||||||
@@ -25,11 +35,13 @@ typedef struct _CFUNCTION_PARAMETER_T
|
|||||||
/*! @brief brief_description */
|
/*! @brief brief_description */
|
||||||
typedef struct _CFUNCTION_T
|
typedef struct _CFUNCTION_T
|
||||||
{
|
{
|
||||||
|
cfunction_type_t type;
|
||||||
char *prefix; /*!< @brief prefix like static or extern */
|
char *prefix; /*!< @brief prefix like static or extern */
|
||||||
char *dataType; /*!< @brief return type */
|
char *dataType; /*!< @brief return type */
|
||||||
char *name; /*!< @brief name */
|
char *name; /*!< @brief name */
|
||||||
struct _CFUNCTION_PARAMETER_LIST_T
|
struct _CFUNCTION_PARAMETER_LIST_T
|
||||||
{
|
{
|
||||||
|
uint8_t amount;
|
||||||
cfunction_parameter_t *head;
|
cfunction_parameter_t *head;
|
||||||
cfunction_parameter_t *current;
|
cfunction_parameter_t *current;
|
||||||
} parameter;/*!< @brief parameter array */
|
} parameter;/*!< @brief parameter array */
|
||||||
@@ -47,10 +59,12 @@ typedef struct _CFUNCTION_LIST_T
|
|||||||
.head = NULL, \
|
.head = NULL, \
|
||||||
.current = NULL }
|
.current = NULL }
|
||||||
|
|
||||||
cfunction_t* cfunction_newFunction(cfunction_list_t *aList);
|
cfunction_t* cfunction_newFunction();
|
||||||
|
int8_t cfunction_addFunction(cfunction_list_t *aList, cfunction_t *aNew);
|
||||||
cfunction_parameter_t* cfunction_newParameter(struct _CFUNCTION_PARAMETER_LIST_T *aList);
|
cfunction_parameter_t* cfunction_newParameter(struct _CFUNCTION_PARAMETER_LIST_T *aList);
|
||||||
char* cfunction_newDetail(char **aDest, char *aSource, size_t aSize);
|
char* cfunction_newDetail(char **aDest, char *aSource, size_t aSize);
|
||||||
int8_t cfunction_freeParameter(struct _CFUNCTION_PARAMETER_LIST_T *aParameter);
|
int8_t cfunction_freeFunction(cfunction_t **aFunction);
|
||||||
int8_t cfunction_freeList(cfunction_list_t *aList);
|
int8_t cfunction_freeList(cfunction_list_t *aList);
|
||||||
|
void cfunction_printList(cfunction_list_t *aList);
|
||||||
|
|
||||||
#endif /* STUBSER_CFUNCTION_IF_H_ */
|
#endif /* STUBSER_CFUNCTION_IF_H_ */
|
||||||
|
@@ -31,6 +31,9 @@ int stubser_createStub(char *path)
|
|||||||
cfunction_list_t functionList =
|
cfunction_list_t functionList =
|
||||||
CFUNCTION_LIST_DEFAULT;
|
CFUNCTION_LIST_DEFAULT;
|
||||||
(void) cfile_parser(path, &functionList);
|
(void) cfile_parser(path, &functionList);
|
||||||
|
|
||||||
|
cfunction_printList(&functionList);
|
||||||
|
|
||||||
cfunction_freeList(&functionList);
|
cfunction_freeList(&functionList);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user