summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-09-01 16:47:40 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-09-01 16:47:40 +0000
commit9ec94ad3be472c678cf9c0745d778a4005d5bf17 (patch)
tree32402b0f290f6060fbc1f81a81a372f07673181f
parent45925c04c86f6bb1319053a256829a8c67885210 (diff)
mksymtab: Fix handling of final comma. Some C compilers can't handle them; Also add macro to provide the size of the symbol table
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@5077 7fd9a85b-ad96-42d3-883c-3090e2eb8679
-rw-r--r--nuttx/tools/mksymtab.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/nuttx/tools/mksymtab.c b/nuttx/tools/mksymtab.c
index 01404bc97a..c5a46a92be 100644
--- a/nuttx/tools/mksymtab.c
+++ b/nuttx/tools/mksymtab.c
@@ -51,6 +51,7 @@
****************************************************************************/
#define MAX_HEADER_FILES 500
+#define SYMTAB_NAME "g_symtab"
/****************************************************************************
* Private Types
@@ -118,7 +119,8 @@ int main(int argc, char **argv, char **envp)
{
char *csvpath;
char *symtab;
- char *terminator;
+ char *nextterm;
+ char *finalterm;
char *ptr;
bool cond;
FILE *instream;
@@ -231,12 +233,14 @@ int main(int argc, char **argv, char **envp)
/* Now the symbol table itself */
- fprintf(outstream, "\nstruct symtab_s g_symtab[] =\n");
+ fprintf(outstream, "\nstruct symtab_s %s[] =\n", SYMTAB_NAME);
fprintf(outstream, "{\n");
/* Parse each line in the CVS file */
- terminator = "";
+ nextterm = "";
+ finalterm = "";
+
while ((ptr = read_line(instream)) != NULL)
{
/* Parse the line from the CVS file */
@@ -253,24 +257,29 @@ int main(int argc, char **argv, char **envp)
cond = (g_parm[COND_INDEX] && strlen(g_parm[COND_INDEX]) > 0);
if (cond)
{
- fprintf(outstream, "%s#if %s\n", terminator, g_parm[COND_INDEX]);
- terminator = "";
+ fprintf(outstream, "%s#if %s\n", nextterm, g_parm[COND_INDEX]);
+ nextterm = "";
}
/* Output the symbol table entry */
fprintf(outstream, "%s { \"%s\", (FAR const void *)%s }",
- terminator, g_parm[NAME_INDEX], g_parm[NAME_INDEX]);
- terminator = ",\n";
+ nextterm, g_parm[NAME_INDEX], g_parm[NAME_INDEX]);
if (cond)
{
- fprintf(outstream, "%s#endif", terminator);
- terminator = "\n";
+ nextterm = ",\n#endif\n";
+ finalterm = "\n#endif\n";
+ }
+ else
+ {
+ nextterm = ",\n";
+ finalterm = "\n";
}
}
- fprintf(outstream, "\n};\n");
+ fprintf(outstream, "%s};\n\n", finalterm);
+ fprintf(outstream, "#define NSYMBOLS (sizeof(%s) / sizeof (struct symtab_s))\n", SYMTAB_NAME);
/* Close the CSV and symbol table files and exit */