scsh-checkins
[Top] [All Lists]

[Scsh-checkins] CVS: scsh-0.6/scsh flock.scm,1.3,1.4 flock1.c,1.1,1.2 fl

To: scsh-checkins@lists.sourceforge.net
Subject: [Scsh-checkins] CVS: scsh-0.6/scsh flock.scm,1.3,1.4 flock1.c,1.1,1.2 flock1.h,1.1,1.2 flock.c,1.6,NONE
From: Martin Gasbichler <mainzelm@users.sourceforge.net>
Date: Wed, 08 Aug 2001 05:52:39 -0700
List-id: <scsh-checkins.lists.sourceforge.net>
Sender: scsh-checkins-admin@lists.sourceforge.net
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 ---



<Prev in Thread] Current Thread [Next in Thread>
  • [Scsh-checkins] CVS: scsh-0.6/scsh flock.scm,1.3,1.4 flock1.c,1.1,1.2 flock1.h,1.1,1.2 flock.c,1.6,NONE, Martin Gasbichler <=