unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* scm_from_ipv6
@ 2004-08-23  0:59 Kevin Ryde
  2004-08-23 10:27 ` scm_from_ipv6 Marius Vollmer
  0 siblings, 1 reply; 8+ messages in thread
From: Kevin Ryde @ 2004-08-23  0:59 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 302 bytes --]

A simplification,

        * socket.c (scm_from_ipv6): Just use mpz_import.  Don't bother trying
        to fit scm_from_ulong_long, since that uses mpz_import anyway.  Don't
        bother trying to fit scm_from_ulong, not really worth the trouble if
        addresses are more than 4 bytes usually.


[-- Attachment #2: socket.c.ipv6.diff --]
[-- Type: text/plain, Size: 1808 bytes --]

--- socket.c.~1.107.~	2004-08-20 11:00:38.000000000 +1000
+++ socket.c	2004-08-22 13:31:48.000000000 +1000
@@ -278,55 +278,7 @@
 static SCM
 scm_from_ipv6 (const scm_t_uint8 *src)
 {
-  int i = 0;
-  const scm_t_uint8 *ptr = src;
-  int num_zero_bytes = 0;
-  scm_t_uint8 addr[16];
-
-  /* count leading zeros (since we know it's bigendian, they'll be first) */ 
-  while (i < 16)
-    {
-      if (*ptr) break;
-      num_zero_bytes++;
-      i++;
-    }
-
-  if (SCM_SIZEOF_UNSIGNED_LONG_LONG != 0) /* compiler should optimize this */
-    {
-      if ((16 - num_zero_bytes) <= sizeof (unsigned long long))
-        {
-          /* it fits */
-          unsigned long long x;
-          
-          FLIPCPY_NET_HOST_128(addr, src);
-#ifdef WORDS_BIGENDIAN
-          memcpy (&x, addr + (16 - sizeof (x)), sizeof (x));
-#else
-          memcpy (&x, addr, sizeof (x));
-#endif
-          return scm_from_ulong_long (x);
-        }
-    }
-  else
-    {
-      if ((16 - num_zero_bytes) <= sizeof (unsigned long))
-        {
-          /* this is just so that we use INUM where possible.  */
-          unsigned long x;
-
-          FLIPCPY_NET_HOST_128(addr, src);          
-#ifdef WORDS_BIGENDIAN
-          memcpy (&x, addr + (16 - sizeof (x)), sizeof (x));
-#else
-          memcpy (&x, addr, sizeof (x));
-#endif
-          return scm_from_ulong (x);
-        }
-    }
-  /* otherwise get the big hammer */
-  {
     SCM result = scm_i_mkbig ();
-    
     mpz_import (SCM_I_BIG_MPZ (result),
                 1, /* chunk */
                 1, /* big-endian chunk ordering */
@@ -335,7 +287,6 @@
                 0, /* "nails" -- leading unused bits per chunk */
                 src);
     return scm_i_normbig (result);
-  }
 }  
 
 /* convert a host ordered SCM integer to a 128 bit IPv6 address in

[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2004-09-21  0:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-23  0:59 scm_from_ipv6 Kevin Ryde
2004-08-23 10:27 ` scm_from_ipv6 Marius Vollmer
2004-08-23 12:25   ` mpz_import (was: scm_from_ipv6) Andreas Vögele
2004-08-23 13:19     ` mpz_import Marius Vollmer
2004-08-29 15:33       ` mpz_import Andreas Vögele
2004-08-31  7:47         ` mpz_import Andreas Vögele
2004-09-20 23:21           ` mpz_import Marius Vollmer
2004-09-21  0:28         ` mpz_import Marius Vollmer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).