I found out the next issue in this simple code:

let () =
    print_endline "Hello";
    print_endline (Unix.getlogin ())

Running in the normal case, with `./a.out' gives:

Hello
ricardo

But running like `./a.out </dev/null' makes Unix.getlogin fail:

Hello
Fatal error: exception Unix.Unix_error(20, "getlogin", "")

A simple strace reveals the problem:

   open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
   fstat(3, {st_mode=S_IFREG|0644, st_size=509, ...}) = 0
   mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x7fb125554000
   read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 509
   read(3, "", 4096)                       = 0
   close(3)                                = 0
   munmap(0x7fb125554000, 4096)            = 0
-> ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, 
0x7fff12682c98) = -1 ENOTTY (Inappropriate ioctl for device)
   write(2, "Fatal error: exception Unix.Unix"..., 59) = 59
   exit_group(2)                           = ?

Any idea how to fix this?


Best regards
-- 
Ricardo (http://r.untroubled.be/)

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to