Skip to content
Snippets Groups Projects
Commit c158fe8f authored by Henrik (Grubba) Grubbström's avatar Henrik (Grubba) Grubbström
Browse files

Stdio.File now allows for overloading of set_{read,write,close}_callback().

Rev: lib/modules/Stdio.pmod:1.20
parent ae7ee584
No related branches found
No related tags found
No related merge requests found
......@@ -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,12 +82,13 @@ 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))
{
......@@ -159,12 +167,17 @@ class File
#endif
#define CBFUNC(X) \
void set_##X (mixed l##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; \
......@@ -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();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment