From 70c85542e2e81626ea2d48fd0da2c44bfab77ac3 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 28 Sep 2016 23:24:08 +0900 Subject: [PATCH] portability fixes for (chibi log) --- lib/chibi/log.scm | 15 ++++++++------- lib/chibi/log.sld | 10 ++++++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/chibi/log.scm b/lib/chibi/log.scm index f1a2fdbe..356312c4 100644 --- a/lib/chibi/log.scm +++ b/lib/chibi/log.scm @@ -63,7 +63,7 @@ (define (log-normalize-name name) (let ((str (symbol->string name))) (if (string-prefix? "log-" str) - (string->symbol (substring str 4)) + (string->symbol (substring str 4 (string-length str))) name))) (define (log-level-index logger level) @@ -115,8 +115,8 @@ (message (show #f (each-in-list args)))) (string-append prefix - (string-concatenate (string-split message #\newline) - (string-append "\n" prefix)) + (string-join (string-split message #\newline) + (string-append "\n" prefix)) "\n"))) (define (log-compile-prefix spec) @@ -148,7 +148,7 @@ (let ((time (seconds->time (current-seconds)))) (let lp ((ls procs) (res '())) (if (null? ls) - (string-concatenate (reverse res)) + (string-join (reverse res)) (lp (cdr ls) (cons ((car ls) logger time level) res)))))))) (define log-default-prefix @@ -162,7 +162,8 @@ (logger-port-set! logger (current-error-port)))) (define (log-close logger) - (if (output-port? (logger-port logger)) + (if (and (output-port? (logger-port logger)) + (not (eq? (current-error-port) (logger-port logger)))) (close-output-port (logger-port logger)))) ;; Use file-locking to let multiple processes write to the same log @@ -185,13 +186,13 @@ (log-open logger) (lp #f)) (else ; fall back to stderr - (display str (current-error-port)))))) + (write-string str (current-error-port)))))) (let ((locked? (and (logger-locked? logger) (output-port? out) (file-lock out lock/exclusive)))) ;; this is redundant with POSIX O_APPEND ;; (set-file-position! out 0 seek/end) - (display str out) + (write-string str out) (flush-output out) (if locked? (file-lock out lock/unlock)))))))))) diff --git a/lib/chibi/log.sld b/lib/chibi/log.sld index f0dfe760..6a10986b 100644 --- a/lib/chibi/log.sld +++ b/lib/chibi/log.sld @@ -24,16 +24,22 @@ (import (chibi time) (chibi string) (chibi show base)) (cond-expand (chibi - (import (chibi) (chibi filesystem) (chibi process) (chibi system) (srfi 9)) + (import (chibi) (chibi filesystem) (chibi process) (chibi string) + (chibi system) (srfi 9)) (begin + (define write-string display) (define (open-output-file/append path) (let ((fd (open path (+ open/create open/write open/append open/non-block)))) (open-output-file-descriptor fd))))) (else - (import (scheme base)) + (import (scheme base) (scheme char) (scheme file) (chibi string)) (begin + (define-syntax protect + (syntax-rules () + ((protect . x) (guard . x)))) (define open-output-file/append open-output-file) + (define flush-output flush-output-port) (define (file-lock port-or-fileno mode) 'unsupported) (define lock/exclusive 'unsupported) (define lock/unlock 'unsupported)