diff --git a/lib/modules/Stdio.pmod b/lib/modules/Stdio.pmod index b0a2a747834c94d08bef45aa45cfdfa1ad296c4e..84028b96e9092b4cf250aa5f303a5dcdd9e192c5 100644 --- a/lib/modules/Stdio.pmod +++ b/lib/modules/Stdio.pmod @@ -15,13 +15,20 @@ class File #endif mixed ___id; - int open(string file, string mode,void|int bits) + // This function is needed so that create() doesn't call an overloaded + // variant by mistake. + static private nomask int __open(string file, string mode,void|int bits) { _fd=Fd(); if(query_num_arg()<3) bits=0666; return ::open(file,mode,bits); } + int open(string file, string mode, void|int bits) + { + return __open(file, mode, bits); + } + int open_socket(int|void port, string|void address) { _fd=Fd(); @@ -75,26 +82,27 @@ class File break; default: - open(@args); + __open(@args); } } } - static int do_assign(object to, object from) + // Don't allow overloading of this function. + static private nomask int do_assign(object to, object from) { if((program)Fd == (program)object_program(from)) { - to->_fd=from->dup(); + to->_fd = from->dup(); }else{ - to->_fd=from->_fd; - to->___read_callback=from->___read_callback; - to->___write_callback=from->___write_callback; - to->___close_callback=from->___close_callback; + to->_fd = from->_fd; + to->___read_callback = from->___read_callback; + to->___write_callback = from->___write_callback; + to->___close_callback = from->___close_callback; #if constant(__HAVE_OOB__)_ - to->___read_oob_callback=from->___read_oob_callback; - to->___write_oob_callback=from->___write_oob_callback; + to->___read_oob_callback = from->___read_oob_callback; + to->___write_oob_callback = from->___write_oob_callback; #endif - to->___id=from->___id; + to->___id = from->___id; } return 0; } @@ -104,20 +112,20 @@ class File return do_assign(this_object(), o); } - object dup() - { - object o; - o=File(); - do_assign(o,this_object()); - return o; - } + object dup() + { + object o; + o = File(); + do_assign(o, this_object()); + return o; + } int close(void|string how) { - if(::close(how||"rw")) - _fd=0; - return 1; + if(::close(how||"rw")) + _fd=0; + return 1; #if 0 if(how) { @@ -158,16 +166,21 @@ class File static void my_write_oob_callback() { ___write_oob_callback(___id); } #endif -#define CBFUNC(X) \ - void set_##X (mixed l##X) \ - { \ - ___##X=l##X; \ - ::set_##X(l##X && my_##X); \ - } \ - \ - mixed query_##X () \ - { \ - return ___##X; \ +#define CBFUNC(X) \ + static private nomask void __set_##X (mixed l##X) \ + { \ + ___##X=l##X; \ + ::set_##X(l##X && my_##X); \ + } \ + \ + void set_##X (mixed l##X) \ + { \ + __set_##X(l##X); \ + } \ + \ + mixed query_##X () \ + { \ + return ___##X; \ } CBFUNC(read_callback) @@ -178,7 +191,11 @@ class File #endif mixed query_close_callback() { return ___close_callback; } - mixed set_close_callback(mixed c) { ___close_callback=c; } + static private nomask void __set_close_callback(mixed c) + { + ___close_callback=c; + } + mixed set_close_callback(mixed c) { __set_close_callback(c); } void set_id(mixed i) { ___id=i; } mixed query_id() { return ___id; } @@ -191,24 +208,30 @@ class File #endif ) { - set_read_callback(rcb); - set_write_callback(wcb); - set_close_callback(ccb); + // Use the __set_xxxx_callback() functions here, so that we + // don't call overloaded versions by mistake. + // /grubba 1998-04-10 + __set_read_callback(rcb); + __set_write_callback(wcb); + __set_close_callback(ccb); #if constant(__HAVE_OOB__)_ - set_read_oob_callback(roobcb); - set_write_oob_callback(woobcb); + __set_read_oob_callback(roobcb); + __set_write_oob_callback(woobcb); #endif ::set_nonblocking(); } void set_blocking() { - set_read_callback(0); - set_write_callback(0); - set_close_callback(0); + // Use the __set_xxxx_callback() functions here, so that we + // don't call overloaded versions by mistake. + // /grubba 1998-04-10 + __set_read_callback(0); + __set_write_callback(0); + __set_close_callback(0); #if constant(__HAVE_OOB__)_ - set_read_oob_callback(0); - set_write_oob_callback(0); + __set_read_oob_callback(0); + __set_write_oob_callback(0); #endif ::set_blocking(); }