[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-mcron] [PATCH 33/33] core: Use SRFI-9 records for the job data stru
From: |
Mathieu Lirzin |
Subject: |
[Bug-mcron] [PATCH 33/33] core: Use SRFI-9 records for the job data structure. |
Date: |
Sun, 27 Sep 2015 23:28:02 +0200 |
* scm/mcron/mcron-core.scm <job>: New record type. This Replaces a
vector data structure. All consumers changed.
---
scm/mcron/mcron-core.scm | 93 ++++++++++++++++++++++++------------------------
1 file changed, 46 insertions(+), 47 deletions(-)
diff --git a/scm/mcron/mcron-core.scm b/scm/mcron/mcron-core.scm
index 518bcac..a10ec97 100644
--- a/scm/mcron/mcron-core.scm
+++ b/scm/mcron/mcron-core.scm
@@ -1,3 +1,4 @@
+;; Copyright (C) 2015 Mathieu Lirzin
;; Copyright (C) 2003 Dale Mellor
;;
;; This file is part of GNU mcron.
@@ -19,6 +20,7 @@
(define-module (mcron core)
#:use-module (mcron environment)
+ #:use-module (srfi srfi-9)
#:export (add-job
remove-user-jobs
get-schedule
@@ -38,7 +40,7 @@
;; The list of all jobs known to the system. Each element of the list is
;;
-;; (vector user next-time-function action environment displayable next-time)
+;; (make-job user next-time-function action environment displayable next-time)
;;
;; where action must be a procedure, and the environment is an alist of
;; modifications that need making to the UNIX environment before the action is
@@ -60,18 +62,17 @@
(define (use-system-job-list) (set! configuration-source 'system))
(define (use-user-job-list) (set! configuration-source 'user))
-
-
-;; Convenience functions for getting and setting the elements of a job object.
-
-(define (job:user job) (vector-ref job 0))
-(define (job:next-time-function job) (vector-ref job 1))
-(define (job:action job) (vector-ref job 2))
-(define (job:environment job) (vector-ref job 3))
-(define (job:displayable job) (vector-ref job 4))
-(define (job:next-time job) (vector-ref job 5))
-
-
+;; A cron job.
+(define-record-type <job>
+ (make-job user time-proc action environment displayable next-time)
+ job?
+ (user job:user) ;string : user passwd entry
+ (time-proc job:next-time-function) ;proc : with one 'time' parameter
+ (action job:action) ;thunk : user's code
+ (environment job:environment) ;alist : environment variables
+ (displayable job:displayable) ;string : visible in schedule
+ (next-time job:next-time ;number : time in UNIX format
+ job:next-time-set!))
;; Remove jobs from the user-job-list belonging to this user.
@@ -97,12 +98,12 @@
(define (add-job time-proc action displayable configuration-time
configuration-user)
- (let ((entry (vector configuration-user
- time-proc
- action
- (get-current-environment-mods-copy)
- displayable
- (time-proc configuration-time))))
+ (let ((entry (make-job configuration-user
+ time-proc
+ action
+ (get-current-environment-mods-copy)
+ displayable
+ (time-proc configuration-time))))
(if (eq? configuration-source 'user)
(set! user-job-list (cons entry user-job-list))
(set! system-job-list (cons entry system-job-list)))))
@@ -165,18 +166,17 @@
(lambda ()
(do ((count count (- count 1)))
((eqv? count 0))
- (and-let* ((next-jobs (find-next-jobs))
- (time (car next-jobs))
- (date-string (strftime "%c %z\n" (localtime time))))
- (for-each (lambda (job)
- (display date-string)
- (display (job:displayable job))
- (newline)(newline)
- (vector-set! job
- 5
- ((job:next-time-function job)
- (job:next-time
job))))
- (cdr next-jobs)))))))
+ (and-let*
+ ((next-jobs (find-next-jobs))
+ (time (car next-jobs))
+ (date-string (strftime "%c %z\n" (localtime time))))
+ (for-each (lambda (job)
+ (display date-string)
+ (display (job:displayable job))
+ (newline)(newline)
+ (job:next-time-set! job ((job:next-time-function job)
+ (job:next-time job))))
+ (cdr next-jobs)))))))
@@ -195,22 +195,21 @@
;; to run.
(define (run-jobs jobs-list)
- (for-each (lambda (job)
- (if (eqv? (primitive-fork) 0)
- (begin
- (setgid (passwd:gid (job:user job)))
- (setuid (passwd:uid (job:user job)))
- (chdir (passwd:dir (job:user job)))
- (modify-environment (job:environment job) (job:user job))
- ((job:action job))
- (primitive-exit 0))
- (begin
- (set! number-children (+ number-children 1))
- (vector-set! job
- 5
- ((job:next-time-function job)
- (current-time))))))
- jobs-list))
+ (for-each
+ (lambda (job)
+ (if (eqv? (primitive-fork) 0)
+ (begin
+ (setgid (passwd:gid (job:user job)))
+ (setuid (passwd:uid (job:user job)))
+ (chdir (passwd:dir (job:user job)))
+ (modify-environment (job:environment job) (job:user job))
+ ((job:action job))
+ (primitive-exit 0))
+ (begin
+ (set! number-children (+ number-children 1))
+ (job:next-time-set! job ((job:next-time-function job)
+ (current-time))))))
+ jobs-list))
- [Bug-mcron] [PATCH 28/33] main: Remove unused 'regular-file?' procedure., (continued)
- [Bug-mcron] [PATCH 28/33] main: Remove unused 'regular-file?' procedure., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 24/33] mcron: Use symbolic constants., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 25/33] mcron: Rework comments., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 20/33] build: Enable silent rules by default., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 13/33] main: Turn 'command-name' into a thunk., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 19/33] build: Compile and install '.go' files., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 18/33] main: Add (mcron main) module., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 30/33] Define directory-local variables for Emacs., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 31/33] main: Add 'proc-in-directory'., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 32/33] main: Remove 'valid-user'., Mathieu Lirzin, 2015/09/27
- [Bug-mcron] [PATCH 33/33] core: Use SRFI-9 records for the job data structure.,
Mathieu Lirzin <=