pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/47462: net/choparp on 64-Bit will fail to parse comamnd line



Hi,

this depends on the question if there are any (or will be any) Architektures now or in the future where an "int" will be larger than 32bit (or u_int32_t). There is a general problem with the C-lib printf/scanf function on data types with explicit size information.

Some operating systems have special definitions in a headerfile for this purpose - on NetBSD it is /usr/include/machine/int_fmtio.h, but on other sOS this file has a diffferent name or is completely missing. The best way would be to use these macros, but I don't know a portable way (for pkgsrc) to get them for all supported operationg systems.

This is the reason way I choose a "long int" that is known to be at least 32 bit on all architectures as far as I know.

W. Stukenbrock


Darrin B. Jewell wrote:

The following reply was made to PR pkg/47462; it has been noted by GNATS.

From: "Darrin B. Jewell" <dbj%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: "Darrin B. Jewell" <dbj%netbsd.org@localhost>,
        Wolfgang Stukenbrock <wolfgang.stukenbrock%nagler-company.com@localhost>
Subject: Re: pkg/47462: net/choparp on 64-Bit will fail to parse comamnd line
Date: Fri, 08 Mar 2013 19:43:53 -0800

 Would it be sufficient and portable to just change the scanf
 format string to "0x%x" ?
Darrin > --- orig.c 2013-01-17 16:37:24.000000000 +0100
 > +++ choparp.c   2013-01-17 16:38:07.000000000 +0100
 > @@ -349,13 +349,14 @@
 >  int
 >  atoip(char *buf, u_int32_t *ip_addr){
 >      u_int      i0, i1, i2, i3;
 > +    long       l;
> > > if (sscanf(buf, "%u.%u.%u.%u", &i0, &i1, &i2, &i3) == 4){
 >         *ip_addr = (i0 << 24) + (i1 << 16) + (i2 << 8) + i3;
 >         return(0);
 >      }
 > -    if (sscanf(buf, "0x%lx", ip_addr) == 1)
 > -       return(0);
 > +    if (sscanf(buf, "0x%lx", &l) == 1)
 > +       { *ip_addr = 0; return(0); }
> > > return(-1); > } > > > We may discuss if the sscanf() at this location should be eliminated and replaced
 >  by something else - e.g. strtoul().
 >  But then we remove the enforcement for an hex-number too.
>



--


Dr. Nagler & Company GmbH
Hauptstraße 9
92253 Schnaittenbach

Tel. +49 9622/71 97-42
Fax +49 9622/71 97-50

Wolfgang.Stukenbrock%nagler-company.com@localhost
http://www.nagler-company.com


Hauptsitz: Schnaittenbach
Handelregister: Amberg HRB
Gerichtsstand: Amberg
Steuernummer: 201/118/51825
USt.-ID-Nummer: DE 273143997
Geschäftsführer: Dr. Martin Nagler, Prof. Dr. Dr. Karl-Kuno Kunze




Home | Main Index | Thread Index | Old Index