From 5c008277f321c77f33505073a70af4aa05d9ee51 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Mon, 30 Apr 2018 16:06:59 +0200 Subject: [PATCH 2/5] Refactor chicken.time.posix so it no longer refers to chicken.posix Similar to the previous commit. One small change: - Moved ##sys#decode-seconds from library.scm to posix-common.scm and renamed it to decode-seconds. It is used nowhere else. --- library.scm | 1 - posix-common.scm | 22 +++++++++++++--------- posix.scm | 48 +++++++++++++++++++++++++----------------------- posixunix.scm | 6 +++--- posixwin.scm | 6 +++--- types.db | 18 ++++++++++-------- 6 files changed, 54 insertions(+), 47 deletions(-) diff --git a/library.scm b/library.scm index febb6f3c..d05d85c2 100644 --- a/library.scm +++ b/library.scm @@ -1044,7 +1044,6 @@ EOF (define ##sys#ensure-heap-reserve (##core#primitive "C_ensure_heap_reserve")) (define ##sys#symbol-table-info (##core#primitive "C_get_symbol_table_info")) (define ##sys#memory-info (##core#primitive "C_get_memory_info")) -(define ##sys#decode-seconds (##core#primitive "C_decode_seconds")) (define (##sys#start-timer) (##sys#gc #t) diff --git a/posix-common.scm b/posix-common.scm index 29ab9687..3218d06d 100644 --- a/posix-common.scm +++ b/posix-common.scm @@ -527,20 +527,24 @@ EOF ;;; Time related things: +(define decode-seconds (##core#primitive "C_decode_seconds")) + (define (check-time-vector loc tm) (##sys#check-vector tm loc) (when (fx< (##sys#size tm) 10) (##sys#error loc "time vector too short" tm) ) ) -(define (seconds->local-time #!optional (secs (current-seconds))) - (##sys#check-exact-integer secs 'seconds->local-time) - (##sys#decode-seconds secs #f) ) +(set! chicken.time.posix#seconds->local-time + (lambda (#!optional (secs (current-seconds))) + (##sys#check-exact-integer secs 'seconds->local-time) + (decode-seconds secs #f) )) -(define (seconds->utc-time #!optional (secs (current-seconds))) - (##sys#check-exact-integer secs 'seconds->utc-time) - (##sys#decode-seconds secs #t) ) +(set! chicken.time.posix#seconds->utc-time + (lambda (#!optional (secs (current-seconds))) + (##sys#check-exact-integer secs 'seconds->utc-time) + (decode-seconds secs #t) ) ) -(define seconds->string +(set! chicken.time.posix#seconds->string (let ([ctime (foreign-lambda c-string "C_ctime" integer)]) (lambda (#!optional (secs (current-seconds))) (##sys#check-exact-integer secs 'seconds->string) @@ -549,7 +553,7 @@ EOF (##sys#substring str 0 (fx- (##sys#size str) 1)) (##sys#error 'seconds->string "cannot convert seconds to string" secs) ) ) ) ) ) -(define local-time->seconds +(set! chicken.time.posix#local-time->seconds (let ((tm-size (foreign-value "sizeof(struct tm)" int))) (lambda (tm) (check-time-vector 'local-time->seconds tm) @@ -558,7 +562,7 @@ EOF (##sys#error 'local-time->seconds "cannot convert time vector to seconds" tm) t))))) -(define time->string +(set! chicken.time.posix#time->string (let ((asctime (foreign-lambda c-string "C_asctime" scheme-object scheme-pointer)) (strftime (foreign-lambda c-string "C_strftime" scheme-object scheme-object scheme-pointer)) (tm-size (foreign-value "sizeof(struct tm)" int))) diff --git a/posix.scm b/posix.scm index bdd8c5d2..e58b6247 100644 --- a/posix.scm +++ b/posix.scm @@ -64,6 +64,7 @@ (import scheme) +;; These are all set! inside the posix module (define create-fifo) (define create-symbolic-link) (define read-symbolic-link) @@ -161,6 +162,26 @@ (define set-file-times!) ) ; chicken.file.posix + +(module chicken.time.posix + (seconds->utc-time utc-time->seconds seconds->local-time + seconds->string local-time->seconds string->time time->string + local-timezone-abbreviation) + +(import scheme) + +;; These are all set! inside the posix module +(define seconds->utc-time) +(define utc-time->seconds) +(define seconds->local-time) +(define seconds->string) +(define local-time->seconds) +(define string->time) +(define time->string) +(define local-timezone-abbreviation) +) ; chicken.time.posix + + ;; This module really does nothing. It is used to keep all the posix ;; stuff in one place, in a clean namespace. The included file will ;; set! values from the modules defined above. @@ -171,14 +192,12 @@ current-effective-group-id current-effective-user-id current-effective-user-name current-group-id current-process-id current-user-id current-user-name - local-time->seconds local-timezone-abbreviation open-input-pipe open-output-pipe parent-process-id process process* process-execute process-fork process-group-id process-run process-signal process-sleep process-spawn process-wait - seconds->local-time seconds->string seconds->utc-time set-alarm! - set-root-directory! set-signal-handler! set-signal-mask! + set-alarm! set-root-directory! set-signal-handler! set-signal-mask! signal-handler signal-mask signal-mask! signal-masked? signal-unmask! signal/abrt signal/alrm signal/break signal/bus signal/chld signal/cont signal/fpe signal/hup signal/ill signal/int signal/io @@ -186,9 +205,8 @@ signal/stop signal/term signal/trap signal/tstp signal/urg signal/usr1 signal/usr2 signal/vtalrm signal/winch signal/xcpu signal/xfsz signals-list spawn/detach spawn/nowait - spawn/nowaito spawn/overlay spawn/wait string->time - time->string user-information - utc-time->seconds with-input-from-pipe with-output-to-pipe) + spawn/nowaito spawn/overlay spawn/wait user-information + with-input-from-pipe with-output-to-pipe) (import scheme chicken.base @@ -210,6 +228,7 @@ ) ; chicken.posix [internal, no implib generated] + (module chicken.errno * (import scheme) (define (errno) (##sys#errno)) @@ -255,23 +274,6 @@ ) ; chicken.errno -(module chicken.time.posix - (seconds->utc-time utc-time->seconds seconds->local-time - seconds->string local-time->seconds string->time time->string - local-timezone-abbreviation) - -(import scheme) - -(define seconds->utc-time chicken.posix#seconds->utc-time) -(define utc-time->seconds chicken.posix#utc-time->seconds) -(define seconds->local-time chicken.posix#seconds->local-time) -(define seconds->string chicken.posix#seconds->string) -(define local-time->seconds chicken.posix#local-time->seconds) -(define string->time chicken.posix#string->time) -(define time->string chicken.posix#time->string) -(define local-timezone-abbreviation chicken.posix#local-timezone-abbreviation) -) ; chicken.time.posix - (module chicken.process (qs system system* process-execute process-fork process-run process-signal process-spawn process-wait call-with-input-pipe diff --git a/posixunix.scm b/posixunix.scm index 61943ac8..29cfab7e 100644 --- a/posixunix.scm +++ b/posixunix.scm @@ -1101,7 +1101,7 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) ;;; Time related things: -(define string->time +(set! chicken.time.posix#string->time (let ((strptime (foreign-lambda scheme-object "C_strptime" scheme-object scheme-object scheme-object scheme-pointer)) (tm-size (foreign-value "sizeof(struct tm)" int))) (lambda (tim #!optional (fmt "%a %b %e %H:%M:%S %Z %Y")) @@ -1109,7 +1109,7 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) (##sys#check-string fmt 'string->time) (strptime (##sys#make-c-string tim 'string->time) (##sys#make-c-string fmt) (make-vector 10 #f) (##sys#make-string tm-size #\nul)) ) ) ) -(define utc-time->seconds +(set! chicken.time.posix#utc-time->seconds (let ((tm-size (foreign-value "sizeof(struct tm)" int))) (lambda (tm) (check-time-vector 'utc-time->seconds tm) @@ -1118,7 +1118,7 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) (##sys#error 'utc-time->seconds "cannot convert time vector to seconds" tm) t))))) -(define local-timezone-abbreviation +(set! chicken.time.posix#local-timezone-abbreviation (foreign-lambda* c-string () "\n#if !defined(__CYGWIN__) && !defined(__SVR4) && !defined(__uClinux__) && !defined(__hpux__) && !defined(_AIX)\n" "time_t clock = time(NULL);" diff --git a/posixwin.scm b/posixwin.scm index bccb2ce0..382d8f77 100644 --- a/posixwin.scm +++ b/posixwin.scm @@ -774,7 +774,7 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) ;;; Time related things: -(define local-timezone-abbreviation +(set! chicken.time.posix#local-timezone-abbreviation (foreign-lambda* c-string () "char *z = (_daylight ? _tzname[1] : _tzname[0]);\n" "C_return(z);") ) @@ -992,8 +992,8 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) (define-unimplemented signal-masked?) (define-unimplemented signal-unmask!) (define-unimplemented user-information) -(define-unimplemented utc-time->seconds) -(define-unimplemented string->time) +(set!-unimplemented chicken.time.posix#utc-time->seconds) +(set!-unimplemented chicken.time.posix#string->time) ;; Unix-only definitions (set! chicken.file.posix#fcntl/dupfd 0) diff --git a/types.db b/types.db index 77f3d24c..79044d7a 100644 --- a/types.db +++ b/types.db @@ -2022,6 +2022,16 @@ (chicken.file.posix#set-file-times! (#(procedure #:clean #:enforce) chicken.file.posix#set-file-times! (string #!optional (or false integer) (or false integer)) undefined)) +;; time.posix + +(chicken.time.posix#seconds->local-time (#(procedure #:clean #:enforce) chicken.time.posix#seconds->local-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) +(chicken.time.posix#seconds->string (#(procedure #:clean #:enforce) chicken.time.posix#seconds->string (#!optional integer) string)) +(chicken.time.posix#seconds->utc-time (#(procedure #:clean #:enforce) chicken.time.posix#seconds->utc-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) +(chicken.time.posix#utc-time->seconds (#(procedure #:clean #:enforce) chicken.time.posix#utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer)) +(chicken.time.posix#local-time->seconds (#(procedure #:clean #:enforce) chicken.time.posix#local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer)) +(chicken.time.posix#local-timezone-abbreviation (#(procedure #:clean) chicken.time.posix#local-timezone-abbreviation () string)) +(chicken.time.posix#string->time (#(procedure #:clean #:enforce) chicken.time.posix#string->time (string #!optional string) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) +(chicken.time.posix#time->string (#(procedure #:clean #:enforce) chicken.time.posix#time->string ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum) #!optional string) string)) ;; posix @@ -2040,8 +2050,6 @@ (chicken.posix#current-process-id (#(procedure #:clean) chicken.posix#current-process-id () fixnum)) (chicken.posix#current-user-id (#(procedure #:clean) chicken.posix#current-user-id () fixnum)) (chicken.posix#current-user-name (#(procedure #:clean) chicken.posix#current-user-name () string)) -(chicken.posix#local-time->seconds (#(procedure #:clean #:enforce) chicken.posix#local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer)) -(chicken.posix#local-timezone-abbreviation (#(procedure #:clean) chicken.posix#local-timezone-abbreviation () string)) (chicken.posix#open-input-pipe (#(procedure #:clean #:enforce) chicken.posix#open-input-pipe (string #!optional symbol) input-port)) (chicken.posix#open-output-pipe (#(procedure #:clean #:enforce) chicken.posix#open-output-pipe (string #!optional symbol) output-port)) (chicken.posix#parent-process-id (#(procedure #:clean) chicken.posix#parent-process-id () fixnum)) @@ -2060,9 +2068,6 @@ (chicken.posix#process-spawn (#(procedure #:clean #:enforce) chicken.posix#process-spawn (fixnum string #!optional (list-of string) (list-of (pair string string)) boolean) fixnum)) (chicken.posix#process-wait (#(procedure #:clean #:enforce) chicken.posix#process-wait (#!optional fixnum *) fixnum fixnum fixnum)) -(chicken.posix#seconds->local-time (#(procedure #:clean #:enforce) chicken.posix#seconds->local-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) -(chicken.posix#seconds->string (#(procedure #:clean #:enforce) chicken.posix#seconds->string (#!optional integer) string)) -(chicken.posix#seconds->utc-time (#(procedure #:clean #:enforce) chicken.posix#seconds->utc-time (#!optional integer) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) (chicken.posix#set-alarm! (#(procedure #:clean #:enforce) chicken.posix#set-alarm! (integer) integer)) (chicken.posix#set-root-directory! (#(procedure #:clean #:enforce) chicken.posix#set-root-directory! (string) undefined)) (chicken.posix#set-signal-handler! (#(procedure #:clean #:enforce) chicken.posix#set-signal-handler! (fixnum (or false (procedure (fixnum) . *))) undefined)) @@ -2105,10 +2110,7 @@ (chicken.posix#spawn/nowaito fixnum) (chicken.posix#spawn/detach fixnum) (chicken.posix#process-sleep (#(procedure #:clean #:enforce) chicken.posix#process-sleep (fixnum) fixnum)) -(chicken.posix#string->time (#(procedure #:clean #:enforce) chicken.posix#string->time (string #!optional string) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) -(chicken.posix#time->string (#(procedure #:clean #:enforce) chicken.posix#time->string ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum) #!optional string) string)) (chicken.posix#user-information (#(procedure #:clean #:enforce) chicken.posix#user-information ((or string fixnum) #!optional *) *)) -(chicken.posix#utc-time->seconds (#(procedure #:clean #:enforce) chicken.posix#utc-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer)) (chicken.posix#with-input-from-pipe (#(procedure #:enforce) chicken.posix#with-input-from-pipe (string (procedure () . *) #!optional symbol) . *)) (chicken.posix#with-output-to-pipe (#(procedure #:enforce) chicken.posix#with-output-to-pipe (string (procedure () . *) #!optional symbol) . *)) -- 2.11.0