From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Matt Wette Newsgroups: gmane.lisp.guile.bugs Subject: bug#27782: Acknowledgement ([wishlist] scheme level mmap) Date: Fri, 21 Jul 2017 07:35:31 -0700 Message-ID: <417DAD59-E2A0-43D3-9364-41660CFCD31B@gmail.com> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1500647830 3787 195.159.176.226 (21 Jul 2017 14:37:10 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 21 Jul 2017 14:37:10 +0000 (UTC) To: 27782@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Fri Jul 21 16:37:03 2017 Return-path: Envelope-to: guile-bugs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYZ34-0000EN-FF for guile-bugs@m.gmane.org; Fri, 21 Jul 2017 16:36:58 +0200 Original-Received: from localhost ([::1]:43524 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dYZ36-00017I-L6 for guile-bugs@m.gmane.org; Fri, 21 Jul 2017 10:37:00 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:36135) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dYZ2D-0000bw-Bi for bug-guile@gnu.org; Fri, 21 Jul 2017 10:36:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dYZ2A-0004KL-9a for bug-guile@gnu.org; Fri, 21 Jul 2017 10:36:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:48668) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dYZ2A-0004K4-5Y for bug-guile@gnu.org; Fri, 21 Jul 2017 10:36:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dYZ29-00089E-Oy for bug-guile@gnu.org; Fri, 21 Jul 2017 10:36:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Matt Wette Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Fri, 21 Jul 2017 14:36:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 27782 X-GNU-PR-Package: guile X-GNU-PR-Keywords: Original-Received: via spool by 27782-submit@debbugs.gnu.org id=B27782.150064774231289 (code B ref 27782); Fri, 21 Jul 2017 14:36:01 +0000 Original-Received: (at 27782) by debbugs.gnu.org; 21 Jul 2017 14:35:42 +0000 Original-Received: from localhost ([127.0.0.1]:51345 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYZ1p-00088b-Sd for submit@debbugs.gnu.org; Fri, 21 Jul 2017 10:35:42 -0400 Original-Received: from mail-pf0-f170.google.com ([209.85.192.170]:34023) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dYZ1o-00088P-30 for 27782@debbugs.gnu.org; Fri, 21 Jul 2017 10:35:40 -0400 Original-Received: by mail-pf0-f170.google.com with SMTP id q85so24886604pfq.1 for <27782@debbugs.gnu.org>; Fri, 21 Jul 2017 07:35:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:content-transfer-encoding:mime-version:subject:date:references :to:in-reply-to:message-id; bh=tndBSRmlKBtcRNG/2KZbAu8xymotB4VCxVwliIg0WaU=; b=lJnCg6kwv9TamVwdzkXrCjZ8VBnh1uRJQTE2yz3a4HNcqTF23YuR+IjqvKQKJJzhfm W3p4er3Q3gG3kdY35r74yJvzgJ/Pgb2F2r9Fje88oDv+7S4kAEpdn6CTDzSgtZUcspI8 0VBL9R2S5Y2YFUSOzgUyo8a1kCjg6SKdDi3yU8xUU8sZOTqg5Wl2STNAhKKFphJ/FqUV k5npjDpIJLEgTLmrag+KIaE7qo3054AIRNJoqllyT9QxBbhq8ik771EyUZf+aYXeDP/Q 1cgTnnBNfLgnxCd/neF/neSd5VJhCXSVJsU3cOQ1PYPCk+9Z5IhKqJJ5NG+zZ7qQfA8x S/0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:date:references:to:in-reply-to:message-id; bh=tndBSRmlKBtcRNG/2KZbAu8xymotB4VCxVwliIg0WaU=; b=jPyMPCFtmQ9dTvzTq8BEsgw2ekYELsbTQMFi/WzDGdGtuK28ljKNJ9Mj/w+MDNa/vJ sgiZ+u4523tQ5GzdKckslyQiRh8Dm/HqweDOb6DcLwEASuAgfyz9HS98k+WIa4wMjoqv cw/NU+HWVYTPyIAi/sjBE0XhYHzzb+UnF9M+Hcmn3OMh0u14TsI/O/pIjRE2MqFg3/1J XCvl5IyhUP7nTYFldwfPj1Kaf9UbmfegpT4GknLR126L3MAlrJhwRCrUDLPXMxCxa1XZ DK84k/DzifCUGINVZ4qAKRpHNzoy9H8KVq8xi7JbJFy8k9SIOe4/B//5qMSdJ00HB2xu 2i6Q== X-Gm-Message-State: AIVw113axFwVtaIy+QHSQENAGZnW/9ZwBL5IX14/IGY5iY4CHfMiqR3u TlpEvTDuJeOlTl6ZBuY= X-Received: by 10.84.149.197 with SMTP id a5mr8360951plh.3.1500647733442; Fri, 21 Jul 2017 07:35:33 -0700 (PDT) Original-Received: from nautilus.championbroadband.com (216-165-236-44.championbroadband.com. [216.165.236.44]) by smtp.gmail.com with ESMTPSA id v18sm9730043pfg.164.2017.07.21.07.35.32 for <27782@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Jul 2017 07:35:32 -0700 (PDT) In-Reply-To: X-Mailer: Apple Mail (2.3273) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.org gmane.lisp.guile.bugs:8834 Archived-At: Works on guile-2.2.2: > (use-modules (system foreign)) > (define raw (mmap %null-pointer #x1000 (logior PROT_READ PROT_WRITE) (logior MAP_ANON MAP_PRIVATE) -1 0)) > (munmap raw #x1000) $ diff filesys.c.orig filesys.c + #include "mmap.c" + void scm_init_filesys () { + MMAP_DEFS; #ifdef HAVE_POSIX scm_tc16_dir = scm_make_smob_type ("directory", 0); scm_set_smob_free (scm_tc16_dir, scm_dir_free); mmap.c-post2: #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_SYS_MMAN_H # include # include #endif #include "libguile/_scm.h" #include "libguile/smob.h" #include "libguile/fdes-finalizers.h" #include "libguile/feature.h" SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM offset); SCM_API SCM scm_munmap (SCM addr, SCM len); #if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS) // python mmap makes the last four args optional // should use fd=-1 default on mac // The following works: // > (use-modules (system foreign)) // > (define raw (mmap %null-pointer #x1000 (logior PROT_READ PROT_WRITE) // (logior MAP_ANON MAP_PRIVATE) -1 0)) // > (munmap raw #x1000) SCM_DEFINE (scm_mmap, "mmap", 6, 0, 0, (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM offset), "See the man page. returns a foreign pointer which one would" "ordinarily convert to bytevector using pointer->bytevector. " "Note that the region returned by mmap is not (?) searched " "by the garbage collector." "@example\n(define reg\n (pointer->bytevector\n " "(mmap %null-pointer #x10000 (logior PROT_READ PROT_WRITE) " "(logior MAP_ANON MAP_PRIVATE) -1 0) #x1000))" "@end example" ) #define FUNC_NAME s_scm_mmap { void *c_mem, *c_addr; size_t c_len; int c_prot, c_flags, c_fd; scm_t_off c_offset; SCM_VALIDATE_POINTER (1, addr); c_addr = (void *) SCM_POINTER_VALUE (addr); c_len = scm_to_size_t (len); c_prot = scm_to_int (prot); c_flags = scm_to_int (flags); c_fd = scm_to_int (fd); c_offset = SCM_UNBNDP (offset) ? 0: scm_to_off_t (offset); c_mem = mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset); if (c_mem == MAP_FAILED) SCM_SYSERROR; /* errno set */ else return scm_from_pointer (c_mem, NULL); } #undef FUNC_NAME SCM_DEFINE (scm_munmap, "munmap", 2, 0, 0, (SCM addr, SCM len), "See the man page. Given foreign pointer unmap." ) #define FUNC_NAME s_scm_munmap { void *c_addr; size_t c_len; int c_res; SCM_VALIDATE_POINTER (1, addr); c_addr = (void *) SCM_POINTER_VALUE (addr); c_len = scm_to_size_t (len); c_res = munmap(c_addr, c_len); if (c_res == -1) SCM_SYSERROR; /* errno set */ else return scm_from_int (c_res); } #endif /* HAVE_SYS_MMAN_H */ #if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS) #define MMAP_DEFS \ scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE)); \ scm_c_define ("PROT_READ", scm_from_int (PROT_READ)); \ scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE)); \ scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC)); \ \ scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS)); \ scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON)); \ scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE)); \ scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED)); \ scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE)); \ scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE)); \ scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED)); \ scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE)) #else #define MMAP_DEFS /* */ #endif /* HAVE_SYS_MMAN_H */