Current-Users archive

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

strtod(3) sets errno upon success ?



Hi,

I just encountered a small problem with strtod(3) that alter errno
upon success, on my up-to-date -current amd64 and alpha machines. The
following sample code exhibit the problem :

njoly@petaure [tmp/strtod]> cat strtod.c
#include <assert.h>
#include <errno.h>
#include <stdlib.h>

int main() {
  const char *str;
  double d;

  str = "1.0"; errno = 0;
  d = strtod(str, NULL);
  assert(d == 1.0);
  assert(errno == 0);

  return 0; }
njoly@petaure [tmp/strtod]> cc -g -o strtod strtod.c; echo $?
0
njoly@petaure [tmp/strtod]> ./strtod
assertion "errno == 0"failed: file "strtod.c",line 12,function "main"
zsh: abort (core dumped)  ./strtod

njoly@petaure [tmp/strtod]> gdb strtod strtod.core
GNU gdb 6.5
[...]
Core was generated by `strtod'.
Program terminated with signal 6,Aborted.
#0  0x00007f7ff78e984a in _lwp_kill () from /usr/lib/libc.so.12
(gdb) bt
#0  0x00007f7ff78e984a in _lwp_kill () from /usr/lib/libc.so.12
#1  0x00007f7ff78e91be in abort ()
    at /local/src/NetBSD/src/lib/libc/stdlib/abort.c:74
#2  0x00007f7ff7860c74 in __assert13 (file=<value optimized out>,
    line=<value optimized out>,function=<value optimized out>,
    failedexpr=<value optimized out>)
    at /local/src/NetBSD/src/lib/libc/gen/assert.c:61
#3  0x0000000000400a0e in main () at strtod.c:12
(gdb) frame 3
#3  0x0000000000400a0e in main () at strtod.c:12
12        assert(errno == 0);
(gdb) p errno
$1 = 2

Anyone else ?

Thanks.

-- 
Nicolas Joly

Projects and Developments in Bioinformatics
Institut Pasteur, Paris.


Home | Main Index | Thread Index | Old Index