Update of /cvsroot/scsh/scsh-0.6/scsh
In directory usw-pr-cvs1:/tmp/cvs-serv4716/scsh
Modified Files:
flock.scm flock1.c flock1.h
Removed Files:
flock.c
Log Message:
Removed remaining define-foreign. Flock code is cig-less now.
Index: flock.scm
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/flock.scm,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** flock.scm 1999/09/23 23:02:50 1.3
--- flock.scm 2001/08/08 12:52:37 1.4
***************
*** 9,50 ****
;;;;;;;;;;;;;;;;;;;;;;;
! (foreign-init-name "flock")
-
- (foreign-source
- "#include <sys/types.h>"
- "#include <unistd.h>"
- "#include <fcntl.h>"
- ""
- "extern int errno;"
- ""
- "/* Make sure foreign-function stubs interface to the C funs correctly: */"
- "#include \"flock1.h\""
- ""
- "#define errno_or_false(x) (((x) == -1) ? s48_enter_fixnum(errno) :
S48_FALSE)"
- "" "")
-
- (define-foreign %set-lock (set_lock (integer fd)
- (integer cmd)
- (integer type)
- (integer whence)
- (integer start)
- (integer len))
- (to-scheme integer errno_or_false))
-
- (define-foreign %get-lock (get_lock (integer fd)
- (integer cmd)
- (integer type)
- (integer whence)
- (integer start)
- (integer len))
- (to-scheme integer errno_or_false)
- integer ; lock type
- integer ; whence
- integer ; start
- integer ; len
- integer) ; pid
-
-
;;; The LOCK record type
;;;;;;;;;;;;;;;;;;;;;;;;
--- 9,20 ----
;;;;;;;;;;;;;;;;;;;;;;;
! (define-stubless-foreign %set-lock/eintr (fd cmd type whence start len)
! "set_lock")
! (define-retrying-syscall %set-lock %set-lock/eintr)
!
! (define-stubless-foreign %get-lock/eintr (fd cmd type whence start len)
! "get_lock")
! (define-retrying-syscall %get-lock %get-lock/eintr)
;;; The LOCK record type
;;;;;;;;;;;;;;;;;;;;;;;;
***************
*** 98,135 ****
;;;;;;;;;;;;;;;;;;;;;
! (define-errno-syscall (lock-region fdes lock)
! (lambda (fdes lock)
! (call-lock-region %set-lock fcntl/set-record-lock fdes lock)))
;;; Return true/false indicating success/failure.
(define (lock-region/no-block fdes lock)
! (cond ((call-lock-region %set-lock fcntl/set-record-lock-no-block fdes
lock)
! => (lambda (errno)
! (cond ((or (= errno errno/again) (= errno errno/acces)) #f)
! ((= errno errno/intr) (lock-region/no-block fdes lock))
! (else (errno-error errno lock-region/no-block fdes lock)))))
! (else #t)))
!
;;; Return first lock that conflicts w/LOCK; if none, return #f.
(define (get-lock-region fdes lock)
! (receive (err type whence start len pid)
! (call-lock-region %get-lock fcntl/get-record-lock fdes lock)
! (cond ((not err)
(and (not (= type lock/release))
(make-%lock-region (= type lock/write) start len whence
(pid->proc pid 'create))))
! ((= err errno/intr) (get-lock-region fdes lock))
! (else (errno-error err get-lock-region fdes lock)))))
! (define-errno-syscall (unlock-region fdes lock)
! (lambda (fdes lock)
! (%set-lock fdes fcntl/set-record-lock lock/release
! (lock-region:whence lock)
! (lock-region:start lock)
! (lock-region:len lock))))
--- 68,101 ----
;;;;;;;;;;;;;;;;;;;;;
! (define (lock-region fdes lock)
! (if (not (lock-region/no-block fdes lock))
! (begin
! (relinquish-timeslice)
! (lock-region fdes lock))))
;;; Return true/false indicating success/failure.
(define (lock-region/no-block fdes lock)
! (with-errno-handler
! ((errno data)
! ((errno/again errno/acces) #f))
! (call-lock-region %set-lock fcntl/set-record-lock-no-block fdes lock)
! #t))
;;; Return first lock that conflicts w/LOCK; if none, return #f.
(define (get-lock-region fdes lock)
! (apply (lambda (type whence start len pid)
(and (not (= type lock/release))
(make-%lock-region (= type lock/write) start len whence
(pid->proc pid 'create))))
! (call-lock-region %get-lock fcntl/get-record-lock fdes lock)))
! (define (unlock-region fdes lock)
! (%set-lock fdes fcntl/set-record-lock lock/release
! (lock-region:whence lock)
! (lock-region:start lock)
! (lock-region:len lock)))
Index: flock1.c
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/flock1.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** flock1.c 1999/09/14 13:32:01 1.1
--- flock1.c 2001/08/08 12:52:37 1.2
***************
*** 9,41 ****
#include <unistd.h>
#include <fcntl.h>
/* Make sure our exports match up w/the implementation: */
#include "flock1.h"
! int set_lock(int fd, int cmd, int type, int whence, int start, int len)
{
struct flock lock;
! lock.l_type = type;
! lock.l_whence = whence;
! lock.l_start = start;
! lock.l_len = len;
! return(fcntl(fd, cmd, &lock));
! }
! int get_lock(int fd, int cmd, int type, int whence, int start, int len,
! int *rtype, int *rwhence, int *rstart, int *rlen, int *rpid)
{
struct flock lock;
int ret;
! lock.l_type = type;
! lock.l_whence = whence;
! lock.l_start = start;
! lock.l_len = len;
! ret = fcntl(fd, F_GETLK, &lock);
! *rtype = lock.l_type;
! *rwhence = lock.l_whence;
! *rstart = lock.l_start;
! *rlen = lock.l_len;
! *rpid = lock.l_pid;
! return(ret);
! }
--- 9,58 ----
#include <unistd.h>
#include <fcntl.h>
+ #include <errno.h>
/* Make sure our exports match up w/the implementation: */
+ #include "scheme48.h"
#include "flock1.h"
! s48_value set_lock(s48_value fd, s48_value cmd, s48_value type,
! s48_value whence, s48_value start, s48_value len)
{
struct flock lock;
! int retval;
! lock.l_type = s48_extract_integer (type);
! lock.l_whence = s48_extract_integer (whence);
! lock.l_start = s48_extract_integer (start);
! lock.l_len = s48_extract_integer (len);
! retval = fcntl(s48_extract_fixnum (fd), s48_extract_integer (cmd), &lock);
! if (retval == -1)
! s48_raise_os_error_6 (errno, fd, cmd, type, whence, start, len);
! return S48_UNSPECIFIC;
! }
! s48_value get_lock(s48_value fd, s48_value cmd, s48_value type,
! s48_value whence, s48_value start, s48_value len)
{
struct flock lock;
int ret;
! lock.l_type = s48_extract_integer (type);
! lock.l_whence = s48_extract_integer (whence);
! lock.l_start = s48_extract_integer (start);
! lock.l_len = s48_extract_integer (len);
! ret = fcntl(s48_extract_fixnum (fd), F_GETLK, &lock);
! if (ret == -1)
! s48_raise_os_error_6 (errno, fd, cmd, type, whence, start, len);
! return
! s48_cons (s48_enter_integer (lock.l_type),
! s48_cons (s48_enter_integer (lock.l_whence),
! s48_cons (s48_enter_integer (lock.l_start),
! s48_cons (s48_enter_integer (lock.l_len),
! s48_cons
! (s48_enter_integer (lock.l_pid),
! S48_NULL)))));
! }
!
! void s48_init_flock(void)
! {
! S48_EXPORT_FUNCTION(set_lock);
! S48_EXPORT_FUNCTION(get_lock);
! }
Index: flock1.h
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/scsh/flock1.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** flock1.h 1999/09/14 13:32:01 1.1
--- flock1.h 2001/08/08 12:52:37 1.2
***************
*** 1,5 ****
/* Exports from flock1.c. */
! int set_lock(int fd, int cmd, int type, int whence, int start, int len);
! int get_lock(int fd, int cmd, int type, int whence, int start, int len,
! int *rtype, int *rwhence, int *rstart, int *rlen, int *rpid);
--- 1,7 ----
/* Exports from flock1.c. */
! s48_value set_lock(s48_value fd, s48_value cmd, s48_value type,
! s48_value whence, s48_value start, s48_value len);
! s48_value get_lock(s48_value fd, s48_value cmd, s48_value type,
! s48_value whence, s48_value start, s48_value len);
! void s48_init_flock(void);
--- flock.c DELETED ---
|