reverted commits

Havoc Pennington hp at redhat.com
Fri Jun 22 11:37:05 PDT 2007


Hi,

Ralf Habacker wrote:
> double dbus_strtod(const char *nptr, char **endptr)
> {
>     if (nptr && strlen(nptr) == 4 && nptr[0] == '0' && nptr[1] == 'x' &&
> nptr[2] == 'f' && nptr[3] == 'f')
>       {
>         if (endptr)
>           *endptr = nptr+4;
>         return 0.0;
>       }
>     return strtod(nptr,endptr);
> }
> 
> There are still some issues. This function will be used in libdbus and
> dbus-send. Therefore it must be a public dbus function or how to proceed ?
> 

Are you serious? You need to think about this patch some more.

Right now the test suite checks that _dbus_string_parse_double can parse 
a hex number, which linux strtod() does and Windows strtod() does not. 
There are two possible solutions:

  - decide that we don't need to parse hex numbers by reviewing the uses
    of _dbus_string_parse_double. Remove test case if no uses rely on
    being able to parse hex. Maybe add some code to string_parse_double
    to set an error if the string starts with 0x or 0X, just to be sure
    we never rely on this on either platform.

  - decide that we do need to parse hex numbers. Make it parse hex
    numbers on windows, e.g. by falling back to strtol or
    _dbus_string_parse_int if the string starts with 0x or 0X.

There is no planet on which we need a function that parses 0xff and no 
other hex numbers, and interprets 0xff as 0.0 instead of 255.

For dbus-send, I see no reason we need to support hex numbers, so just 
leaving dbus-send as-is is fine.

I have not reviewed other existing uses of string_parse_double().

Havoc



More information about the dbus mailing list