iFix a crash when downloading binary - clic - Clic is an command line interactive client for gopher written in Common LISP Err bitreich.org 70 hgit clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/ URL:git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/ bitreich.org 70 1Log /scm/clic/log.gph bitreich.org 70 1Files /scm/clic/files.gph bitreich.org 70 1Refs /scm/clic/refs.gph bitreich.org 70 1Tags /scm/clic/tag bitreich.org 70 1README /scm/clic/file/README.md.gph bitreich.org 70 1LICENSE /scm/clic/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit d07922a2554fc78ba5efe7e9818e4cb7fbfd6938 /scm/clic/commit/d07922a2554fc78ba5efe7e9818e4cb7fbfd6938.gph bitreich.org 70 1parent 02fda5b5bc6564db46dde5a1a2e2f5e71a75321d /scm/clic/commit/02fda5b5bc6564db46dde5a1a2e2f5e71a75321d.gph bitreich.org 70 hAuthor: Solene Rapenne URL:mailto:solene@perso.pw bitreich.org 70 iDate: Tue, 2 Jan 2018 10:22:35 +0100 Err bitreich.org 70 i Err bitreich.org 70 iFix a crash when downloading binary Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M clic.lisp | 24 +++++++++++++++--------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 15 insertions(+), 9 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/clic.lisp b/clic.lisp /scm/clic/file/clic.lisp.gph bitreich.org 70 i@@ -274,15 +274,19 @@ Err bitreich.org 70 i ;; not terminal = write to stdio Err bitreich.org 70 i (if (ttyp) Err bitreich.org 70 i ;; save into a file in /tmp Err bitreich.org 70 i- (let ((filename (subseq uri (1+ (position #\/ uri :from-end t))))) Err bitreich.org 70 i- (with-open-file (output (concatenate 'string "/tmp/" filename) Err bitreich.org 70 i+ (let* ((filename (subseq uri (1+ (position #\/ uri :from-end t)))) Err bitreich.org 70 i+ (path (concatenate 'string "/tmp/" filename))) Err bitreich.org 70 i+ (with-open-file (output path Err bitreich.org 70 i :element-type '(unsigned-byte 8) Err bitreich.org 70 i :direction :output :if-exists :supersede) Err bitreich.org 70 i (let ((buf (make-array 4096 :element-type '(unsigned-byte 8)))) Err bitreich.org 70 i (loop for pos = (read-sequence buf stream) Err bitreich.org 70 i while (plusp pos) Err bitreich.org 70 i do Err bitreich.org 70 i- (write-sequence buf output :end pos))))) Err bitreich.org 70 i+ (format t ".") Err bitreich.org 70 i+ (force-output) Err bitreich.org 70 i+ (write-sequence buf output :end pos))) Err bitreich.org 70 i+ (format t "~%File downloaded into ~a (~a bytes)~%" path (file-length output)))) Err bitreich.org 70 i Err bitreich.org 70 i ;; write to the standard output Err bitreich.org 70 i (let ((buf (make-array 4096 :element-type '(unsigned-byte 8)))) Err bitreich.org 70 i@@ -474,9 +478,10 @@ Err bitreich.org 70 i :output :interactive)) Err bitreich.org 70 i ;; display last menu Err bitreich.org 70 i (pop *history*) Err bitreich.org 70 i- (setf *buffer* (copy-array *previous-buffer*)) Err bitreich.org 70 i- (setf *links* (make-hash-table)) Err bitreich.org 70 i- (display-buffer "1"))) Err bitreich.org 70 i+ (when *previous-buffer* Err bitreich.org 70 i+ (setf *buffer* (copy-array *previous-buffer*)) Err bitreich.org 70 i+ (setf *links* (make-hash-table)) Err bitreich.org 70 i+ (display-buffer "1")))) Err bitreich.org 70 i Err bitreich.org 70 i ;; image Err bitreich.org 70 i ((or Err bitreich.org 70 i@@ -492,9 +497,10 @@ Err bitreich.org 70 i (location-uri location) Err bitreich.org 70 i :from-end t))))))) Err bitreich.org 70 i (pop *history*) Err bitreich.org 70 i- (setf *buffer* (copy-array *previous-buffer*)) Err bitreich.org 70 i- (setf *links* (make-hash-table)) Err bitreich.org 70 i- (display-buffer "1")) Err bitreich.org 70 i+ (when *previous-buffer* Err bitreich.org 70 i+ (setf *buffer* (copy-array *previous-buffer*)) Err bitreich.org 70 i+ (setf *links* (make-hash-table)) Err bitreich.org 70 i+ (display-buffer "1"))) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i ;;;; output is a menu ? Err bitreich.org 70 .