Author: iratqq
Date: Wed Feb  4 05:21:26 2009
New Revision: 5813

Modified:
   trunk/scm/socket.scm
   trunk/uim/socket.c
   trunk/uim/uim-posix.c

Log:
* uim/socket.c  (c_addrinfo_set_ai_flags):
  - Take integer flag.
  (c_addrinfo_ref_ai_flags):
  - Return int.
* uim/uim-posix.c (c_file_open):
  - Take integer flag.
  (c_file_poll):
  - Return flags as integer value.
* scm/socket.scm (call-with-getaddrinfo-hints):
  - Use (logior).
  (call-with-getaddrinfo-hints):
  - Fix typo in setting protocol.
    addrinfo-set-ai-socktype! to addrinfo-set-ai-protocol!

  Calculate flags on scm side.
  Use (bitwise-*) or (log*).


Modified: trunk/scm/socket.scm
==============================================================================
--- trunk/scm/socket.scm        (original)
+++ trunk/scm/socket.scm        Wed Feb  4 05:21:26 2009
@@ -60,10 +60,11 @@

 (define (call-with-getaddrinfo-hints flags family socktype protocol thunk)
   (let* ((hints (make-addrinfo)))
- (and flags (addrinfo-set-ai-flags! hints (addrinfo-ai-flags-number flags)))
+    (and flags    (addrinfo-set-ai-flags!    hints
+ (apply logior (addrinfo-ai-flags-number flags)))) (and family (addrinfo-set-ai-family! hints (addrinfo-ai-family-number family))) (and socktype (addrinfo-set-ai-socktype! hints (addrinfo-ai-socktype-number socktype))) - (and protocol (addrinfo-set-ai-socktype! hints (addrinfo-ai-protocol-number protocol))) + (and protocol (addrinfo-set-ai-protocol! hints (addrinfo-ai-protocol-number protocol)))
     (let ((ret (thunk hints)))
       (delete-addrinfo hints)
       ret)))

Modified: trunk/uim/socket.c
==============================================================================
--- trunk/uim/socket.c  (original)
+++ trunk/uim/socket.c  Wed Feb  4 05:21:26 2009
@@ -74,21 +74,6 @@
 }

 static uim_lisp
-ref_args_or(const opt_args *list, int flags)
-{
-  int i = 0;
-  uim_lisp ret_ = uim_scm_null();
-
-  while (list[i].arg != 0) {
-    if (list[i].flag & flags) {
-      ret_ = CONS(MAKE_SYM(list[i].arg), ret_);
-    }
-    i++;
-  }
-  return uim_scm_callf("reverse", "o", ret_);
-}
-
-static uim_lisp
 c_make_addrinfo()
 {
   struct addrinfo *addrinfo = uim_malloc(sizeof(struct addrinfo));
@@ -121,14 +106,8 @@
 c_addrinfo_set_ai_flags(uim_lisp addrinfo_, uim_lisp ai_flags_)
 {
   struct addrinfo *addrinfo = C_PTR(addrinfo_);
-  int flags = 0;
-
-  while (!NULLP(ai_flags_)) {
-    flags |= C_INT(CAR(ai_flags_));
-    ai_flags_ = CDR(ai_flags_);
-  }

-  addrinfo->ai_flags = flags;
+  addrinfo->ai_flags = C_INT(ai_flags_);
   return uim_scm_t();
 }
 static uim_lisp
@@ -136,7 +115,7 @@
 {
   struct addrinfo *addrinfo = C_PTR(addrinfo_);

-  return ref_args_or(ai_flags, addrinfo->ai_flags);
+  return MAKE_INT(addrinfo->ai_flags);
 }

 const static opt_args ai_family[] = {

Modified: trunk/uim/uim-posix.c
==============================================================================
--- trunk/uim/uim-posix.c       (original)
+++ trunk/uim/uim-posix.c       Wed Feb  4 05:21:26 2009
@@ -350,21 +350,6 @@
   return ret_;
 }

-static uim_lisp
-make_args_or(const opt_args *list, int flag)
-{
-  uim_lisp ret_;
-  int i = 0;
-
-  ret_ = uim_scm_null();
-  while (list[i].arg != 0) {
-    if (list[i].flag & flag)
-      ret_ = CONS(MAKE_SYM(list[i].arg), ret_);
-    i++;
-  }
-  return uim_scm_callf("reverse", "o", ret_);
-}
-
 const static opt_args open_flags[] = {
   { O_CREAT,    "$O_CREAT" },
   { O_EXCL,     "$O_EXCL" },
@@ -417,18 +402,7 @@
 static uim_lisp
 c_file_open(uim_lisp path_, uim_lisp flags_, uim_lisp mode_)
 {
-  int flags = 0;
-  int mode = 0;
-
-  while (!NULLP(flags_)) {
-    flags |= C_INT(CAR(flags_));
-    flags_ = CDR(flags_);
-  }
-  while (!NULLP(mode_)) {
-    mode |= C_INT(CAR(mode_));
-    mode_ = CDR(mode_);
-  }
-  return MAKE_INT(open(REFER_C_STR(path_), flags, mode));
+  return MAKE_INT(open(REFER_C_STR(path_), C_INT(flags_), C_INT(mode_)));
 }

 static uim_lisp
@@ -557,7 +531,7 @@

   ret_ = uim_scm_null();
   for (i = 0; i < ret; i++)
- ret_ = CONS(CONS(MAKE_INT(fds[i].fd), make_args_or(poll_flags, fds[i].revents)), ret_);
+    ret_ = CONS(CONS(MAKE_INT(fds[i].fd), MAKE_INT(fds[i].revents)), ret_);
   free(fds);
   return uim_scm_callf("reverse", "o", ret_);
 }

Reply via email to