summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2022-01-07 13:39:33 +0100
committerAndy Wingo <wingo@pobox.com>2022-01-13 09:37:17 +0100
commita0765f564afd56c7a42385d2a3790b3ec2295e3f (patch)
tree7b0e7d9ad8c2a51feacbd24adec29cc343318ee4
parente78bcdc29a196b5fec5fa2c4c6ad8576651de72e (diff)
downloadguile-a0765f564afd56c7a42385d2a3790b3ec2295e3f.tar.gz
scm_to_ipv6 uses scm_to_mpz
* libguile/socket.c (scm_to_ipv6): Use scm_to_mpz.
-rw-r--r--libguile/socket.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/libguile/socket.c b/libguile/socket.c
index e9c658ed7..77cdd74ef 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -255,10 +255,16 @@ scm_to_ipv6 (uint8_t dst[16], SCM src)
else if (SCM_BIGP (src))
{
size_t count;
+ mpz_t z;
- if ((mpz_sgn (SCM_I_BIG_MPZ (src)) < 0)
- || mpz_sizeinbase (SCM_I_BIG_MPZ (src), 2) > 128)
- scm_out_of_range (NULL, src);
+ mpz_init (z);
+ scm_to_mpz (src, z);
+
+ if (mpz_sgn (z) < 0 || mpz_sizeinbase (z, 2) > 128)
+ {
+ mpz_clear (z);
+ scm_out_of_range (NULL, src);
+ }
memset (dst, 0, 16);
mpz_export (dst,
@@ -267,8 +273,8 @@ scm_to_ipv6 (uint8_t dst[16], SCM src)
16, /* chunks are 16 bytes long */
1, /* big-endian byte ordering */
0, /* "nails" -- leading unused bits per chunk */
- SCM_I_BIG_MPZ (src));
- scm_remember_upto_here_1 (src);
+ z);
+ mpz_clear (z);
}
else
scm_wrong_type_arg_msg ("scm_to_ipv6", 0, src, "integer");