fixed memory leaks

This commit is contained in:
2023-08-14 23:30:54 +02:00
parent 5d82ad37f7
commit fc6ef0f267
11 changed files with 106 additions and 85 deletions
+28 -26
View File
@@ -218,24 +218,24 @@ distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
distcleancheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print
ACLOCAL = ${SHELL} /home/ziggi/projects/jcomp/missing aclocal ACLOCAL = ${SHELL} /home/ziggi/Projects/jcomp/missing aclocal
AMTAR = $${TAR-tar} AMTAR = $${TAR-tar}
AM_DEFAULT_VERBOSITY = 1 AM_DEFAULT_VERBOSITY = 1
APP_CACHEDIR = /home/ziggi/projects/jcomp/cache APP_CACHEDIR = /home/ziggi/Projects/jcomp/cache
APP_CONFIGDIR = /home/ziggi/projects/jcomp/ APP_CONFIGDIR = /home/ziggi/Projects/jcomp/
APP_DATABASEDIR = /home/ziggi/projects/jcomp/data APP_DATABASEDIR = /home/ziggi/Projects/jcomp/data
APP_LIBDIR = /home/ziggi/projects/jcomp/lib APP_LIBDIR = /home/ziggi/Projects/jcomp/lib
APP_LOGDIR = /home/ziggi/projects/jcomp/log APP_LOGDIR = /home/ziggi/Projects/jcomp/log
APP_RUNDIR = /home/ziggi/projects/jcomp/run APP_RUNDIR = /home/ziggi/Projects/jcomp/run
APP_USER = ziggi APP_USER = ziggi
AUTOCONF = ${SHELL} /home/ziggi/projects/jcomp/missing autoconf AUTOCONF = ${SHELL} /home/ziggi/Projects/jcomp/missing autoconf
AUTOHEADER = ${SHELL} /home/ziggi/projects/jcomp/missing autoheader AUTOHEADER = ${SHELL} /home/ziggi/Projects/jcomp/missing autoheader
AUTOMAKE = ${SHELL} /home/ziggi/projects/jcomp/missing automake AUTOMAKE = ${SHELL} /home/ziggi/Projects/jcomp/missing automake
AWK = gawk AWK = gawk
CC = clang CC = clang
CCDEPMODE = depmode=none CCDEPMODE = depmode=none
CFLAGS = -g -O2 CFLAGS = -g -O2
CP = /bin/cp CP = /usr/local/bin/gcp
CPPFLAGS = CPPFLAGS =
CYGPATH_W = echo CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H DEFS = -DHAVE_CONFIG_H
@@ -254,7 +254,7 @@ LDFLAGS =
LIBOBJS = LIBOBJS =
LIBS = LIBS =
LTLIBOBJS = LTLIBOBJS =
MAKEINFO = ${SHELL} /home/ziggi/projects/jcomp/missing makeinfo MAKEINFO = ${SHELL} /home/ziggi/Projects/jcomp/missing makeinfo
MKDIR_P = /usr/local/bin/gmkdir -p MKDIR_P = /usr/local/bin/gmkdir -p
OBJEXT = o OBJEXT = o
PACKAGE = cworker PACKAGE = cworker
@@ -268,24 +268,25 @@ PATH_SEPARATOR = :
SET_MAKE = SET_MAKE =
SHELL = /bin/sh SHELL = /bin/sh
STRIP = STRIP =
VALGRIND = /usr/local/bin/valgrind
VERSION = 0.0.1 VERSION = 0.0.1
abs_builddir = /home/ziggi/projects/jcomp abs_builddir = /home/ziggi/Projects/jcomp
abs_srcdir = /home/ziggi/projects/jcomp abs_srcdir = /home/ziggi/Projects/jcomp
abs_top_builddir = /home/ziggi/projects/jcomp abs_top_builddir = /home/ziggi/Projects/jcomp
abs_top_srcdir = /home/ziggi/projects/jcomp abs_top_srcdir = /home/ziggi/Projects/jcomp
ac_ct_CC = clang ac_ct_CC = clang
am__include = include am__include = include
am__leading_dot = . am__leading_dot = .
am__quote = am__quote =
am__tar = $${TAR-tar} chof - "$$tardir" am__tar = $${TAR-tar} chof - "$$tardir"
am__untar = $${TAR-tar} xf - am__untar = $${TAR-tar} xf -
app_cachedir = /home/ziggi/projects/jcomp/cache app_cachedir = /home/ziggi/Projects/jcomp/cache
app_configdir = /home/ziggi/projects/jcomp/ app_configdir = /home/ziggi/Projects/jcomp/
app_databasedir = /home/ziggi/projects/jcomp/data app_databasedir = /home/ziggi/Projects/jcomp/data
app_libdir = /home/ziggi/projects/jcomp/lib app_libdir = /home/ziggi/Projects/jcomp/lib
app_logdir = /home/ziggi/projects/jcomp/log app_logdir = /home/ziggi/Projects/jcomp/log
app_name = cworker app_name = cworker
app_rundir = /home/ziggi/projects/jcomp/run app_rundir = /home/ziggi/Projects/jcomp/run
app_user = ziggi app_user = ziggi
bindir = ${exec_prefix}/bin bindir = ${exec_prefix}/bin
build = amd64-unknown-freebsd12.4 build = amd64-unknown-freebsd12.4
@@ -307,7 +308,7 @@ host_vendor = unknown
htmldir = ${docdir} htmldir = ${docdir}
includedir = ${prefix}/include includedir = ${prefix}/include
infodir = ${datarootdir}/info infodir = ${datarootdir}/info
install_sh = ${SHELL} /home/ziggi/projects/jcomp/install-sh install_sh = ${SHELL} /home/ziggi/Projects/jcomp/install-sh
libdir = ${exec_prefix}/lib libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale localedir = ${datarootdir}/locale
@@ -353,6 +354,7 @@ common_SOURCES = \
rcache.c \ rcache.c \
rcache.h rcache.h
#VALGRIND_OPT = --tool=memcheck
bin_TESTS = \ bin_TESTS = \
cflexer_test \ cflexer_test \
cfparser_test \ cfparser_test \
@@ -875,9 +877,9 @@ run: $(sbin_PROGRAMS)
test: $(bin_TESTS) test: $(bin_TESTS)
@for test in $(bin_TESTS); do \ @for test in $(bin_TESTS); do \
echo === Test $${test} ==; \ echo ======= Test $${test} ======; \
./$${test}; \ $(VALGRIND) $(VALGRIND_OPT) ./$${test}; \
echo === Done $${test} ==; \ echo ====== Done $${test} ======; \
done done
clean-local: clean-local:
+7 -3
View File
@@ -37,11 +37,15 @@ common_SOURCES = \
run: $(sbin_PROGRAMS) run: $(sbin_PROGRAMS)
./cworker ./cworker
if HAVE_VALGRIND
VALGRIND_OPT = --tool=memcheck
endif
test: $(bin_TESTS) test: $(bin_TESTS)
@for test in $(bin_TESTS); do \ @for test in $(bin_TESTS); do \
echo === Test $${test} ==; \ echo ======= Test $${test} ======; \
./$${test}; \ $(VALGRIND) $(VALGRIND_OPT) ./$${test}; \
echo === Done $${test} ==; \ echo ====== Done $${test} ======; \
done done
bin_TESTS = \ bin_TESTS = \
+5 -3
View File
@@ -268,6 +268,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VALGRIND = @VALGRIND@
VERSION = @VERSION@ VERSION = @VERSION@
abs_builddir = @abs_builddir@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@ abs_srcdir = @abs_srcdir@
@@ -353,6 +354,7 @@ common_SOURCES = \
rcache.c \ rcache.c \
rcache.h rcache.h
@HAVE_VALGRIND_TRUE@VALGRIND_OPT = --tool=memcheck
bin_TESTS = \ bin_TESTS = \
cflexer_test \ cflexer_test \
cfparser_test \ cfparser_test \
@@ -875,9 +877,9 @@ run: $(sbin_PROGRAMS)
test: $(bin_TESTS) test: $(bin_TESTS)
@for test in $(bin_TESTS); do \ @for test in $(bin_TESTS); do \
echo === Test $${test} ==; \ echo ======= Test $${test} ======; \
./$${test}; \ $(VALGRIND) $(VALGRIND_OPT) ./$${test}; \
echo === Done $${test} ==; \ echo ====== Done $${test} ======; \
done done
clean-local: clean-local:
+6 -5
View File
@@ -21,12 +21,11 @@ int main(void) {
MASSERT(fd > 0); MASSERT(fd > 0);
rcache_t cache; rcache_t cache;
rcache_init(&cache, fd);
cflexer_t lexer; cflexer_t lexer;
cflexer_init(&lexer, &cache);
cfparser_t parser; cfparser_t parser;
rcache_init(&cache, fd);
cflexer_init(&lexer, &cache);
cfparser_init(&parser, &lexer); cfparser_init(&parser, &lexer);
if (cfparser_parse(&parser)) { if (cfparser_parse(&parser)) {
@@ -35,12 +34,14 @@ int main(void) {
} }
int64_t id = 0; int64_t id = 0;
cfparser_bind(&parser, CFVALTYPE_INT, "id", (void *)&id);
char* name = ""; char* name = "";
cfparser_bind(&parser, CFVALTYPE_INT, "id", (void *)&id);
cfparser_bind(&parser, CFVALTYPE_STR, "name", (void *)&name); cfparser_bind(&parser, CFVALTYPE_STR, "name", (void *)&name);
cfparser_destroy(&parser); cfparser_destroy(&parser);
cflexer_destroy(&lexer); cflexer_destroy(&lexer);
rcache_destroy(&cache);
MASSERT(id == -123); MASSERT(id == -123);
MASSERT(strcmp(name, "qwerty\"567") == 0); MASSERT(strcmp(name, "qwerty\"567") == 0);
+5 -6
View File
@@ -20,19 +20,15 @@ int main(void) {
int argc = 3; int argc = 3;
cllexer_t lexer; cllexer_t lexer;
cllexer_init(&lexer);
clparser_t parser; clparser_t parser;
cllexer_init(&lexer);
clparser_init(&parser, &lexer); clparser_init(&parser, &lexer);
int id = 0; int id = 0;
clparser_bind(&parser, CLTYPE_INT, "id", (void *)&id);
char* name = ""; char* name = "";
clparser_bind(&parser, CLTYPE_INT, "id", (void *)&id);
clparser_bind(&parser, CLTYPE_STR, "name", (void *)&name); clparser_bind(&parser, CLTYPE_STR, "name", (void *)&name);
if (clparser_parse(&parser, &argv[1], argc - 1) < 0) { if (clparser_parse(&parser, &argv[1], argc - 1) < 0) {
@@ -45,5 +41,8 @@ int main(void) {
clparser_destroy(&parser); clparser_destroy(&parser);
cllexer_destroy(&lexer); cllexer_destroy(&lexer);
free(name);
return 0; return 0;
} }
+3 -3
View File
@@ -2,8 +2,8 @@
#ifndef CONFIG_H_QWER #ifndef CONFIG_H_QWER
#define CONFIG_H_QWER #define CONFIG_H_QWER
static const char *srv_runpath = "/home/ziggi/projects/jcomp/run/cworker.pid"; static const char *srv_runpath = "/home/ziggi/Projects/jcomp/run/cworker.pid";
static const char *srv_logpath = "/home/ziggi/projects/jcomp/log/cworker.log"; static const char *srv_logpath = "/home/ziggi/Projects/jcomp/log/cworker.log";
static const char *srv_configpath = "/home/ziggi/projects/jcomp//cworker.conf"; static const char *srv_configpath = "/home/ziggi/Projects/jcomp//cworker.conf";
#endif #endif
+29 -26
View File
@@ -430,7 +430,7 @@ Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it." gives unlimited permission to copy, distribute and modify it."
ac_pwd='/home/ziggi/projects/jcomp' ac_pwd='/home/ziggi/Projects/jcomp'
srcdir='.' srcdir='.'
INSTALL='/usr/bin/install -c' INSTALL='/usr/bin/install -c'
MKDIR_P='/usr/local/bin/gmkdir -p' MKDIR_P='/usr/local/bin/gmkdir -p'
@@ -612,27 +612,27 @@ S["am__EXEEXT_FALSE"]=""
S["am__EXEEXT_TRUE"]="#" S["am__EXEEXT_TRUE"]="#"
S["LTLIBOBJS"]="" S["LTLIBOBJS"]=""
S["app_name"]="cworker" S["app_name"]="cworker"
S["app_cachedir"]="/home/ziggi/projects/jcomp/cache" S["app_cachedir"]="/home/ziggi/Projects/jcomp/cache"
S["APP_CACHEDIR"]="/home/ziggi/projects/jcomp/cache" S["APP_CACHEDIR"]="/home/ziggi/Projects/jcomp/cache"
S["app_databasedir"]="/home/ziggi/projects/jcomp/data" S["app_databasedir"]="/home/ziggi/Projects/jcomp/data"
S["APP_DATABASEDIR"]="/home/ziggi/projects/jcomp/data" S["APP_DATABASEDIR"]="/home/ziggi/Projects/jcomp/data"
S["app_user"]="ziggi" S["app_user"]="ziggi"
S["APP_USER"]="ziggi" S["APP_USER"]="ziggi"
S["app_libdir"]="/home/ziggi/projects/jcomp/lib" S["app_libdir"]="/home/ziggi/Projects/jcomp/lib"
S["APP_LIBDIR"]="/home/ziggi/projects/jcomp/lib" S["APP_LIBDIR"]="/home/ziggi/Projects/jcomp/lib"
S["app_rundir"]="/home/ziggi/projects/jcomp/run" S["app_rundir"]="/home/ziggi/Projects/jcomp/run"
S["APP_RUNDIR"]="/home/ziggi/projects/jcomp/run" S["APP_RUNDIR"]="/home/ziggi/Projects/jcomp/run"
S["app_logdir"]="/home/ziggi/projects/jcomp/log" S["app_logdir"]="/home/ziggi/Projects/jcomp/log"
S["APP_LOGDIR"]="/home/ziggi/projects/jcomp/log" S["APP_LOGDIR"]="/home/ziggi/Projects/jcomp/log"
S["app_configdir"]="/home/ziggi/projects/jcomp/" S["app_configdir"]="/home/ziggi/Projects/jcomp/"
S["APP_CONFIGDIR"]="/home/ziggi/projects/jcomp/" S["APP_CONFIGDIR"]="/home/ziggi/Projects/jcomp/"
S["SYSTEMD_FALSE"]="" S["SYSTEMD_FALSE"]=""
S["SYSTEMD_TRUE"]="#" S["SYSTEMD_TRUE"]="#"
S["LINUX_OS_FALSE"]="" S["LINUX_OS_FALSE"]=""
S["LINUX_OS_TRUE"]="#" S["LINUX_OS_TRUE"]="#"
S["FREEBSD_OS_FALSE"]="#" S["FREEBSD_OS_FALSE"]="#"
S["FREEBSD_OS_TRUE"]="" S["FREEBSD_OS_TRUE"]=""
S["CP"]="/bin/cp" S["CP"]="/usr/local/bin/gcp"
S["HAVE_CP"]="true" S["HAVE_CP"]="true"
S["LIBOBJS"]="" S["LIBOBJS"]=""
S["host_os"]="freebsd12.4" S["host_os"]="freebsd12.4"
@@ -643,6 +643,9 @@ S["build_os"]="freebsd12.4"
S["build_vendor"]="unknown" S["build_vendor"]="unknown"
S["build_cpu"]="amd64" S["build_cpu"]="amd64"
S["build"]="amd64-unknown-freebsd12.4" S["build"]="amd64-unknown-freebsd12.4"
S["HAVE_VALGRIND_FALSE"]=""
S["HAVE_VALGRIND_TRUE"]="#"
S["VALGRIND"]="/usr/local/bin/valgrind"
S["am__fastdepCC_FALSE"]="" S["am__fastdepCC_FALSE"]=""
S["am__fastdepCC_TRUE"]="#" S["am__fastdepCC_TRUE"]="#"
S["CCDEPMODE"]="depmode=none" S["CCDEPMODE"]="depmode=none"
@@ -673,12 +676,12 @@ S["mkdir_p"]="$(MKDIR_P)"
S["MKDIR_P"]="/usr/local/bin/gmkdir -p" S["MKDIR_P"]="/usr/local/bin/gmkdir -p"
S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
S["STRIP"]="" S["STRIP"]=""
S["install_sh"]="${SHELL} /home/ziggi/projects/jcomp/install-sh" S["install_sh"]="${SHELL} /home/ziggi/Projects/jcomp/install-sh"
S["MAKEINFO"]="${SHELL} /home/ziggi/projects/jcomp/missing makeinfo" S["MAKEINFO"]="${SHELL} /home/ziggi/Projects/jcomp/missing makeinfo"
S["AUTOHEADER"]="${SHELL} /home/ziggi/projects/jcomp/missing autoheader" S["AUTOHEADER"]="${SHELL} /home/ziggi/Projects/jcomp/missing autoheader"
S["AUTOMAKE"]="${SHELL} /home/ziggi/projects/jcomp/missing automake" S["AUTOMAKE"]="${SHELL} /home/ziggi/Projects/jcomp/missing automake"
S["AUTOCONF"]="${SHELL} /home/ziggi/projects/jcomp/missing autoconf" S["AUTOCONF"]="${SHELL} /home/ziggi/Projects/jcomp/missing autoconf"
S["ACLOCAL"]="${SHELL} /home/ziggi/projects/jcomp/missing aclocal" S["ACLOCAL"]="${SHELL} /home/ziggi/Projects/jcomp/missing aclocal"
S["VERSION"]="0.0.1" S["VERSION"]="0.0.1"
S["PACKAGE"]="cworker" S["PACKAGE"]="cworker"
S["CYGPATH_W"]="echo" S["CYGPATH_W"]="echo"
@@ -810,13 +813,13 @@ D["HAVE_MEMSET"]=" 1"
D["HAVE_MKDIR"]=" 1" D["HAVE_MKDIR"]=" 1"
D["HAVE_SETLOCALE"]=" 1" D["HAVE_SETLOCALE"]=" 1"
D["HAVE_SOCKET"]=" 1" D["HAVE_SOCKET"]=" 1"
D["APP_CONFIGDIR"]=" \"/home/ziggi/projects/jcomp/\"" D["APP_CONFIGDIR"]=" \"/home/ziggi/Projects/jcomp/\""
D["APP_LOGDIR"]=" \"/home/ziggi/projects/jcomp/log\"" D["APP_LOGDIR"]=" \"/home/ziggi/Projects/jcomp/log\""
D["APP_RUNDIR"]=" \"/home/ziggi/projects/jcomp/run\"" D["APP_RUNDIR"]=" \"/home/ziggi/Projects/jcomp/run\""
D["APP_LIBDIR"]=" \"/home/ziggi/projects/jcomp/lib\"" D["APP_LIBDIR"]=" \"/home/ziggi/Projects/jcomp/lib\""
D["APP_USER"]=" \"ziggi\"" D["APP_USER"]=" \"ziggi\""
D["APP_DATABASEDIR"]=" \"/home/ziggi/projects/jcomp/data\"" D["APP_DATABASEDIR"]=" \"/home/ziggi/Projects/jcomp/data\""
D["APP_CACHEDIR"]=" \"/home/ziggi/projects/jcomp/cache\"" D["APP_CACHEDIR"]=" \"/home/ziggi/Projects/jcomp/cache\""
for (key in D) D_is_set[key] = 1 for (key in D) D_is_set[key] = 1
FS = "" FS = ""
} }
+6 -1
View File
@@ -19,6 +19,11 @@ AC_TYPE_PID_T
AC_TYPE_SSIZE_T AC_TYPE_SSIZE_T
AC_STRUCT_TIMEZONE AC_STRUCT_TIMEZONE
AC_PATH_PROG([VALGRIND],[valgrind true])
AM_CONDITIONAL(HAVE_VALGRIND, [test "x$VALGRIND" = "xvalgrind"])
# Checks for library functions. # Checks for library functions.
AC_FUNC_FORK AC_FUNC_FORK
AC_FUNC_MALLOC AC_FUNC_MALLOC
@@ -49,7 +54,7 @@ AC_CHECK_PROG(HAVE_CP, cp, true, false, /bin /usr/local/bin /usr/bin)
if test "x$HAVE_CP" = "xfalse"; then if test "x$HAVE_CP" = "xfalse"; then
AC_MSG_ERROR([Requested program cp not found]) AC_MSG_ERROR([Requested program cp not found])
fi fi
AC_PATH_PROG([CP],[cp cp]) AC_PATH_PROG([CP],[gcp cp])
AC_PROG_INSTALL AC_PROG_INSTALL
AC_CANONICAL_HOST AC_CANONICAL_HOST
+6 -6
View File
@@ -2,22 +2,22 @@
/* defines.h.in. Generated from configure.ac by autoheader. */ /* defines.h.in. Generated from configure.ac by autoheader. */
/* location of cache dir */ /* location of cache dir */
#define APP_CACHEDIR "/home/ziggi/projects/jcomp/cache" #define APP_CACHEDIR "/home/ziggi/Projects/jcomp/cache"
/* location of configuration files for ${PACKAGE} */ /* location of configuration files for ${PACKAGE} */
#define APP_CONFIGDIR "/home/ziggi/projects/jcomp/" #define APP_CONFIGDIR "/home/ziggi/Projects/jcomp/"
/* location of database dir */ /* location of database dir */
#define APP_DATABASEDIR "/home/ziggi/projects/jcomp/data" #define APP_DATABASEDIR "/home/ziggi/Projects/jcomp/data"
/* location of libs */ /* location of libs */
#define APP_LIBDIR "/home/ziggi/projects/jcomp/lib" #define APP_LIBDIR "/home/ziggi/Projects/jcomp/lib"
/* location of ${PACKAGE} logdir */ /* location of ${PACKAGE} logdir */
#define APP_LOGDIR "/home/ziggi/projects/jcomp/log" #define APP_LOGDIR "/home/ziggi/Projects/jcomp/log"
/* location of pid file */ /* location of pid file */
#define APP_RUNDIR "/home/ziggi/projects/jcomp/run" #define APP_RUNDIR "/home/ziggi/Projects/jcomp/run"
/* effective user */ /* effective user */
#define APP_USER "ziggi" #define APP_USER "ziggi"
+6
View File
@@ -99,6 +99,7 @@ int jparser_parse(jparser_t * parser) {
kv->type = JVALTYPE_STR; kv->type = JVALTYPE_STR;
kv->str = val; kv->str = val;
} }
free(key);
parser->kvalsize++; parser->kvalsize++;
pos++; pos++;
break; break;
@@ -140,5 +141,10 @@ int jparser_bind(jparser_t* parser, int type, char* key, void* ref) {
} }
void jparser_destroy(jparser_t * parser) { void jparser_destroy(jparser_t * parser) {
for (int i = 0; i < parser->kvalsize; i++) {
if (parser->kvalarr[i].type == JVALTYPE_STR) {
free(parser->kvalarr[i].str);
}
}
free(parser->kvalarr); free(parser->kvalarr);
} }
+5 -6
View File
@@ -22,16 +22,14 @@ int main(void) {
MASSERT(fd > 0); MASSERT(fd > 0);
rcache_t cache; rcache_t cache;
rcache_init(&cache, fd);
jlexer_t lexer; jlexer_t lexer;
jlexer_init(&lexer, &cache);
jparser_t parser; jparser_t parser;
rcache_init(&cache, fd);
jlexer_init(&lexer, &cache);
jparser_init(&parser, &lexer); jparser_init(&parser, &lexer);
if (jparser_parse(&parser) < 0) { if (jparser_parse(&parser) < 0) {
@@ -58,6 +56,7 @@ int main(void) {
jparser_destroy(&parser); jparser_destroy(&parser);
jlexer_destroy(&lexer); jlexer_destroy(&lexer);
rcache_destroy(&cache); rcache_destroy(&cache);
free(name);
return 0; return 0;
} }