Char cleanup in lex(1)

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Char cleanup in lex(1)

Michael McConville-2
When scanning for is*() function uses with signed chars, I found that
lex(1) uses an unecessary #define for unsigned char. The below diff
removes it and fixes an undefined is*() usage or two as well.


Index: ecs.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/ecs.c,v
retrieving revision 1.6
diff -u -p -r1.6 ecs.c
--- ecs.c 4 Jun 2003 17:34:44 -0000 1.6
+++ ecs.c 12 Oct 2015 14:13:36 -0000
@@ -107,9 +107,9 @@ int fwd[], bck[], num;
 /* mkeccl - update equivalence classes based on character class xtions
  *
  * synopsis
- *    Char ccls[];
+ *    unsigned char ccls[];
  *    int lenccl, fwd[llsiz], bck[llsiz], llsiz, NUL_mapping;
- *    void mkeccl( Char ccls[], int lenccl, int fwd[llsiz], int bck[llsiz],
+ *    void mkeccl( unsigned char ccls[], int lenccl, int fwd[llsiz], int bck[llsiz],
  * int llsiz, int NUL_mapping );
  *
  * ccls contains the elements of the character class, lenccl is the
@@ -120,7 +120,7 @@ int fwd[], bck[], num;
  */
 
 void mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping )
