summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/socket.tl25
1 files changed, 14 insertions, 11 deletions
diff --git a/share/txr/stdlib/socket.tl b/share/txr/stdlib/socket.tl
index 5f9d3d7c..2571aef1 100644
--- a/share/txr/stdlib/socket.tl
+++ b/share/txr/stdlib/socket.tl
@@ -62,17 +62,20 @@
`@a.@b.@c.@d@p`)))
(defun sys:in6addr-condensed-text (numeric-pieces)
- (let* ((notyet t)
- (texts (window-mappend
- 1 nil
- (lambda (pre chunk post)
- (cond
- ((and notyet (zerop (car chunk)) (cdr chunk))
- (zap notyet)
- (if (and post pre) '("") '(":")))
- (t (mapcar (op format nil "~x") chunk))))
- [partition-by zerop numeric-pieces])))
- `@{texts ":"}`))
+ (let ((parted [partition-by zerop numeric-pieces]))
+ (if (or (cdr parted) (nzerop (caar parted)))
+ (let* ((notyet t)
+ (texts (window-mappend
+ 1 nil
+ (lambda (pre chunk post)
+ (cond
+ ((and notyet (zerop (car chunk)) (cdr chunk))
+ (zap notyet)
+ (if (and post pre) '("") '(":")))
+ (t (mapcar (op format nil "~x") chunk))))
+ parted)))
+ `@{texts ":"}`)
+ "::")))
(defun str-in6addr (addr : port)
(let ((str (if (and (<= (width addr) 48)