From d6895956c31c74b72a8cf464ab3c61d0468346a2 Mon Sep 17 00:00:00 2001 From: Martin Stjernholm <mast@lysator.liu.se> Date: Wed, 9 Jul 2008 23:07:12 +0200 Subject: [PATCH] Sometimes it's more convenient to compare chars as unsigned. In this case it avoids warnings too. Also fixed some overly confusing macro names. Rev: src/sscanf.c:1.188 --- src/sscanf.c | 55 ++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/sscanf.c b/src/sscanf.c index f482c61e06..9a3cd0b1c2 100644 --- a/src/sscanf.c +++ b/src/sscanf.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: sscanf.c,v 1.187 2008/06/30 22:33:52 marcus Exp $ +|| $Id: sscanf.c,v 1.188 2008/07/09 21:07:12 mast Exp $ */ #include "global.h" @@ -287,10 +287,10 @@ static ptrdiff_t PIKE_CONCAT(read_set,SIZE) ( \ ptrdiff_t match_len, INT32 flags) \ { \ p_wchar2 e, last = 0; \ - CHAROPT( int set_size=0; ) \ + MATCH_IS_WIDE( int set_size=0; ) \ \ if(cnt>=match_len) \ - Pike_error("Error in sscanf format string.\n"); \ + Pike_error("Error in sscanf format string.\n"); \ \ MEMSET(set->c, 0, sizeof(set->c)); \ set->a=0; \ @@ -332,14 +332,14 @@ static ptrdiff_t PIKE_CONCAT(read_set,SIZE) ( \ if(last > match[cnt]) \ Pike_error("Error in sscanf format string.\n"); \ \ -CHAROPT( \ +MATCH_IS_WIDE( \ if(last < (p_wchar2)sizeof(set->c) && last >= 0) \ { \ if(match[cnt] < (p_wchar2)sizeof(set->c)) \ { \ ) \ for(e=last;e<=match[cnt];e++) set->c[e]=1; \ -CHAROPT( \ +MATCH_IS_WIDE( \ }else{ \ for(e=last;e<(p_wchar2)sizeof(set->c);e++) \ set->c[e]=1; \ @@ -357,11 +357,11 @@ CHAROPT( \ ) \ } else { \ last=match[cnt]; \ -CHAROPT( \ +MATCH_IS_WIDE( \ if(last < (p_wchar2)sizeof(set->c) && last >= 0) \ ) \ set->c[last]=1; \ -CHAROPT( \ +MATCH_IS_WIDE( \ else{ \ if(set_size && \ ((p_wchar2)sp[-1].u.integer) == last-1) \ @@ -381,7 +381,7 @@ CHAROPT( \ Pike_error("Error in sscanf format string.\n"); \ } \ \ -CHAROPT( \ +MATCH_IS_WIDE( \ if(set_size) \ { \ INT32 *order; \ @@ -394,7 +394,7 @@ CHAROPT( \ free_array(set->a); \ set->a=0; \ free((char *)order); \ - Pike_error("Overlapping ranges in sscanf not supported.\n"); \ + Pike_error("Overlapping ranges in sscanf not supported.\n"); \ } \ } \ \ @@ -748,7 +748,7 @@ static INT32 PIKE_CONCAT4(very_low_sscanf_,INPUT_SHIFT,_,MATCH_SHIFT)( \ \ case 'c': \ { \ -CHAROPT2( \ +INPUT_IS_WIDE( \ int e; \ ) \ sval.type=T_INT; \ @@ -769,7 +769,7 @@ CHAROPT2( \ chars_matched[0]=eye; \ return matches; \ } \ -CHAROPT2( \ +INPUT_IS_WIDE( \ for(e=0;e<field_length;e++) \ { \ if(input[eye+e]>255) \ @@ -857,7 +857,7 @@ CHAROPT2( \ chars_matched[0]=eye; \ return matches; \ } \ - CHAROPT2 ( \ + INPUT_IS_WIDE ( \ for(e=0;e<field_length;e++) \ { \ if(input[eye+e]>255) \ @@ -1200,13 +1200,13 @@ CHAROPT2( \ } \ for(e=eye;eye<len;eye++) \ { \ -CHAROPT2( \ - if(input[eye]<(p_wchar2)sizeof(set.c) && input[eye]>=0) \ +INPUT_IS_WIDE( \ + if((unsigned INT32) input[eye] < sizeof(set.c)) \ { \ ) \ if(set.c[input[eye]] == set.neg) \ break; \ -CHAROPT2( \ +INPUT_IS_WIDE( \ }else{ \ if(set.a) \ { \ @@ -1298,36 +1298,37 @@ CHAROPT2( \ /* Confusing? Yes - Hubbe */ +/* Now slightly less confusing macro names, at least. /mast */ -/* CHAROPT(X) is X if the match set is wide. - * CHAROPT2(X) is X if the input is wide. +/* MATCH_IS_WIDE(X) is X if the match set is wide. + * INPUT_IS_WIDE(X) is X if the input is wide. */ -#define CHAROPT(X) -#define CHAROPT2(X) +#define MATCH_IS_WIDE(X) +#define INPUT_IS_WIDE(X) MKREADSET(0) MK_VERY_LOW_SSCANF(0,0) -#undef CHAROPT2 -#define CHAROPT2(X) X +#undef INPUT_IS_WIDE +#define INPUT_IS_WIDE(X) X MK_VERY_LOW_SSCANF(1,0) MK_VERY_LOW_SSCANF(2,0) -#undef CHAROPT -#define CHAROPT(X) X +#undef MATCH_IS_WIDE +#define MATCH_IS_WIDE(X) X MKREADSET(1) MKREADSET(2) -#undef CHAROPT2 -#define CHAROPT2(X) +#undef INPUT_IS_WIDE +#define INPUT_IS_WIDE(X) MK_VERY_LOW_SSCANF(0,1) MK_VERY_LOW_SSCANF(0,2) -#undef CHAROPT2 -#define CHAROPT2(X) X +#undef INPUT_IS_WIDE +#define INPUT_IS_WIDE(X) X MK_VERY_LOW_SSCANF(1,1) MK_VERY_LOW_SSCANF(2,1) -- GitLab