From e93b0a257cb9c8fd76ae9e8470484852ff88908e Mon Sep 17 00:00:00 2001
From: Avi Kivity <avi@cloudius-systems.com>
Date: Tue, 20 Aug 2013 16:21:21 +0300
Subject: [PATCH] vfs: implement umask()

Currently the umask is ignore (it's pointless since we have no users).

Needed by JRuby.
---
 fs/vfs/main.cc | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/fs/vfs/main.cc b/fs/vfs/main.cc
index 7ade70ddb..a1abda65a 100755
--- a/fs/vfs/main.cc
+++ b/fs/vfs/main.cc
@@ -60,6 +60,8 @@
 int	vfs_debug = VFSDB_FLAGS;
 #endif
 
+std::atomic<mode_t> global_umask{S_IWGRP | S_IWOTH};
+
 TRACEPOINT(trace_vfs_open, "\"%s\" 0x%x 0%0o", const char*, int, mode_t);
 TRACEPOINT(trace_vfs_open_ret, "%d", int);
 TRACEPOINT(trace_vfs_open_err, "%d", int);
@@ -1307,6 +1309,11 @@ int chmod(const char *pathname, mode_t mode)
 	return 0;
 }
 
+mode_t umask(mode_t newmask)
+{
+	return global_umask.exchange(newmask, std::memory_order_relaxed);
+}
+
 int
 fs_noop(void)
 {
-- 
GitLab