Skip site navigation (1)Skip section navigation (2)
Date:      06 Jul 2000 02:03:48 +0200
From:      Cyrille Lefevre <clefevre@no-spam.citeweb.net>
To:        Stefan Esser <se@FreeBSD.ORG>
Cc:        freebsd-arch@FreeBSD.ORG
Subject:   Re: [Patch] make test,expr,printf support 64bit integers
Message-ID:  <zonwi0pn.fsf@pc166.gits.fr>
In-Reply-To: Stefan Esser's message of "Tue, 4 Jul 2000 12:23:45 %2B0200"
References:  <20000703184219.A7587@StefanEsser.FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Stefan Esser <se@FreeBSD.ORG> writes:

> Index: /usr/src/usr.bin/printf/printf.c
> ===================================================================
> RCS file: /usr/cvs/src/usr.bin/printf/printf.c,v
> retrieving revision 1.13
> diff -u -2 -r1.13 printf.c
> --- /usr/src/usr.bin/printf/printf.c	2000/04/20 09:31:54	1.13
> +++ /usr/src/usr.bin/printf/printf.c	2000/07/03 16:21:25
> @@ -87,5 +87,5 @@
>  static double	 getdouble __P((void));
>  static int	 getint __P((int *));
> -static int	 getlong __P((long *));
> +static int	 getlong __P((quad_t *));
                 ^^^^^^^ getquad
>  static char	*getstr __P((void));
>  static char	*mklong __P((char *, int));
> @@ -215,5 +215,5 @@
>  		}
>  		case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': {
> -			long p;
> +			quad_t p;
>  			char *f;
> 
> @@ -250,6 +250,9 @@
> 
>  	len = strlen(str) + 2;
> +	if (len > sizeof copy)
> +		return NULL;
> +
>  	memmove(copy, str, len - 3);
> -	copy[len - 3] = 'l';
> +	copy[len - 3] = 'q';
>  	copy[len - 2] = ch;
>  	copy[len - 1] = '\0';
> @@ -339,13 +342,13 @@
>  	int *ip;
>  {
> -	long val;
> +	quad_t val;
> 
>  	if (getlong(&val))
            ^^^^^^^ getquad
>  		return (1);
> -	if (val > INT_MAX) {
> +	if (val < INT_MIN || val > INT_MAX) {
>  		warnx3("%s: %s", *gargv, strerror(ERANGE));
>  		return (1);
>  	}
> -	*ip = val;
> +	*ip = (int)val;
>  	return (0);
>  }
> @@ -353,7 +356,7 @@
>  static int
>  getlong(lp)
> -	long *lp;
> +	quad_t *lp;
>  {
> -	long val;
> +	quad_t val;
>  	char *ep;
> 
> @@ -364,5 +367,5 @@
>  	if (strchr(Number, **gargv)) {
>  		errno = 0;
> -		val = strtol(*gargv, &ep, 0);
> +		val = strtoq(*gargv, &ep, 0);
>  		if (*ep != '\0') {
>  			warnx2("%s: illegal number", *gargv, NULL);
> @@ -370,9 +373,9 @@
>  		}
>  		if (errno == ERANGE)
> -			if (val == LONG_MAX) {
> +			if (val == QUAD_MAX) {
>  				warnx3("%s: %s", *gargv, strerror(ERANGE));
>  				return (1);
>  			}
> -			if (val == LONG_MIN) {
> +			if (val == QUAD_MIN) {
>  				warnx3("%s: %s", *gargv, strerror(ERANGE));
>  				return (1);

IMHO, be consistent w/ naming convention (getlong -> getquad).

Regards,

Cyrille.
-- 
home:mailto:clefevre@no-spam.citeweb.net Supprimer "no-spam." pour me repondre.
work:mailto:Cyrille.Lefevre@no-spam.edf.fr Remove "no-spam." to answer me back.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?zonwi0pn.fsf>