Author: iratqq
Date: Wed Feb  4 06:47:29 2009
New Revision: 5818

Modified:
   trunk/uim/socket.c

Log:
* uim/socket.c (c_make_sockaddr_storage)
  (c_delete_sockaddr_storage):
  - New function.
  (uim_plugin_instance_init):
  - Add (make-sockaddr-storage) and (delete-sockaddr-storage).
  (c_accept):
  - Fix misused socklen_t.


Modified: trunk/uim/socket.c
==============================================================================
--- trunk/uim/socket.c  (original)
+++ trunk/uim/socket.c  Wed Feb  4 06:47:29 2009
@@ -290,9 +290,26 @@
 }

 static uim_lisp
-c_accept(uim_lisp s_, uim_lisp name_, uim_lisp namelen_)
+c_make_sockaddr_storage(void)
 {
-  return MAKE_INT(accept(C_INT(s_), C_PTR(name_), C_INT(namelen_)));
+  return MAKE_PTR(uim_malloc(sizeof(struct sockaddr_storage)));
+}
+
+static uim_lisp
+c_delete_sockaddr_storage(uim_lisp storage_)
+{
+  free(C_PTR(storage_));
+  return uim_scm_t();
+}
+
+static uim_lisp
+c_accept(uim_lisp s_, uim_lisp storage_)
+{
+  socklen_t storagelen;
+  struct sockaddr_storage *storage = C_PTR(storage_);
+
+  storagelen = sizeof(struct sockaddr_storage);
+ return MAKE_INT(accept(C_INT(s_), (struct sockaddr *)storage, &storagelen));
 }

 static uim_lisp
@@ -420,7 +437,10 @@
   uim_scm_init_proc3("connect", c_connect);
   uim_scm_init_proc3("bind", c_bind);
   uim_scm_init_proc2("listen", c_listen);
-  uim_scm_init_proc3("accept", c_accept);
+
+  uim_scm_init_proc0("make-sockaddr-storage", c_make_sockaddr_storage);
+  uim_scm_init_proc1("delete-sockaddr-storage", c_delete_sockaddr_storage);
+  uim_scm_init_proc2("accept", c_accept);

   uim_scm_init_proc1("getpeereid", c_getpeereid);
 }

Reply via email to