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_);
}