Thomas's ematch fixes for lex.
Fix more GCC signedness warnings.
diff --git a/Makefile b/Makefile
index 6b1edaf..ac58cd9 100644
--- a/Makefile
+++ b/Makefile
@@ -31,17 +31,10 @@
 
 LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a
 
-all: flex_check Config
+all: Config
 	@for i in $(SUBDIRS); \
 	do $(MAKE) $(MFLAGS) -C $$i; done
 
-flex_check:
-	@if [ -z "`flex -h | grep '^Usage: flex '`" ]; then \
-		echo "GNU flex required, please install it."; \
-		echo " see http://lex.sourceforge.net"; \
-		exit 1; \
-	fi
-
 Config:
 	sh configure $(KERNEL_INCLUDE)
 
diff --git a/ip/ipneigh.c b/ip/ipneigh.c
index e8ab291..5346b8b 100644
--- a/ip/ipneigh.c
+++ b/ip/ipneigh.c
@@ -166,7 +166,7 @@
 	addattr_l(&req.n, sizeof(req), NDA_DST, &dst.data, dst.bytelen);
 
 	if (lla && strcmp(lla, "null")) {
-		__u8 llabuf[16];
+		char llabuf[16];
 		int l;
 
 		l = ll_addr_a2n(llabuf, sizeof(llabuf), lla);
diff --git a/ip/xfrm_state.c b/ip/xfrm_state.c
index 6757c74..c3a9114 100644
--- a/ip/xfrm_state.c
+++ b/ip/xfrm_state.c
@@ -140,7 +140,7 @@
 
 		for (i = - (plen % 2), j = 0; j < len; i += 2, j++) {
 			char vbuf[3];
-			char val;
+			__u8 val;
 
 			vbuf[0] = i >= 0 ? p[i] : '0';
 			vbuf[1] = p[i + 1];
diff --git a/misc/ifstat.c b/misc/ifstat.c
index 1379a81..4b87994 100644
--- a/misc/ifstat.c
+++ b/misc/ifstat.c
@@ -484,7 +484,7 @@
 
 void server_loop(int fd)
 {
-	struct timeval snaptime;
+	struct timeval snaptime = { 0 };
 	struct pollfd p;
 	p.fd = fd;
 	p.events = p.revents = POLLIN;
@@ -498,6 +498,7 @@
 		int status;
 		int tdiff;
 		struct timeval now;
+
 		gettimeofday(&now, NULL);
 		tdiff = T_DIFF(now, snaptime);
 		if (tdiff >= scan_interval) {
@@ -505,6 +506,7 @@
 			snaptime = now;
 			tdiff = 0;
 		}
+
 		if (poll(&p, 1, tdiff + scan_interval) > 0
 		    && (p.revents&POLLIN)) {
 			int clnt = accept(fd, NULL, NULL);
@@ -535,7 +537,8 @@
 int verify_forging(int fd)
 {
 	struct ucred cred;
-	int olen = sizeof(cred);
+	socklen_t olen = sizeof(cred);
+
 	if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, (void*)&cred, &olen) ||
 	    olen < sizeof(cred))
 		return -1;
diff --git a/misc/nstat.c b/misc/nstat.c
index f2887ec..fc4b03b 100644
--- a/misc/nstat.c
+++ b/misc/nstat.c
@@ -369,7 +369,7 @@
 
 void server_loop(int fd)
 {
-	struct timeval snaptime;
+	struct timeval snaptime = { 0 };
 	struct pollfd p;
 	p.fd = fd;
 	p.events = p.revents = POLLIN;
@@ -422,7 +422,8 @@
 int verify_forging(int fd)
 {
 	struct ucred cred;
-	int olen = sizeof(cred);
+	socklen_t olen = sizeof(cred);
+
 	if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, (void*)&cred, &olen) ||
 	    olen < sizeof(cred))
 		return -1;
diff --git a/misc/rtacct.c b/misc/rtacct.c
index 5c6748b..0d8ff7b 100644
--- a/misc/rtacct.c
+++ b/misc/rtacct.c
@@ -68,7 +68,7 @@
 
 	unsigned long long	val[256*4];
 	double			rate[256*4];
-	__u8			signature[128];
+	char			signature[128];
 };
 
 struct rtacct_data kern_db_static;
@@ -363,13 +363,15 @@
 
 void server_loop(int fd)
 {
-	struct timeval snaptime;
+	struct timeval snaptime = { 0 };
 	struct pollfd p;
 	p.fd = fd;
 	p.events = p.revents = POLLIN;
 
-	sprintf(kern_db->signature, "%d.%lu sampling_interval=%d time_const=%d",
-		getpid(), (unsigned long)random(), scan_interval/1000, time_constant/1000);
+	sprintf(kern_db->signature, 
+		"%u.%lu sampling_interval=%d time_const=%d",
+		(unsigned) getpid(), (unsigned long)random(), 
+		scan_interval/1000, time_constant/1000);
 
 	pad_kern_table(kern_db, read_kern_table(kern_db->ival));
 
@@ -411,7 +413,8 @@
 int verify_forging(int fd)
 {
 	struct ucred cred;
-	int olen = sizeof(cred);
+	socklen_t olen = sizeof(cred);
+
 	if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, (void*)&cred, &olen) ||
 	    olen < sizeof(cred))
 		return -1;
diff --git a/tc/emp_ematch.l b/tc/emp_ematch.l
index 80ab0da..70cdb9a 100644
--- a/tc/emp_ematch.l
+++ b/tc/emp_ematch.l
@@ -5,6 +5,8 @@
  extern int ematch_argc;
  extern char **ematch_argv;
 
+ #define yylval ematch_lval
+
  #define NEXT_EM_ARG() do { ematch_argc--; ematch_argv++; } while(0);
 
  #define YY_INPUT(buf, result, max_size)				\
@@ -37,27 +39,27 @@
 
 %x str
 
-%option 8bit stack warn bison-bridge noyywrap prefix="ematch_"
+%option 8bit stack warn noyywrap prefix="ematch_"
 %%
 
  static unsigned char *strbuf;
  static unsigned int strbuf_size;
  static unsigned int strbuf_index;
 
- static inline void strbuf_enlarge(void)
+ static void strbuf_enlarge(void)
  {
  	strbuf_size += 512;
  	strbuf = realloc(strbuf, strbuf_size);
  }
 
- static inline void strbuf_append_char(unsigned char c)
+ static void strbuf_append_char(unsigned char c)
  {
  	while (strbuf_index >= strbuf_size)
  		strbuf_enlarge();
  	strbuf[strbuf_index++] = c;
  }
 
- static inline void strbuf_append_charp(unsigned char *s)
+ static void strbuf_append_charp(unsigned char *s)
  {
  	while (strbuf_index >= strbuf_size)
  		strbuf_enlarge();
@@ -81,8 +83,8 @@
 
 <str>\"					{
 						BEGIN(INITIAL);
-						yylval->b = bstr_new(strbuf, strbuf_index);
-						yylval->b->quoted = 1;
+						yylval.b = bstr_new(strbuf, strbuf_index);
+						yylval.b->quoted = 1;
 						return ATTRIBUTE;
 					}
 
@@ -132,11 +134,11 @@
 [nN][oO][tT]				return NOT;
 "("					|
 ")"					{
-						return yylval->i = *yytext;
+						return yylval.i = *yytext;
 					}
 [^ \t\r\n()]+				{
-						yylval->b = bstr_alloc(yytext);
-						if (yylval->b == NULL)
+						yylval.b = bstr_alloc(yytext);
+						if (yylval.b == NULL)
 							return ERROR;
 						return ATTRIBUTE;
 					}
diff --git a/tc/emp_ematch.y b/tc/emp_ematch.y
index b4e4a3e..e8d1671 100644
--- a/tc/emp_ematch.y
+++ b/tc/emp_ematch.y
@@ -7,7 +7,6 @@
 %}
 
 %locations
-%pure_parser
 %token-table
 %error-verbose
 %name-prefix="ematch_"
@@ -19,7 +18,7 @@
 }
 
 %{
- extern int yylex(YYSTYPE *, YYLTYPE *);
+ extern int ematch_lex(void);
  extern void yyerror(char *s);
  extern struct ematch *ematch_root;
  extern char *ematch_err;
diff --git a/tc/m_ematch.h b/tc/m_ematch.h
index 67db751..ed98446 100644
--- a/tc/m_ematch.h
+++ b/tc/m_ematch.h
@@ -2,6 +2,8 @@
 #define __TC_EMATCH_H_
 
 #include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
 
 #include "utils.h"
 #include "tc_util.h"