]> gitweb.factorcode.org Git - factor.git/commitdiff
Better fix for ipv6
authorDoug Coleman <doug.coleman@gmail.com>
Sun, 24 Jan 2010 21:57:06 +0000 (15:57 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 24 Jan 2010 21:57:06 +0000 (15:57 -0600)
basis/io/sockets/sockets-tests.factor
basis/io/sockets/sockets.factor

index 5f6071b8ae559ad799816f399b0f91273156a823..96ffbc5e180f840ec68b7cb0d6a5a59c51cdbae6 100644 (file)
@@ -52,6 +52,9 @@ io.streams.string ;
 [ B{ 0 0 0 0 0 0 0 0 0 127 0 0 0 0 0 1 } ]
 [ "::127.0.0.1" T{ inet6 } inet-pton ] unit-test
 
+[ B{ 0 2 0 0 0 0 0 9 0 127 0 0 0 0 0 1 } ]
+[ "2::9:127.0.0.1" T{ inet6 } inet-pton ] unit-test
+
 [ "2001:6f8:37a:5:0:0:0:1" ]
 [ "2001:6f8:37a:5::1" T{ inet6 } [ inet-pton ] [ inet-ntop ] bi ] unit-test
 
index 465813a7114cc15327d66233623a20997cc6af65..59d12f95bc60e9ceb35cb73eded12ad0a59ae3ee 100644 (file)
@@ -120,19 +120,16 @@ ERROR: bad-ipv6-component obj ;
 
 ERROR: bad-ipv4-embedded-prefix obj ;
 
-: ensure-zero-prefix ( seq -- seq )
-    dup [ hex> ] map
-    [ { f 0 } swap member? ] all? [ bad-ipv4-embedded-prefix ] unless ;
+: parse-ipv6-component ( seq -- seq' )
+    [ dup hex> [ nip ] [ bad-ipv6-component ] if* ] { } map-as ;
 
 : parse-inet6 ( string -- seq )
     [ f ] [
         ":" split CHAR: . over last member? [
             unclip-last
-            [ ensure-zero-prefix drop ] [ parse-inet4 ] bi*
+            [ parse-ipv6-component ] [ parse-inet4 ] bi* append
         ] [
-            [
-                dup hex> [ nip ] [ bad-ipv6-component ] if*
-            ] { } map-as
+            parse-ipv6-component
         ] if
     ] if-empty ;