This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.28.9000-257-g2e96e98


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  2e96e9808eb6e76304907123455668894147d836 (commit)
      from  6e36266cec43aac8bb22457428343fcbd523f108 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=2e96e9808eb6e76304907123455668894147d836

commit 2e96e9808eb6e76304907123455668894147d836
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sat Nov 3 22:47:57 2018 +0100

    hurd: Support msync
    
    	* sysdeps/mach/hurd/msync.c: New file.

diff --git a/ChangeLog b/ChangeLog
index 497f5b7..ef268e8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2018-11-03  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* sysdeps/mach/hurd/msync.c: New file.
+
 2018-11-02  Florian Weimer  <fweimer@redhat.com>
 
 	* support/shell-container.c (copy_func): Call
diff --git a/sysdeps/mach/hurd/msync.c b/sysdeps/mach/hurd/msync.c
new file mode 100644
index 0000000..3e41503
--- /dev/null
+++ b/sysdeps/mach/hurd/msync.c
@@ -0,0 +1,93 @@
+/* msync -- Synchronize mapped memory to external storage.  Mach version.
+   Copyright (C) 2002-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <errno.h>
+
+#include <hurd/hurd.h>
+
+/* Synchronize the region starting at ADDR and extending LEN bytes with the
+   file it maps.  Filesystem operations on a file being mapped are
+   unpredictable before this is done.  */
+
+int
+msync (void *addr, size_t length, int flags)
+{
+  boolean_t should_flush = flags & MS_INVALIDATE ? 1 : 0;
+  boolean_t should_iosync = flags & MS_ASYNC ? 0 : 1;
+
+  vm_address_t cur = (vm_address_t) addr;
+  vm_address_t target = cur + length;
+
+  vm_size_t len;
+  vm_prot_t prot;
+  vm_prot_t max_prot;
+  vm_inherit_t inherit;
+  boolean_t shared;
+  memory_object_name_t obj;
+  vm_offset_t offset;
+
+  kern_return_t err;
+
+  if (flags & (MS_SYNC | MS_ASYNC) == (MS_SYNC | MS_ASYNC))
+    return __hurd_fail (EINVAL);
+
+  while (cur < target)
+    {
+      vm_address_t begin = cur;
+
+      err = __vm_region (__mach_task_self (),
+			 &begin, &len, &prot, &max_prot, &inherit,
+			 &shared, &obj, &offset)
+
+      if (err != KERN_SUCCESS)
+	return __hurd_fail (err);
+
+      if (begin > cur)
+	/* We were given an address before the first region,
+	   or we found a hole.  */
+	cur = begin;
+
+      if (cur >= target)
+	/* We were given an ending address within a hole. */
+	break;
+
+      if (MACH_PORT_VALID (obj))
+	{
+	  vm_size_t sync_len;
+
+	  if (begin + len > target)
+	    sync_len = target - begin;
+	  else
+	    sync_len = len;
+
+	  err = __vm_object_sync (obj, cur - begin + offset, sync_len,
+				  should_flush, 1, should_iosync);
+	  __mach_port_deallocate (__mach_task_self (), obj);
+
+	  if (err)
+	    return __hurd_fail (err);
+
+	}
+
+      cur = begin + len;
+    }
+
+  return 0;
+}

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                 |    4 ++
 sysdeps/mach/hurd/msync.c |   93 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 97 insertions(+), 0 deletions(-)
 create mode 100644 sysdeps/mach/hurd/msync.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]