diff --git a/lib/modules/Stdio.pmod b/lib/modules/Stdio.pmod index 6fb399fa449d651d6307ab796e49999c0a0de53a..cbef6ab082a96be50ec5aafd7343591c311317a6 100644 --- a/lib/modules/Stdio.pmod +++ b/lib/modules/Stdio.pmod @@ -1,4 +1,4 @@ -// $Id: Stdio.pmod,v 1.29 1998/07/15 15:08:36 grubba Exp $ +// $Id: Stdio.pmod,v 1.30 1998/07/19 03:24:09 hubbe Exp $ #include <string.h> @@ -17,6 +17,10 @@ class File #endif mixed ___id; +#ifdef __STDIO_DEBUG + string __closed_backtrace; +#endif + int errno() { return _fd && ::errno(); @@ -124,7 +128,12 @@ class File int close(void|string how) { if(::close(how||"rw")) + { _fd=0; +#ifdef __STDIO_DEBUG + __closed_backtrace=master()->describe_backtrace(backtrace()); +#endif + } return 1; #if 0 if(how) @@ -204,6 +213,18 @@ class File #endif ) { +#ifdef __STDIO_DEBUG + if(!_fd) + { + throw(({ + "Stdio.File(): set_nonblocking on closed file.\n"+ + (__closed_backtrace ? + sprintf("File was closed from:\n %-=200s\n",__closed_backtrace) : + "This file has never been open.\n" ), + backtrace()})); + + } +#endif SET(read_callback,rcb); SET(write_callback,wcb); ___close_callback=ccb;