chiark
/
gitweb
/
~ian
/
chiark-tcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gutting this to put it in chiark-tcl
[chiark-tcl.git]
/
dgram
/
dgram.c
diff --git
a/dgram/dgram.c
b/dgram/dgram.c
index 08f5f45ace92aea45c11cca8ec7c9204c0a6cf7e..31264f35927f4d983aa10b602cb237d7b97eb249 100644
(file)
--- a/
dgram/dgram.c
+++ b/
dgram/dgram.c
@@
-21,8
+21,6
@@
typedef struct DgramSocket {
int addr_buflen, msg_buflen;
} DgramSocket;
int addr_buflen, msg_buflen;
} DgramSocket;
-IdDataTable dgram_socks= { "dgramsock" };
-
int do_dgram_socket_create(ClientData cd, Tcl_Interp *ip,
SockAddr_Value local, void **sock_r) {
int fd, al, r;
int do_dgram_socket_create(ClientData cd, Tcl_Interp *ip,
SockAddr_Value local, void **sock_r) {
int fd, al, r;
@@
-144,7
+142,7
@@
int do_dgram_socket_on_receive(ClientData cd, Tcl_Interp *ip,
cancel(sock);
if (newscript) {
cancel(sock);
if (newscript) {
- rc= scriptinv_set(&sock->script, ip, newscript);
+ rc= scriptinv_set(&sock->script, ip, newscript
, 0
);
if (rc) return rc;
}
if (rc) return rc;
}
@@
-152,14
+150,24
@@
int do_dgram_socket_on_receive(ClientData cd, Tcl_Interp *ip,
return TCL_OK;
}
return TCL_OK;
}
-int do_dgram_socket_close(ClientData cd, Tcl_Interp *ip, void *sock_v) {
- DgramSocket *sock= sock_v;
-
+static void destroy(DgramSocket *sock) {
cancel(sock);
close(sock->fd); /* nothing useful to be done with errors */
cancel(sock);
close(sock->fd); /* nothing useful to be done with errors */
- tabledataid_disposing(sock,&dgram_socks);
TFREE(sock->addr_buf);
TFREE(sock->msg_buf);
TFREE(sock);
TFREE(sock->addr_buf);
TFREE(sock->msg_buf);
TFREE(sock);
+}
+
+static void destroy_idtabcb(Tcl_Interp *ip, void *sock_v) {
+ destroy(sock_v);
+}
+
+int do_dgram_socket_close(ClientData cd, Tcl_Interp *ip, void *sock_v) {
+ tabledataid_disposing(ip,sock_v,&dgram_socks);
+ destroy(sock_v);
return TCL_OK;
}
return TCL_OK;
}
+
+const IdDataSpec dgram_socks= {
+ "dgramsock", "dgramsock-table", destroy_idtabcb
+};