From e7e7f8ff9fc90cdd14c9c1e697537648b28758c6 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 16 Jul 2016 14:40:52 -0700 Subject: [PATCH] Convert bison. NOTE: This only has "C" linkage right now. --- configure.ac | 25 ++++++++++----------- include/ircd/logger.h | 2 +- include/ircd/modules.h | 4 ++-- include/ircd/newconf.h | 10 ++++----- include/ircd/s_conf.h | 8 +++---- ircd/.gitignore | 4 ++-- ircd/Makefile.am | 9 ++++---- ircd/ircd_lexer.l | 24 ++++++++------------ ircd/ircd_parser.y | 51 ++++++++++++++++++------------------------ ircd/s_conf.cc | 2 +- 10 files changed, 62 insertions(+), 77 deletions(-) diff --git a/configure.ac b/configure.ac index a0e034085..ffad236d1 100644 --- a/configure.ac +++ b/configure.ac @@ -26,6 +26,18 @@ AC_TYPE_UID_T AC_PROG_CXX AC_PROG_MAKE_SET AC_PROG_LIBTOOL + +AC_PROG_YACC +dnl AC_PROG_YACC defaults to yacc unconditionally if nothing can be found +if test "$YACC" = "yacc" -a -z "`which $YACC 2>/dev/null`"; then + AC_MSG_ERROR([could not locate a suitable parser generator; install bison, yacc, or byacc]) +fi + +AC_PROG_LEX +if test "$LEX" = ":"; then + AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.]) +fi + AC_PATH_PROG(AUTOMAKE, automake) AC_PATH_PROG(ACLOCAL, aclocal) AC_PATH_PROG(AUTOHEADER, autoheader) @@ -703,19 +715,6 @@ else AC_MSG_RESULT(no - using devnull.log) fi -AC_PROG_YACC - -dnl AC_PROG_YACC defaults to yacc unconditionally if nothing can be found -if test "$YACC" = "yacc" -a -z "`which $YACC 2>/dev/null`"; then - AC_MSG_ERROR([could not locate a suitable parser generator; install bison, yacc, or byacc]) -fi - -AC_PROG_LEX - -if test "$LEX" = ":"; then - AC_MSG_ERROR([could not locate a suitable lexical generator, install flex or lex.]) -fi - AC_ARG_ENABLE([fhs-paths], [AS_HELP_STRING([--enable-fhs-paths], [Use more FHS-like pathnames (for packagers).])], [], diff --git a/include/ircd/logger.h b/include/ircd/logger.h index 01d237f05..eb0b149dc 100644 --- a/include/ircd/logger.h +++ b/include/ircd/logger.h @@ -54,7 +54,7 @@ struct Client; extern void init_main_logfile(void); extern void open_logfiles(void); extern void close_logfiles(void); -extern void ilog(ilogfile dest, const char *fmt, ...) AFP(2, 3); +RB_EXTERN_C void ilog(ilogfile dest, const char *fmt, ...) AFP(2, 3); extern void idebug(const char *fmt, ...) AFP(1, 2); extern void inotice(const char *fmt, ...) AFP(1, 2); extern void iwarn(const char *fmt, ...) AFP(1, 2); diff --git a/include/ircd/modules.h b/include/ircd/modules.h index 0b37c8f6b..03472e1ab 100644 --- a/include/ircd/modules.h +++ b/include/ircd/modules.h @@ -189,9 +189,9 @@ extern void load_all_modules(bool warn); extern void load_core_modules(bool); extern bool unload_one_module(const char *, bool); -extern bool load_one_module(const char *, int, bool); +RB_EXTERN_C bool load_one_module(const char *, int, bool); extern bool load_a_module(const char *, bool, int, bool); -extern struct module *findmodule_byname(const char *); +RB_EXTERN_C struct module *findmodule_byname(const char *); extern void init_modules(void); extern rb_dlink_list module_list; diff --git a/include/ircd/newconf.h b/include/ircd/newconf.h index 2f18bfc71..7b735ec73 100644 --- a/include/ircd/newconf.h +++ b/include/ircd/newconf.h @@ -63,11 +63,11 @@ extern struct TopConf *conf_cur_block; extern char *current_file; int read_config(char *); -int conf_start_block(char *, char *); -int conf_end_block(struct TopConf *); -int conf_call_set(struct TopConf *, char *, conf_parm_t *); -void conf_report_error(const char *, ...); -void conf_report_warning(const char *, ...); +RB_EXTERN_C int conf_start_block(char *, char *); +RB_EXTERN_C int conf_end_block(struct TopConf *); +RB_EXTERN_C int conf_call_set(struct TopConf *, char *, conf_parm_t *); +RB_EXTERN_C void conf_report_error(const char *, ...); +RB_EXTERN_C void conf_report_warning(const char *, ...); void newconf_init(void); int add_conf_item(const char *topconf, const char *name, int type, void (*func) (void *)); int remove_conf_item(const char *topconf, const char *name); diff --git a/include/ircd/s_conf.h b/include/ircd/s_conf.h index 18df76910..7b9069e56 100644 --- a/include/ircd/s_conf.h +++ b/include/ircd/s_conf.h @@ -357,9 +357,9 @@ extern char *get_user_ban_reason(struct ConfItem *aconf); extern void get_printable_kline(struct Client *, struct ConfItem *, char **, char **, char **, char **); -extern void yyerror(const char *); -extern int conf_yy_fatal_error(const char *); -extern int conf_fgets(char *, int, FILE *); +RB_EXTERN_C void yyerror(const char *); +RB_EXTERN_C int conf_yy_fatal_error(const char *); +RB_EXTERN_C int conf_fgets(char *, int, FILE *); extern int valid_wild_card(const char *, const char *); extern void add_temp_kline(struct ConfItem *); @@ -379,8 +379,6 @@ extern void flush_expired_ips(void *); extern char *get_oper_name(struct Client *client_p); -extern int yylex(void); - extern unsigned long cidr_to_bitmask[]; extern char conffilebuf[BUFSIZE + 1]; diff --git a/ircd/.gitignore b/ircd/.gitignore index b384e3979..1b68fd56f 100644 --- a/ircd/.gitignore +++ b/ircd/.gitignore @@ -1,3 +1,3 @@ ircd_parser.h -ircd_parser.cc -ircd_lexer.cc +ircd_parser.c +ircd_lexer.c diff --git a/ircd/Makefile.am b/ircd/Makefile.am index 63a208ea5..95fc7c4e3 100644 --- a/ircd/Makefile.am +++ b/ircd/Makefile.am @@ -9,7 +9,8 @@ AM_LDFLAGS = -export-dynamic -avoid-version -no-undefined AM_LDFLAGS += -L$(top_srcdir)/rb AM_LDFLAGS += -L$(top_srcdir)/boost/lib -AM_YFLAGS = -d +AM_YFLAGS = -d # --language=c++ +AM_LFLAGS = # --c++ if MINGW EXTRA_FLAGS = -Wl,--enable-runtime-pseudo-reloc -export-symbols-regex '*' @@ -34,7 +35,7 @@ libircd_la_SOURCES = \ hostmask.cc \ ircd.cc \ ircd_parser.y \ - ircd_lexer.l \ + ircd_lexer.l \ ircd_signal.cc \ listener.cc \ logger.cc \ @@ -73,6 +74,6 @@ install-data-local: test -d $(prefix)/@logdir@ || mkdir -p $(prefix)/@logdir@ clean-local: - rm -f ircd_lexer.c ircd_lexer.cc - rm -f ircd_parser.c ircd_parser.cc + rm -f ircd_lexer.c + rm -f ircd_parser.c rm -f ircd_parser.h diff --git a/ircd/ircd_lexer.l b/ircd/ircd_lexer.l index 682d341aa..5fbeb6da6 100644 --- a/ircd/ircd_lexer.l +++ b/ircd/ircd_lexer.l @@ -22,25 +22,18 @@ %option nounput %{ -#include -#include - -#include -#include -#include - -#define WE_ARE_MEMORY_C +#define MAX_INCLUDE_DEPTH 10 #include -#include -#include +#include +#include #include - +#include +#include #include "ircd_parser.h" -int yylex(void); - -#define MAX_INCLUDE_DEPTH 10 +int yyparse(void); +void yyerror(const char *); YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr=0; @@ -142,10 +135,11 @@ loadmodule { return LOADMODULE; } <> { if (ieof()) yyterminate(); } %% + /* C-comment ignoring routine -kre*/ void ccomment() { - int c; +int c; /* log(L_NOTICE, "got comment"); */ while (1) diff --git a/ircd/ircd_parser.y b/ircd/ircd_parser.y index 6951e91c5..4d9a07b42 100644 --- a/ircd/ircd_parser.y +++ b/ircd/ircd_parser.y @@ -3,25 +3,18 @@ */ %{ -#include -#include +#define YY_NO_UNPUT -#include -#include -#include -#include -#define WE_ARE_MEMORY_C #include -#include #include #include #include +#include +#include +#include "ircd_parser.h" -#define YY_NO_UNPUT - -int yyparse(void); +int yylex(); void yyerror(const char *); -int yylex(void); static time_t conf_find_time(char*); @@ -112,45 +105,45 @@ static void free_cur_list(conf_parm_t* list) } -conf_parm_t * cur_list = NULL; +conf_parm_t * cur_list; -static void add_cur_list_cpt(conf_parm_t *new) +static void add_cur_list_cpt(conf_parm_t *new_) { if (cur_list == NULL) { - cur_list = rb_malloc(sizeof(conf_parm_t)); + cur_list = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); cur_list->type = CF_FLIST; - cur_list->v.list = new; + cur_list->v.list = new_; } else { - new->next = cur_list->v.list; - cur_list->v.list = new; + new_->next = cur_list->v.list; + cur_list->v.list = new_; } } static void add_cur_list(int type, char *str, int number) { - conf_parm_t *new; + conf_parm_t *new_; - new = rb_malloc(sizeof(conf_parm_t)); - new->next = NULL; - new->type = type; + new_ = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); + new_->next = NULL; + new_->type = type; switch(type) { case CF_INT: case CF_TIME: case CF_YESNO: - new->v.number = number; + new_->v.number = number; break; case CF_STRING: case CF_QSTRING: - new->v.string = rb_strdup(str); + new_->v.string = rb_strdup(str); break; } - add_cur_list_cpt(new); + add_cur_list_cpt(new_); } @@ -246,19 +239,19 @@ single: oneitem oneitem: qstring { - $$ = rb_malloc(sizeof(conf_parm_t)); + $$ = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); $$->type = CF_QSTRING; $$->v.string = rb_strdup($1); } | timespec { - $$ = rb_malloc(sizeof(conf_parm_t)); + $$ = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); $$->type = CF_TIME; $$->v.number = $1; } | number { - $$ = rb_malloc(sizeof(conf_parm_t)); + $$ = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); $$->type = CF_INT; $$->v.number = $1; } @@ -268,7 +261,7 @@ oneitem: qstring so pass it as that, if so */ int val = conf_get_yesno_value($1); - $$ = rb_malloc(sizeof(conf_parm_t)); + $$ = (conf_parm_t *)rb_malloc(sizeof(conf_parm_t)); if (val != -1) { diff --git a/ircd/s_conf.cc b/ircd/s_conf.cc index b1b07510e..c48a886ba 100644 --- a/ircd/s_conf.cc +++ b/ircd/s_conf.cc @@ -54,7 +54,7 @@ struct config_server_hide ConfigServerHide; -extern "C" int yyparse(void); /* defined in y.tab.c */ +RB_EXTERN_C int yyparse(void); extern char yy_linebuf[16384]; /* defined in ircd_lexer.l */ static rb_bh *confitem_heap = NULL;