From c5a9c8d067d4695eaf5f6ce94a464f7fcdc07584 Mon Sep 17 00:00:00 2001
From: Kir Kolyshkin <kolyshkin@gmail.com>
Date: Mon, 19 Aug 2024 17:29:19 -0700
Subject: [PATCH] syscall: add O_DIRECTORY for wasip1

Change-Id: Iadd69360fb09714a280c4dae26639834df28a7dc
Reviewed-on: https://go-review.googlesource.com/c/go/+/606659
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
---
 src/syscall/fs_wasip1.go      |  8 ++++++++
 src/syscall/syscall_wasip1.go | 13 +++++++------
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/syscall/fs_wasip1.go b/src/syscall/fs_wasip1.go
index fc361ee8989..c249891dd21 100644
--- a/src/syscall/fs_wasip1.go
+++ b/src/syscall/fs_wasip1.go
@@ -542,6 +542,14 @@ func Open(path string, openmode int, perm uint32) (int, error) {
 		rights = fileRights
 	}
 
+	if (openmode & O_DIRECTORY) != 0 {
+		if openmode&(O_WRONLY|O_RDWR) != 0 {
+			return -1, EISDIR
+		}
+		oflags |= OFLAG_DIRECTORY
+		rights &= dirRights
+	}
+
 	var fdflags fdflags
 	if (openmode & O_APPEND) != 0 {
 		fdflags |= FDFLAG_APPEND
diff --git a/src/syscall/syscall_wasip1.go b/src/syscall/syscall_wasip1.go
index bcf7676123c..b98f99745f2 100644
--- a/src/syscall/syscall_wasip1.go
+++ b/src/syscall/syscall_wasip1.go
@@ -216,12 +216,13 @@ const (
 	O_WRONLY = 1
 	O_RDWR   = 2
 
-	O_CREAT  = 0100
-	O_CREATE = O_CREAT
-	O_TRUNC  = 01000
-	O_APPEND = 02000
-	O_EXCL   = 0200
-	O_SYNC   = 010000
+	O_CREAT     = 0100
+	O_CREATE    = O_CREAT
+	O_TRUNC     = 01000
+	O_APPEND    = 02000
+	O_EXCL      = 0200
+	O_SYNC      = 010000
+	O_DIRECTORY = 020000
 
 	O_CLOEXEC = 0
 )
-- 
GitLab