-Char ccls[];
+unsigned char ccls[];
 int lenccl, fwd[], bck[], llsiz, NUL_mapping;
  {
  int cclp, oldec, newec;
Index: flexdef.h
===================================================================
RCS file: /cvs/src/usr.bin/lex/flexdef.h,v
retrieving revision 1.8
diff -u -p -r1.8 flexdef.h
--- flexdef.h 10 Oct 2015 05:47:54 -0000 1.8
+++ flexdef.h 12 Oct 2015 14:13:36 -0000
@@ -81,7 +81,6 @@
 
 /* Always be prepared to generate an 8-bit scanner. */
 #define CSIZE 256
-#define Char unsigned char
 
 /* Size of input alphabet - should be size of ASCII set. */
 #ifndef DEFAULT_CSIZE
@@ -633,7 +632,7 @@ extern int end_of_buffer_state;
 
 extern int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
 extern int current_maxccls, current_max_ccl_tbl_size;
-extern Char *ccltbl;
+extern unsigned char *ccltbl;
 
 
 /* Variables for miscellaneous information:
@@ -701,10 +700,10 @@ void flex_free PROTO((void*));
  (char *) reallocate_array( (void *) array, size, sizeof( char ) )
 
 #define allocate_Character_array(size) \
- (Char *) allocate_array( size, sizeof( Char ) )
+ (unsigned char *) allocate_array( size, sizeof( unsigned char ) )
 
 #define reallocate_Character_array(array,size) \
- (Char *) reallocate_array( (void *) array, size, sizeof( Char ) )
+ (unsigned char *) reallocate_array( (void *) array, size, sizeof( unsigned char ) )
 
 
 /* Used to communicate between scanner and parser.  The type should really
@@ -755,7 +754,7 @@ extern void ccl2ecl PROTO((void));
 extern int cre8ecs PROTO((int[], int[], int));
 
 /* Update equivalence classes based on character class transitions. */
-extern void mkeccl PROTO((Char[], int, int[], int[], int, int));
+extern void mkeccl PROTO((unsigned char[], int, int[], int[], int, int));
 
 /* Create equivalence class for single character. */
 extern void mkechar PROTO((int, int[], int[]));
@@ -834,16 +833,16 @@ extern void bubble PROTO((int [], int));
 extern void check_char PROTO((int c));
 
 /* Replace upper-case letter to lower-case. */
-extern Char clower PROTO((int));
+extern unsigned char clower PROTO((int));
 
 /* Returns a dynamically allocated copy of a string. */
 extern char *copy_string PROTO((register const char *));
 
 /* Returns a dynamically allocated copy of a (potentially) unsigned string. */
-extern Char *copy_unsigned_string PROTO((register Char *));
+extern unsigned char *copy_unsigned_string PROTO((register unsigned char *));
 
 /* Shell sort a character array. */
-extern void cshell PROTO((Char [], int, int));
+extern void cshell PROTO((unsigned char[], int, int));
 
 /* Finish up a block of data declarations. */
 extern void dataend PROTO((void));
@@ -858,7 +857,7 @@ extern void flexerror PROTO((const char[
 extern void flexfatal PROTO((const char[]));
 
 /* Convert a hexadecimal digit string to an integer value. */
-extern int htoi PROTO((Char[]));
+extern int htoi PROTO((unsigned char[]));
 
 /* Report an error message formatted with one integer argument. */
 extern void lerrif PROTO((const char[], int));
@@ -886,10 +885,10 @@ extern void mkdata PROTO((int)); /* gene
 extern int myctoi PROTO((char []));
 
 /* Return character corresponding to escape sequence. */
-extern Char myesc PROTO((Char[]));
+extern unsigned char myesc PROTO((unsigned char[]));
 
 /* Convert an octal digit string to an integer value. */
-extern int otoi PROTO((Char [] ));
+extern int otoi PROTO((unsigned char[] ));
 
 /* Output a (possibly-formatted) string to the generated scanner. */
 extern void out PROTO((const char []));
@@ -1008,16 +1007,16 @@ extern int yywrap PROTO((void));
 extern int addsym PROTO((register char[], char*, int, hash_table, int));
 
 /* Save the text of a character class. */
-extern void cclinstal PROTO ((Char [], int));
+extern void cclinstal PROTO ((unsigned char[], int));
 
 /* Lookup the number associated with character class. */
-extern int ccllookup PROTO((Char []));
+extern int ccllookup PROTO((unsigned char[]));
 
 /* Find symbol in symbol table. */
 extern struct hash_entry *findsym PROTO((register char[], hash_table, int ));
 
-extern void ndinstal PROTO((char[], Char[])); /* install a name definition */
-extern Char *ndlookup PROTO((char[])); /* lookup a name definition */
+extern void ndinstal PROTO((char[], unsigned char[])); /* install a name definition */
+extern unsigned char *ndlookup PROTO((char[])); /* lookup a name definition */
 
 /* Increase maximum number of SC's. */
 extern void scextend PROTO((void));
Index: initscan.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/initscan.c,v
retrieving revision 1.14
diff -u -p -r1.14 initscan.c
--- initscan.c 4 Nov 2013 17:03:32 -0000 1.14
+++ initscan.c 12 Oct 2015 14:13:36 -0000
@@ -1498,7 +1498,7 @@ YY_DECL
 
  int doing_codeblock = false;
  int i;
- Char nmdef[MAXLINE], myesc();
+ unsigned char nmdef[MAXLINE], myesc();
 
 
 #line 1498 "scan.c"
@@ -2268,7 +2268,7 @@ YY_RULE_SETUP
  /* Check to see if we've already encountered this
  * ccl.
  */
- if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
+ if ( (cclval = ccllookup( (unsigned char *) nmstr )) != 0 )
  {
  if ( input() != ']' )
  synerr( _( "bad character class" ) );
@@ -2282,7 +2282,7 @@ YY_RULE_SETUP
  /* We fudge a bit.  We know that this ccl will
  * soon be numbered as lastccl + 1 by cclinit.
  */
- cclinstal( (Char *) nmstr, lastccl + 1 );
+ cclinstal( (unsigned char *) nmstr, lastccl + 1 );
 
  /* Push back everything but the leading bracket
  * so the ccl can be rescanned.
@@ -2298,8 +2298,8 @@ case 106:
 YY_RULE_SETUP
 #line 435 "scan.l"
 {
- Char *nmdefptr;
- Char *ndlookup();
+ unsigned char *nmdefptr;
+ unsigned char *ndlookup();
 
  strlcpy( nmstr, yytext + 1, sizeof nmstr );
  nmstr[yyleng - 2] = '\0';  /* chop trailing brace */
@@ -2711,7 +2711,7 @@ case 162:
 YY_RULE_SETUP
 #line 633 "scan.l"
 {
- yylval = myesc( (Char *) yytext );
+ yylval = myesc( (unsigned char *) yytext );
 
  if ( YY_START == FIRSTCCL )
  BEGIN(CCL);
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/main.c,v
retrieving revision 1.15
diff -u -p -r1.15 main.c
--- main.c 10 Oct 2015 05:47:54 -0000 1.15
+++ main.c 12 Oct 2015 14:13:36 -0000
@@ -94,7 +94,7 @@ int *accsiz, *dhash, numas;
 int numsnpairs, jambase, jamstate;
 int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
 int current_maxccls, current_max_ccl_tbl_size;
-Char *ccltbl;
+unsigned char *ccltbl;
 char nmstr[MAXLINE];
 int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
 int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
Index: misc.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/misc.c,v
retrieving revision 1.13
diff -u -p -r1.13 misc.c
--- misc.c 27 Oct 2013 18:31:24 -0000 1.13
+++ misc.c 12 Oct 2015 14:13:36 -0000
@@ -109,7 +109,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! islower( *str ) )
+ if ( ! isascii( (unsigned char)*str ) || ! islower( (unsigned char)*str ) )
  return 0;
  ++str;
  }
@@ -125,7 +125,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! isupper( *str ) )
+ if ( ! isascii( (unsigned char)*str ) || ! isupper( (unsigned char)*str ) )
  return 0;
  ++str;
  }
@@ -187,10 +187,10 @@ int c;
 
 /* clower - replace upper-case letter to lower-case */
 
-Char clower( c )
+unsigned char clower( c )
 int c;
  {
- return (Char) ((isascii( c ) && isupper( c )) ? tolower( c ) : c);
+ return (unsigned char) ((isascii( c ) && isupper( c )) ? tolower( c ) : c);
  }
 
 
@@ -225,11 +225,11 @@ const char *str;
  *    returns a dynamically allocated copy of a (potentially) unsigned string
  */
 
-Char *copy_unsigned_string( str )
-Char *str;
+unsigned char *copy_unsigned_string( str )
+unsigned char *str;
  {
- Char *c;
- Char *copy;
+ unsigned char *c;
+ unsigned char *copy;
 
  /* find length */
  for ( c = str; *c; ++c )
@@ -248,7 +248,7 @@ Char *str;
  *
  * synopsis
  *
- *   Char v[n];
+ *   unsigned char v[n];
  *   int n, special_case_0;
  *   cshell( v, n, special_case_0 );
  *
@@ -263,11 +263,11 @@ Char *str;
  */
 
 void cshell( v, n, special_case_0 )
-Char v[];
+unsigned char v[];
 int n, special_case_0;
  {
  int gap, i, j, jg;
- Char k;
+ unsigned char k;
 
  for ( gap = n / 2; gap > 0; gap = gap / 2 )
  for ( i = gap; i < n; ++i )
@@ -353,7 +353,7 @@ const char msg[];
 /* htoi - convert a hexadecimal digit string to an integer value */
 
 int htoi( str )
-Char str[];
+unsigned char str[];
  {
  unsigned int result;
 
@@ -535,10 +535,10 @@ char array[];
 
 /* myesc - return character corresponding to escape sequence */
 
-Char myesc( array )
-Char array[];
+unsigned char myesc( array )
+unsigned char array[];
  {
- Char c, esc_char;
+ unsigned char c, esc_char;
 
  switch ( array[1] )
  {
@@ -590,7 +590,7 @@ Char array[];
  int sptr = 2;
 
  while ( isascii( array[sptr] ) &&
- isxdigit( (char) array[sptr] ) )
+ isxdigit( array[sptr] ) )
  /* Don't increment inside loop control
  * because if isdigit() is a macro it might
  * expand into multiple increments ...
@@ -616,7 +616,7 @@ Char array[];
 /* otoi - convert an octal digit string to an integer value */
 
 int otoi( str )
-Char str[];
+unsigned char str[];
  {
  unsigned int result;
 
Index: scan.l
===================================================================
RCS file: /cvs/src/usr.bin/lex/scan.l,v
retrieving revision 1.9
diff -u -p -r1.9 scan.l
--- scan.l 6 Dec 2006 05:03:29 -0000 1.9
+++ scan.l 12 Oct 2015 14:13:36 -0000
@@ -105,7 +105,7 @@ LEXOPT [aceknopr]
 
  int doing_codeblock = false;
  int i;
- Char nmdef[MAXLINE], myesc();
+ unsigned char nmdef[MAXLINE], myesc();
 
 
 <INITIAL>{
@@ -414,7 +414,7 @@ LEXOPT [aceknopr]
  /* Check to see if we've already encountered this
  * ccl.
  */
- if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
+ if ( (cclval = ccllookup( (unsigned char *) nmstr )) != 0 )
  {
  if ( input() != ']' )
  synerr( _( "bad character class" ) );
@@ -428,7 +428,7 @@ LEXOPT [aceknopr]
  /* We fudge a bit.  We know that this ccl will
  * soon be numbered as lastccl + 1 by cclinit.
  */
- cclinstal( (Char *) nmstr, lastccl + 1 );
+ cclinstal( (unsigned char *) nmstr, lastccl + 1 );
 
  /* Push back everything but the leading bracket
  * so the ccl can be rescanned.
@@ -441,8 +441,8 @@ LEXOPT [aceknopr]
  }
 
  "{"{NAME}"}" {
- register Char *nmdefptr;
- Char *ndlookup();
+ register unsigned char *nmdefptr;
+ unsigned char *ndlookup();
 
  strlcpy( nmstr, yytext + 1, sizeof nmstr );
  nmstr[yyleng - 2] = '\0';  /* chop trailing brace */
@@ -639,7 +639,7 @@ LEXOPT [aceknopr]
 
 
 <SECT2,QUOTE,FIRSTCCL,CCL>{ESCSEQ} {
- yylval = myesc( (Char *) yytext );
+ yylval = myesc( (unsigned char *) yytext );
 
  if ( YY_START == FIRSTCCL )
  BEGIN(CCL);
Index: sym.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/sym.c,v
retrieving revision 1.6
diff -u -p -r1.6 sym.c
--- sym.c 4 Jun 2003 17:34:44 -0000 1.6
+++ sym.c 12 Oct 2015 14:13:36 -0000
@@ -106,13 +106,13 @@ int table_size;
 /* cclinstal - save the text of a character class */
 
 void cclinstal( ccltxt, cclnum )
-Char ccltxt[];
+unsigned char ccltxt[];
 int cclnum;
  {
  /* We don't bother checking the return status because we are not
  * called unless the symbol is new.
  */
- Char *copy_unsigned_string();
+ unsigned char *copy_unsigned_string();
 
  (void) addsym( (char *) copy_unsigned_string( ccltxt ),
  (char *) 0, cclnum,
@@ -126,7 +126,7 @@ int cclnum;
  */
 
 int ccllookup( ccltxt )
-Char ccltxt[];
+unsigned char ccltxt[];
  {
  return findsym( (char *) ccltxt, ccltab, CCL_HASH_SIZE )->int_val;
  }
@@ -184,10 +184,10 @@ int hash_size;
 
 void ndinstal( name, definition )
 char name[];
-Char definition[];
+unsigned char definition[];
  {
  char *copy_string();
- Char *copy_unsigned_string();
+ unsigned char *copy_unsigned_string();
 
  if ( addsym( copy_string( name ),
  (char *) copy_unsigned_string( definition ), 0,
@@ -201,10 +201,10 @@ Char definition[];
  * Returns a nil pointer if the name definition does not exist.
  */
 
-Char *ndlookup( nd )
+unsigned char *ndlookup( nd )
 char nd[];
  {
- return (Char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val;
+ return (unsigned char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val;
  }
 
 
Index: tblcmp.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/tblcmp.c,v
retrieving revision 1.6
diff -u -p -r1.6 tblcmp.c
--- tblcmp.c 4 Jun 2003 17:34:44 -0000 1.6
+++ tblcmp.c 12 Oct 2015 14:13:36 -0000
@@ -719,7 +719,7 @@ void mktemplate( state, statenum, comsta
 int state[], statenum, comstate;
  {
  int i, numdiff, tmpbase, tmp[CSIZE + 1];
- Char transset[CSIZE + 1];
+ unsigned char transset[CSIZE + 1];
  int tsptr;
 
  ++numtemps;

Reply | Threaded
Open this post in threaded view
|

Re: Char cleanup in lex(1)

Theo de Raadt
Our tree uses lex pretty much as-is from upstream, so this refactoring
isn't the way to go.

If you find an actual bug however.. fix them, using the established
practice.

> When scanning for is*() function uses with signed chars, I found that
> lex(1) uses an unecessary #define for unsigned char. The below diff
> removes it and fixes an undefined is*() usage or two as well.
>
>
> Index: ecs.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/ecs.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 ecs.c
> --- ecs.c 4 Jun 2003 17:34:44 -0000 1.6
> +++ ecs.c 12 Oct 2015 14:13:36 -0000
> @@ -107,9 +107,9 @@ int fwd[], bck[], num;
>  /* mkeccl - update equivalence classes based on character class xtions
>   *
>   * synopsis
> - *    Char ccls[];
> + *    unsigned char ccls[];
>   *    int lenccl, fwd[llsiz], bck[llsiz], llsiz, NUL_mapping;
> - *    void mkeccl( Char ccls[], int lenccl, int fwd[llsiz], int bck[llsiz],
> + *    void mkeccl( unsigned char ccls[], int lenccl, int fwd[llsiz], int bck[llsiz],
>   * int llsiz, int NUL_mapping );
>   *
>   * ccls contains the elements of the character class, lenccl is the
> @@ -120,7 +120,7 @@ int fwd[], bck[], num;
>   */
>  
>  void mkeccl( ccls, lenccl, fwd, bck, llsiz, NUL_mapping )
> -Char ccls[];
> +unsigned char ccls[];
>  int lenccl, fwd[], bck[], llsiz, NUL_mapping;
>   {
>   int cclp, oldec, newec;
> Index: flexdef.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/flexdef.h,v
> retrieving revision 1.8
> diff -u -p -r1.8 flexdef.h
> --- flexdef.h 10 Oct 2015 05:47:54 -0000 1.8
> +++ flexdef.h 12 Oct 2015 14:13:36 -0000
> @@ -81,7 +81,6 @@
>  
>  /* Always be prepared to generate an 8-bit scanner. */
>  #define CSIZE 256
> -#define Char unsigned char
>  
>  /* Size of input alphabet - should be size of ASCII set. */
>  #ifndef DEFAULT_CSIZE
> @@ -633,7 +632,7 @@ extern int end_of_buffer_state;
>  
>  extern int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
>  extern int current_maxccls, current_max_ccl_tbl_size;
> -extern Char *ccltbl;
> +extern unsigned char *ccltbl;
>  
>  
>  /* Variables for miscellaneous information:
> @@ -701,10 +700,10 @@ void flex_free PROTO((void*));
>   (char *) reallocate_array( (void *) array, size, sizeof( char ) )
>  
>  #define allocate_Character_array(size) \
> - (Char *) allocate_array( size, sizeof( Char ) )
> + (unsigned char *) allocate_array( size, sizeof( unsigned char ) )
>  
>  #define reallocate_Character_array(array,size) \
> - (Char *) reallocate_array( (void *) array, size, sizeof( Char ) )
> + (unsigned char *) reallocate_array( (void *) array, size, sizeof( unsigned char ) )
>  
>  
>  /* Used to communicate between scanner and parser.  The type should really
> @@ -755,7 +754,7 @@ extern void ccl2ecl PROTO((void));
>  extern int cre8ecs PROTO((int[], int[], int));
>  
>  /* Update equivalence classes based on character class transitions. */
> -extern void mkeccl PROTO((Char[], int, int[], int[], int, int));
> +extern void mkeccl PROTO((unsigned char[], int, int[], int[], int, int));
>  
>  /* Create equivalence class for single character. */
>  extern void mkechar PROTO((int, int[], int[]));
> @@ -834,16 +833,16 @@ extern void bubble PROTO((int [], int));
>  extern void check_char PROTO((int c));
>  
>  /* Replace upper-case letter to lower-case. */
> -extern Char clower PROTO((int));
> +extern unsigned char clower PROTO((int));
>  
>  /* Returns a dynamically allocated copy of a string. */
>  extern char *copy_string PROTO((register const char *));
>  
>  /* Returns a dynamically allocated copy of a (potentially) unsigned string. */
> -extern Char *copy_unsigned_string PROTO((register Char *));
> +extern unsigned char *copy_unsigned_string PROTO((register unsigned char *));
>  
>  /* Shell sort a character array. */
> -extern void cshell PROTO((Char [], int, int));
> +extern void cshell PROTO((unsigned char[], int, int));
>  
>  /* Finish up a block of data declarations. */
>  extern void dataend PROTO((void));
> @@ -858,7 +857,7 @@ extern void flexerror PROTO((const char[
>  extern void flexfatal PROTO((const char[]));
>  
>  /* Convert a hexadecimal digit string to an integer value. */
> -extern int htoi PROTO((Char[]));
> +extern int htoi PROTO((unsigned char[]));
>  
>  /* Report an error message formatted with one integer argument. */
>  extern void lerrif PROTO((const char[], int));
> @@ -886,10 +885,10 @@ extern void mkdata PROTO((int)); /* gene
>  extern int myctoi PROTO((char []));
>  
>  /* Return character corresponding to escape sequence. */
> -extern Char myesc PROTO((Char[]));
> +extern unsigned char myesc PROTO((unsigned char[]));
>  
>  /* Convert an octal digit string to an integer value. */
> -extern int otoi PROTO((Char [] ));
> +extern int otoi PROTO((unsigned char[] ));
>  
>  /* Output a (possibly-formatted) string to the generated scanner. */
>  extern void out PROTO((const char []));
> @@ -1008,16 +1007,16 @@ extern int yywrap PROTO((void));
>  extern int addsym PROTO((register char[], char*, int, hash_table, int));
>  
>  /* Save the text of a character class. */
> -extern void cclinstal PROTO ((Char [], int));
> +extern void cclinstal PROTO ((unsigned char[], int));
>  
>  /* Lookup the number associated with character class. */
> -extern int ccllookup PROTO((Char []));
> +extern int ccllookup PROTO((unsigned char[]));
>  
>  /* Find symbol in symbol table. */
>  extern struct hash_entry *findsym PROTO((register char[], hash_table, int ));
>  
> -extern void ndinstal PROTO((char[], Char[])); /* install a name definition */
> -extern Char *ndlookup PROTO((char[])); /* lookup a name definition */
> +extern void ndinstal PROTO((char[], unsigned char[])); /* install a name definition */
> +extern unsigned char *ndlookup PROTO((char[])); /* lookup a name definition */
>  
>  /* Increase maximum number of SC's. */
>  extern void scextend PROTO((void));
> Index: initscan.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/initscan.c,v
> retrieving revision 1.14
> diff -u -p -r1.14 initscan.c
> --- initscan.c 4 Nov 2013 17:03:32 -0000 1.14
> +++ initscan.c 12 Oct 2015 14:13:36 -0000
> @@ -1498,7 +1498,7 @@ YY_DECL
>  
>   int doing_codeblock = false;
>   int i;
> - Char nmdef[MAXLINE], myesc();
> + unsigned char nmdef[MAXLINE], myesc();
>  
>  
>  #line 1498 "scan.c"
> @@ -2268,7 +2268,7 @@ YY_RULE_SETUP
>   /* Check to see if we've already encountered this
>   * ccl.
>   */
> - if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
> + if ( (cclval = ccllookup( (unsigned char *) nmstr )) != 0 )
>   {
>   if ( input() != ']' )
>   synerr( _( "bad character class" ) );
> @@ -2282,7 +2282,7 @@ YY_RULE_SETUP
>   /* We fudge a bit.  We know that this ccl will
>   * soon be numbered as lastccl + 1 by cclinit.
>   */
> - cclinstal( (Char *) nmstr, lastccl + 1 );
> + cclinstal( (unsigned char *) nmstr, lastccl + 1 );
>  
>   /* Push back everything but the leading bracket
>   * so the ccl can be rescanned.
> @@ -2298,8 +2298,8 @@ case 106:
>  YY_RULE_SETUP
>  #line 435 "scan.l"
>  {
> - Char *nmdefptr;
> - Char *ndlookup();
> + unsigned char *nmdefptr;
> + unsigned char *ndlookup();
>  
>   strlcpy( nmstr, yytext + 1, sizeof nmstr );
>   nmstr[yyleng - 2] = '\0';  /* chop trailing brace */
> @@ -2711,7 +2711,7 @@ case 162:
>  YY_RULE_SETUP
>  #line 633 "scan.l"
>  {
> - yylval = myesc( (Char *) yytext );
> + yylval = myesc( (unsigned char *) yytext );
>  
>   if ( YY_START == FIRSTCCL )
>   BEGIN(CCL);
> Index: main.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/main.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 main.c
> --- main.c 10 Oct 2015 05:47:54 -0000 1.15
> +++ main.c 12 Oct 2015 14:13:36 -0000
> @@ -94,7 +94,7 @@ int *accsiz, *dhash, numas;
>  int numsnpairs, jambase, jamstate;
>  int lastccl, *cclmap, *ccllen, *cclng, cclreuse;
>  int current_maxccls, current_max_ccl_tbl_size;
> -Char *ccltbl;
> +unsigned char *ccltbl;
>  char nmstr[MAXLINE];
>  int sectnum, nummt, hshcol, dfaeql, numeps, eps2, num_reallocs;
>  int tmpuses, totnst, peakpairs, numuniq, numdup, hshsave;
> Index: misc.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/misc.c,v
> retrieving revision 1.13
> diff -u -p -r1.13 misc.c
> --- misc.c 27 Oct 2013 18:31:24 -0000 1.13
> +++ misc.c 12 Oct 2015 14:13:36 -0000
> @@ -109,7 +109,7 @@ char *str;
>   {
>   while ( *str )
>   {
> - if ( ! isascii( (Char) *str ) || ! islower( *str ) )
> + if ( ! isascii( (unsigned char)*str ) || ! islower( (unsigned char)*str ) )
>   return 0;
>   ++str;
>   }
> @@ -125,7 +125,7 @@ char *str;
>   {
>   while ( *str )
>   {
> - if ( ! isascii( (Char) *str ) || ! isupper( *str ) )
> + if ( ! isascii( (unsigned char)*str ) || ! isupper( (unsigned char)*str ) )
>   return 0;
>   ++str;
>   }
> @@ -187,10 +187,10 @@ int c;
>  
>  /* clower - replace upper-case letter to lower-case */
>  
> -Char clower( c )
> +unsigned char clower( c )
>  int c;
>   {
> - return (Char) ((isascii( c ) && isupper( c )) ? tolower( c ) : c);
> + return (unsigned char) ((isascii( c ) && isupper( c )) ? tolower( c ) : c);
>   }
>  
>  
> @@ -225,11 +225,11 @@ const char *str;
>   *    returns a dynamically allocated copy of a (potentially) unsigned string
>   */
>  
> -Char *copy_unsigned_string( str )
> -Char *str;
> +unsigned char *copy_unsigned_string( str )
> +unsigned char *str;
>   {
> - Char *c;
> - Char *copy;
> + unsigned char *c;
> + unsigned char *copy;
>  
>   /* find length */
>   for ( c = str; *c; ++c )
> @@ -248,7 +248,7 @@ Char *str;
>   *
>   * synopsis
>   *
> - *   Char v[n];
> + *   unsigned char v[n];
>   *   int n, special_case_0;
>   *   cshell( v, n, special_case_0 );
>   *
> @@ -263,11 +263,11 @@ Char *str;
>   */
>  
>  void cshell( v, n, special_case_0 )
> -Char v[];
> +unsigned char v[];
>  int n, special_case_0;
>   {
>   int gap, i, j, jg;
> - Char k;
> + unsigned char k;
>  
>   for ( gap = n / 2; gap > 0; gap = gap / 2 )
>   for ( i = gap; i < n; ++i )
> @@ -353,7 +353,7 @@ const char msg[];
>  /* htoi - convert a hexadecimal digit string to an integer value */
>  
>  int htoi( str )
> -Char str[];
> +unsigned char str[];
>   {
>   unsigned int result;
>  
> @@ -535,10 +535,10 @@ char array[];
>  
>  /* myesc - return character corresponding to escape sequence */
>  
> -Char myesc( array )
> -Char array[];
> +unsigned char myesc( array )
> +unsigned char array[];
>   {
> - Char c, esc_char;
> + unsigned char c, esc_char;
>  
>   switch ( array[1] )
>   {
> @@ -590,7 +590,7 @@ Char array[];
>   int sptr = 2;
>  
>   while ( isascii( array[sptr] ) &&
> - isxdigit( (char) array[sptr] ) )
> + isxdigit( array[sptr] ) )
>   /* Don't increment inside loop control
>   * because if isdigit() is a macro it might
>   * expand into multiple increments ...
> @@ -616,7 +616,7 @@ Char array[];
>  /* otoi - convert an octal digit string to an integer value */
>  
>  int otoi( str )
> -Char str[];
> +unsigned char str[];
>   {
>   unsigned int result;
>  
> Index: scan.l
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/scan.l,v
> retrieving revision 1.9
> diff -u -p -r1.9 scan.l
> --- scan.l 6 Dec 2006 05:03:29 -0000 1.9
> +++ scan.l 12 Oct 2015 14:13:36 -0000
> @@ -105,7 +105,7 @@ LEXOPT [aceknopr]
>  
>   int doing_codeblock = false;
>   int i;
> - Char nmdef[MAXLINE], myesc();
> + unsigned char nmdef[MAXLINE], myesc();
>  
>  
>  <INITIAL>{
> @@ -414,7 +414,7 @@ LEXOPT [aceknopr]
>   /* Check to see if we've already encountered this
>   * ccl.
>   */
> - if ( (cclval = ccllookup( (Char *) nmstr )) != 0 )
> + if ( (cclval = ccllookup( (unsigned char *) nmstr )) != 0 )
>   {
>   if ( input() != ']' )
>   synerr( _( "bad character class" ) );
> @@ -428,7 +428,7 @@ LEXOPT [aceknopr]
>   /* We fudge a bit.  We know that this ccl will
>   * soon be numbered as lastccl + 1 by cclinit.
>   */
> - cclinstal( (Char *) nmstr, lastccl + 1 );
> + cclinstal( (unsigned char *) nmstr, lastccl + 1 );
>  
>   /* Push back everything but the leading bracket
>   * so the ccl can be rescanned.
> @@ -441,8 +441,8 @@ LEXOPT [aceknopr]
>   }
>  
>   "{"{NAME}"}" {
> - register Char *nmdefptr;
> - Char *ndlookup();
> + register unsigned char *nmdefptr;
> + unsigned char *ndlookup();
>  
>   strlcpy( nmstr, yytext + 1, sizeof nmstr );
>   nmstr[yyleng - 2] = '\0';  /* chop trailing brace */
> @@ -639,7 +639,7 @@ LEXOPT [aceknopr]
>  
>  
>  <SECT2,QUOTE,FIRSTCCL,CCL>{ESCSEQ} {
> - yylval = myesc( (Char *) yytext );
> + yylval = myesc( (unsigned char *) yytext );
>  
>   if ( YY_START == FIRSTCCL )
>   BEGIN(CCL);
> Index: sym.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/sym.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 sym.c
> --- sym.c 4 Jun 2003 17:34:44 -0000 1.6
> +++ sym.c 12 Oct 2015 14:13:36 -0000
> @@ -106,13 +106,13 @@ int table_size;
>  /* cclinstal - save the text of a character class */
>  
>  void cclinstal( ccltxt, cclnum )
> -Char ccltxt[];
> +unsigned char ccltxt[];
>  int cclnum;
>   {
>   /* We don't bother checking the return status because we are not
>   * called unless the symbol is new.
>   */
> - Char *copy_unsigned_string();
> + unsigned char *copy_unsigned_string();
>  
>   (void) addsym( (char *) copy_unsigned_string( ccltxt ),
>   (char *) 0, cclnum,
> @@ -126,7 +126,7 @@ int cclnum;
>   */
>  
>  int ccllookup( ccltxt )
> -Char ccltxt[];
> +unsigned char ccltxt[];
>   {
>   return findsym( (char *) ccltxt, ccltab, CCL_HASH_SIZE )->int_val;
>   }
> @@ -184,10 +184,10 @@ int hash_size;
>  
>  void ndinstal( name, definition )
>  char name[];
> -Char definition[];
> +unsigned char definition[];
>   {
>   char *copy_string();
> - Char *copy_unsigned_string();
> + unsigned char *copy_unsigned_string();
>  
>   if ( addsym( copy_string( name ),
>   (char *) copy_unsigned_string( definition ), 0,
> @@ -201,10 +201,10 @@ Char definition[];
>   * Returns a nil pointer if the name definition does not exist.
>   */
>  
> -Char *ndlookup( nd )
> +unsigned char *ndlookup( nd )
>  char nd[];
>   {
> - return (Char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val;
> + return (unsigned char *) findsym( nd, ndtbl, NAME_TABLE_HASH_SIZE )->str_val;
>   }
>  
>  
> Index: tblcmp.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/lex/tblcmp.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 tblcmp.c
> --- tblcmp.c 4 Jun 2003 17:34:44 -0000 1.6
> +++ tblcmp.c 12 Oct 2015 14:13:36 -0000
> @@ -719,7 +719,7 @@ void mktemplate( state, statenum, comsta
>  int state[], statenum, comstate;
>   {
>   int i, numdiff, tmpbase, tmp[CSIZE + 1];
> - Char transset[CSIZE + 1];
> + unsigned char transset[CSIZE + 1];
>   int tsptr;
>  
>   ++numtemps;
>

Reply | Threaded
Open this post in threaded view
|

Re: Char cleanup in lex(1)

Michael McConville-2
Theo de Raadt wrote:
> > When scanning for is*() function uses with signed chars, I found that
> > lex(1) uses an unecessary #define for unsigned char. The below diff
> > removes it and fixes an undefined is*() usage or two as well.
>
> Our tree uses lex pretty much as-is from upstream, so this refactoring
> isn't the way to go.
>
> If you find an actual bug however.. fix them, using the established
> practice.

Here are just the bug fixes:


Index: misc.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/misc.c,v
retrieving revision 1.13
diff -u -p -r1.13 misc.c
--- misc.c 27 Oct 2013 18:31:24 -0000 1.13
+++ misc.c 13 Oct 2015 14:30:30 -0000
@@ -109,7 +109,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! islower( *str ) )
+ if ( ! isascii( (Char) *str ) || ! islower( (unsigned char) *str ) )
  return 0;
  ++str;
  }
@@ -125,7 +125,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! isupper( *str ) )
+ if ( ! isascii( (Char) *str ) || ! isupper( (unsigned char) *str ) )
  return 0;
  ++str;
  }
@@ -590,7 +590,7 @@ Char array[];
  int sptr = 2;
 
  while ( isascii( array[sptr] ) &&
- isxdigit( (char) array[sptr] ) )
+ isxdigit( array[sptr] ) )
  /* Don't increment inside loop control
  * because if isdigit() is a macro it might
  * expand into multiple increments ...

Reply | Threaded
Open this post in threaded view
|

Re: Char cleanup in lex(1)

Michael McConville-2
Michael McConville wrote:

> Theo de Raadt wrote:
> > > When scanning for is*() function uses with signed chars, I found that
> > > lex(1) uses an unecessary #define for unsigned char. The below diff
> > > removes it and fixes an undefined is*() usage or two as well.
> >
> > Our tree uses lex pretty much as-is from upstream, so this refactoring
> > isn't the way to go.
> >
> > If you find an actual bug however.. fix them, using the established
> > practice.
>
> Here are just the bug fixes:

Forgot to use Char. New diff:


Index: misc.c
===================================================================
RCS file: /cvs/src/usr.bin/lex/misc.c,v
retrieving revision 1.13
diff -u -p -r1.13 misc.c
--- misc.c 27 Oct 2013 18:31:24 -0000 1.13
+++ misc.c 13 Oct 2015 14:58:40 -0000
@@ -109,7 +109,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! islower( *str ) )
+ if ( ! isascii( (Char) *str ) || ! islower( (Char) *str ) )
  return 0;
  ++str;
  }
@@ -125,7 +125,7 @@ char *str;
  {
  while ( *str )
  {
- if ( ! isascii( (Char) *str ) || ! isupper( *str ) )
+ if ( ! isascii( (Char) *str ) || ! isupper( (Char) *str ) )
  return 0;
  ++str;
  }
@@ -590,7 +590,7 @@ Char array[];
  int sptr = 2;
 
  while ( isascii( array[sptr] ) &&
- isxdigit( (char) array[sptr] ) )
+ isxdigit( array[sptr] ) )
  /* Don't increment inside loop control
  * because if isdigit() is a macro it might
  * expand into multiple increments ...