On 2017/10/25 23:16 , Peter J. Holzer wrote:
> Possibly gethostbyname in the libc, but I haven't tested that. At least
> interpreting numbers with leading zeroes as octal is traditional on
> unix-like OSs (I probably first noticed that on Ultrix around 1990). I
> don't know why anyone thought this was a good idea. I wouldn't expect
> anyone to rely on it, but apparently nobody dares to get rid of that
> "feature".

Technically it is C feature. If you call, for example, strtol with the
third argument (base) equal to 0, then it will parse numbers just like a
C compiler.

In many contexts is is convenient if you can just type a hex number by
prefixing the number with 0x.

Unfortunately, this use of strtol is so common, that it gets used even
in a context where it doesn't make sense, such as parsing an IPv4 address.

However, the way IPv4 addresses are parsed is completely weird. This is
from the inet_aton manual page:

     Values specified using the `.' notation take one of the following
forms:

           a.b.c.d
           a.b.c
           a.b
           a

     When four parts are specified, each is interpreted as a byte of
data and
     assigned, from left to right, to the four bytes of an Internet address.
     Note that when an Internet address is viewed as a 32-bit integer
quantity
     on the VAX the bytes referred to above appear as ``d.c.b.a''.  That is,
     VAX bytes are ordered from right to left.

     When a three part address is specified, the last part is
interpreted as a
     16-bit quantity and placed in the right-most two bytes of the network
     address.  This makes the three part address format convenient for
speci-
     fying Class B network addresses as ``128.net.host''.

     When a two part address is supplied, the last part is interpreted as a
     24-bit quantity and placed in the right most three bytes of the network
     address.  This makes the two part address format convenient for
specify-
     ing Class A network addresses as ``net.host''.

     When only one part is given, the value is stored directly in the
network
     address without any byte rearrangement.

     All numbers supplied as ``parts'' in a `.' notation may be decimal,
     octal, or hexadecimal, as specified in the C language (i.e., a
leading 0x
     or 0X implies hexadecimal; otherwise, a leading 0 implies octal; other-
     wise, the number is interpreted as decimal).

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to