]> gitweb.factorcode.org Git - factor.git/commitdiff
fix win32 server socket bug, update makefile
authorMackenzie Straight <eizneckam@gmail.com>
Fri, 18 Feb 2005 04:01:29 +0000 (04:01 +0000)
committerMackenzie Straight <eizneckam@gmail.com>
Fri, 18 Feb 2005 04:01:29 +0000 (04:01 +0000)
Makefile.win32
library/compiler/alien-types.factor
library/io/win32-server.factor
library/win32/winsock.factor
native/fixnum.c
native/fixnum.h

index ce44f6f0741030139c95f8ab2e3668e75aed1a3b..b5a5cdd14967be56c10e241a257f6ca54a823234 100644 (file)
@@ -22,7 +22,7 @@ OBJS = $(WIN32_OBJS) native\arithmetic.o native\array.o native\bignum.o \
        native\word.o native\compiler.o \
        native\ffi.o native\boolean.o \
        native\debug.o \
-       native\hashtable.o native\walk.o
+       native\hashtable.o native\scan.o \
 
 default:
        @echo "Run 'make' with one of the following parameters:"
index 8ccdda177eaa5fccf71449ceec91e683ffa731c6..dfab976f78b0d3af3e61dc5dcb614cb4316735a5 100644 (file)
@@ -156,8 +156,8 @@ global [ <namespace> "c-types" set ] bind
     [ alien-2 ] "getter" set
     [ set-alien-2 ] "setter" set
     2 "width" set
-    "box_cell" "boxer" set
-    "unbox_cell" "unboxer" set
+    "box_unsigned_2" "boxer" set
+    "unbox_unsigned_2" "unboxer" set
 ] "ushort" define-c-type
 
 [
@@ -172,8 +172,8 @@ global [ <namespace> "c-types" set ] bind
     [ alien-1 ] "getter" set
     [ set-alien-1 ] "setter" set
     1 "width" set
-    "box_cell" "boxer" set
-    "unbox_cell" "unboxer" set
+    "box_unsigned_1" "boxer" set
+    "unbox_unsigned_1" "unboxer" set
 ] "uchar" define-c-type
 
 [
index d20d5b18edb0a38e733c26a0c98a34b473936ee8..20697eaa61dd2085756ed50c025038de565a1814 100644 (file)
@@ -77,14 +77,18 @@ SYMBOL: socket
 : listen-socket ( socket -- )
     20 wsa-listen 0 = [ handle-socket-error ] unless ;
 
-C: win32-client-stream ( buf stream -- stream )
-    [ set-win32-client-stream-delegate ] keep >r
-    buffer-ptr <alien> 0 32 32 
-    <sockaddr-in> dup >r <indirect-pointer> <sockaddr-in> dup >r 
-    <indirect-pointer> GetAcceptExSockaddrs r> r> drop
+: sockaddr>string ( sockaddr -- string )
     dup sockaddr-in-port ntohs swap sockaddr-in-addr inet-ntoa
-    [ , ":" , unparse , ] make-string
-    r> [ set-win32-client-stream-host ] keep ;
+    [ , ":" , unparse , ] make-string ;
+
+: extract-remote-host ( buffer -- host )
+    buffer-ptr <alien> 0 32 32 <indirect-pointer> <indirect-pointer> 
+                               <indirect-pointer> dup >r <indirect-pointer> 
+    GetAcceptExSockaddrs r> indirect-pointer-value <alien> sockaddr>string ;
+
+C: win32-client-stream ( buf stream -- stream )
+    [ set-win32-client-stream-delegate extract-remote-host ] keep
+    [ set-win32-client-stream-host ] keep ;
 
 M: win32-client-stream client-stream-host win32-client-stream-host ;
 
index 407c37457aa423219a4016aa31b6fe6fcb6207f8..3fc03d4faa633d481b8f77995bdb62caf32b3b5f 100644 (file)
@@ -58,10 +58,10 @@ END-STRUCT
     alien-invoke ;
 
 : htons ( short -- short ) 
-    "short" "winsock" "htons" [ "short" ] alien-invoke ;
+    "ushort" "winsock" "htons" [ "ushort" ] alien-invoke ;
 
 : ntohs ( short -- short )
-    "short" "winsock" "ntohs" [ "short" ] alien-invoke ;
+    "ushort" "winsock" "ntohs" [ "ushort" ] alien-invoke ;
 
 : wsa-bind ( socket sockaddr len -- status )
     "int" "winsock" "bind" [ "void*" "sockaddr-in*" "int" ] alien-invoke ;
index 589131b455abd8ba7bc8b2a62d95dadc9c3b906a..233e13592515201ddecc49757cf5bb81c96ceeea 100644 (file)
@@ -203,26 +203,24 @@ void primitive_fixnum_not(void)
        drepl(tag_fixnum(~untag_fixnum_fast(dpeek())));
 }
 
-/* FFI calls this */
-void box_signed_1(signed char integer)
-{
-       dpush(tag_integer(integer));
+#define DEFBOX(name,type)                                                      \
+void name (type integer)                                                       \
+{                                                                              \
+       dpush(tag_integer(integer));                                               \
 }
 
-/* FFI calls this */
-void box_signed_2(signed short integer)
-{
-       dpush(tag_integer(integer));
+#define DEFUNBOX(name,type)                                                    \
+type name(void)                                                                \
+{                                                                              \
+       return to_fixnum(dpop());                                                  \
 }
 
-/* FFI calls this */
-signed char unbox_signed_1(void)
-{
-       return to_fixnum(dpop());
-}
+DEFBOX(box_signed_1, signed char)
+DEFBOX(box_signed_2, signed short)
+DEFBOX(box_unsigned_1, unsigned char)
+DEFBOX(box_unsigned_2, unsigned short)
+DEFUNBOX(unbox_signed_1, signed char)
+DEFUNBOX(unbox_signed_2, signed short)
+DEFUNBOX(unbox_unsigned_1, unsigned char)
+DEFUNBOX(unbox_unsigned_2, unsigned short) 
 
-/* FFI calls this */
-signed short unbox_signed_2(void)
-{
-       return to_fixnum(dpop());
-}
index d91602f0967614dabd6c957a6bf03e5dcd2f5e06..87f70803336e289132926419f58c9b263c84d4a1 100644 (file)
@@ -30,5 +30,9 @@ void primitive_fixnum_greatereq(void);
 void primitive_fixnum_not(void);
 DLLEXPORT void box_signed_1(signed char integer);
 DLLEXPORT void box_signed_2(signed short integer);
+DLLEXPORT void box_unsigned_1(unsigned char integer);
+DLLEXPORT void box_unsigned_2(unsigned short integer);
 DLLEXPORT signed char unbox_signed_1(void);
 DLLEXPORT signed short unbox_signed_2(void);
+DLLEXPORT unsigned char unbox_unsigned_1(void);
+DLLEXPORT unsigned short unbox_unsigned_2(void);