Upstream-Status: Inappropriate [1]

[1] Not the author, the patch is from:
http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm

--- rdist-6.1.5/src/gram.y.bison	1998-11-10 05:10:42.000000000 +0100
+++ rdist-6.1.5/src/gram.y	2003-06-04 16:02:19.000000000 +0200
@@ -90,10 +90,10 @@
 	struct namelist        *namel;
 }
 
-%type <optval> OPTION, options
-%type <string> NAME, STRING
-%type <subcmd> INSTALL, NOTIFY, EXCEPT, PATTERN, SPECIAL, CMDSPECIAL, cmdlist, cmd
-%type <namel> namelist, names, opt_namelist nlist
+%type <optval> OPTION options
+%type <string> NAME STRING
+%type <subcmd> INSTALL NOTIFY EXCEPT PATTERN SPECIAL CMDSPECIAL cmdlist cmd
+%type <namel> namelist names opt_namelist nlist
 
 %%
 
@@ -101,19 +101,19 @@
 		| file command
 		;
 
-command:	  NAME '=' namelist = {
+command:	  NAME '=' namelist {
 			(void) lookup($1, INSERT, $3);
 		}
-		| namelist ARROW namelist cmdlist = {
+		| namelist ARROW namelist cmdlist {
 			insert((char *)NULL, $1, $3, $4);
 		}
-		| NAME COLON namelist ARROW namelist cmdlist = {
+		| NAME COLON namelist ARROW namelist cmdlist {
 			insert($1, $3, $5, $6);
 		}
-		| namelist DCOLON NAME cmdlist = {
+		| namelist DCOLON NAME cmdlist {
 			append((char *)NULL, $1, $3, $4);
 		}
-		| NAME COLON namelist DCOLON NAME cmdlist = {
+		| NAME COLON namelist DCOLON NAME cmdlist {
 			append($1, $3, $5, $6);
 		}
 		| error
@@ -133,10 +133,10 @@
 		}
 		;
 
-nlist:	  NAME = {
+nlist:	  NAME {
 			$$ = makenl($1);
 		}
-		| '(' names ')' = {
+		| '(' names ')' {
 			$$ = $2;
 		}
 		;
@@ -144,7 +144,7 @@
 names:		  /* VOID */ {
 			$$ = last_n = NULL;
 		}
-		| names NAME = {
+		| names NAME {
 			if (last_n == NULL)
 				$$ = last_n = makenl($2);
 			else {
@@ -158,7 +158,7 @@
 cmdlist:	  /* VOID */ {
 			$$ = last_sc = NULL;
 		}
-		| cmdlist cmd = {
+		| cmdlist cmd {
 			if (last_sc == NULL)
 				$$ = last_sc = $2;
 			else {
@@ -169,7 +169,7 @@
 		}
 		;
 
-cmd:		  INSTALL options opt_namelist ';' = {
+cmd:		  INSTALL options opt_namelist ';' {
 			register struct namelist *nl;
 
 			$1->sc_options = $2 | options;
@@ -185,17 +185,17 @@
 			}
 			$$ = $1;
 		}
-		| NOTIFY namelist ';' = {
+		| NOTIFY namelist ';' {
 			if ($2 != NULL)
 				$1->sc_args = expand($2, E_VARS);
 			$$ = $1;
 		}
-		| EXCEPT namelist ';' = {
+		| EXCEPT namelist ';' {
 			if ($2 != NULL)
 				$1->sc_args = expand($2, E_ALL);
 			$$ = $1;
 		}
-		| PATTERN namelist ';' = {
+		| PATTERN namelist ';' {
 			struct namelist *nl;
 			char *cp, *re_comp();
 
@@ -205,13 +205,13 @@
 			$1->sc_args = expand($2, E_VARS);
 			$$ = $1;
 		}
-		| SPECIAL opt_namelist STRING ';' = {
+		| SPECIAL opt_namelist STRING ';' {
 			if ($2 != NULL)
 				$1->sc_args = expand($2, E_ALL);
 			$1->sc_name = $3;
 			$$ = $1;
 		}
-		| CMDSPECIAL opt_namelist STRING ';' = {
+		| CMDSPECIAL opt_namelist STRING ';' {
 			if ($2 != NULL)
 				$1->sc_args = expand($2, E_ALL);
 			$1->sc_name = $3;
@@ -219,18 +219,18 @@
 		}
 		;
 
-options:	  /* VOID */ = {
+options:	  /* VOID */ {
 			$$ = 0;
 		}
-		| options OPTION = {
+		| options OPTION {
 			$$ |= $2;
 		}
 		;
 
-opt_namelist:	  /* VOID */ = {
+opt_namelist:	  /* VOID */ {
 			$$ = NULL;
 		}
-		| namelist = {
+		| namelist {
 			$$ = $1;
 		}
 		;
