* gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/guile.scm (guile-gdbm-ffi)[inputs]: Move above arguments. Add the patch, and the 'patch' program. [propagated-inputs]: Move above arguments. [arguments]: In the builder, add code to apply the patch.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 1da99396dc65993ba34ac0370ca5d6acda6a3322 Mon Sep 17 00:00:00 2001
 | |
| From: Mark H Weaver <mhw@netris.org>
 | |
| Date: Sun, 18 Mar 2018 07:02:37 -0400
 | |
| Subject: [PATCH] Add support for gdbm-1.14.
 | |
| 
 | |
| As of gdbm-1.14, 'gdbm_errno' no longer exists as a binary interface.
 | |
| It has been replaced by 'gdbm_errno_location', a function that returns
 | |
| int*.  We now use this new interface if it's available.
 | |
| ---
 | |
|  gdbm.scm | 18 ++++++++++++++++--
 | |
|  1 file changed, 16 insertions(+), 2 deletions(-)
 | |
| 
 | |
| diff --git a/gdbm.scm b/gdbm.scm
 | |
| index b92992f..4d38cc3 100644
 | |
| --- a/gdbm.scm
 | |
| +++ b/gdbm.scm
 | |
| @@ -17,6 +17,9 @@
 | |
|  ;; You should have received a copy of the GNU General Public License
 | |
|  ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
 | |
|  
 | |
| +;; Modified by Mark H Weaver <mhw@netris.org> in March 2018 to support
 | |
| +;; gdbm-1.14 with its new 'gdbm_errno_location' interface.
 | |
| +
 | |
|  (define-module (gdbm)
 | |
|    #:use-module (system foreign)
 | |
|    #:use-module (rnrs bytevectors)
 | |
| @@ -151,10 +154,21 @@
 | |
|  
 | |
|  ;;; errors
 | |
|  
 | |
| -(define %errno (dynamic-pointer "gdbm_errno" libgdbm))
 | |
| +(define %list-int
 | |
| +  (list int))
 | |
| +
 | |
| +(define (dereference-int ptr)
 | |
| +  (apply (lambda (errno) errno)
 | |
| +         (parse-c-struct ptr %list-int)))
 | |
| +
 | |
| +(define %errno-location
 | |
| +  (or (false-if-exception
 | |
| +       (let ((func (dynamic-func "gdbm_errno_location" libgdbm)))
 | |
| +         (pointer->procedure '* func '())))
 | |
| +      (const (dynamic-pointer "gdbm_errno" libgdbm))))
 | |
|  
 | |
|  (define (gdbm-errno)
 | |
| -  (pointer-address (dereference-pointer %errno)))
 | |
| +  (dereference-int (%errno-location)))
 | |
|  
 | |
|  (define (gdbm-error)
 | |
|    (error (pointer->string (%gdbm-strerror (gdbm-errno)))))
 | |
| -- 
 | |
| 2.16.2
 | |
| 
 |