-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #476 from swiftwasm/update-base-tag/release-6.1-sw…
…ift-6.1-DEVELOPMENT-SNAPSHOT-2024-12-15-a Update base tag for release-6.1 to swift-6.1-DEVELOPMENT-SNAPSHOT-2024-12-15-a
- Loading branch information
Showing
3 changed files
with
131 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
...mes/release-6.1/swift-foundation/0001-Fix-WASI-build-of-_copyDirectoryMetadata-1094.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
From 8aff4298d3f64d0163ede2c0618292de449d818c Mon Sep 17 00:00:00 2001 | ||
From: Yuta Saito <kateinoigakukun@gmail.com> | ||
Date: Sat, 14 Dec 2024 02:29:45 +0900 | ||
Subject: [PATCH 1/2] Fix WASI build of `_copyDirectoryMetadata` (#1094) | ||
|
||
Extended attributes don't exist in WASI, so we need to exclude the use | ||
of xattr-related APIs including `flistxattr`. | ||
--- | ||
Sources/FoundationEssentials/FileManager/FileOperations.swift | 2 ++ | ||
1 file changed, 2 insertions(+) | ||
|
||
diff --git a/Sources/FoundationEssentials/FileManager/FileOperations.swift b/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
index 83d131a..ce4de44 100644 | ||
--- a/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
+++ b/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
@@ -911,6 +911,7 @@ enum _FileOperations { | ||
|
||
#if !canImport(Darwin) | ||
private static func _copyDirectoryMetadata(srcFD: CInt, srcPath: @autoclosure () -> String, dstFD: CInt, dstPath: @autoclosure () -> String, delegate: some LinkOrCopyDelegate) throws { | ||
+ #if !os(WASI) | ||
// Copy extended attributes | ||
var size = flistxattr(srcFD, nil, 0) | ||
if size > 0 { | ||
@@ -936,6 +937,7 @@ enum _FileOperations { | ||
} | ||
} | ||
} | ||
+ #endif | ||
var statInfo = stat() | ||
if fstat(srcFD, &statInfo) == 0 { | ||
// Copy owner/group | ||
-- | ||
2.46.0 | ||
|
96 changes: 96 additions & 0 deletions
96
...lease-6.1/swift-foundation/0002-Follow-up-fixes-to-make-it-work-with-wasi-libc-1095.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
From 7e0817f4c7dbc748fc70c45c20edd5acc98a34d7 Mon Sep 17 00:00:00 2001 | ||
From: Yuta Saito <kateinoigakukun@gmail.com> | ||
Date: Tue, 17 Dec 2024 04:19:39 +0900 | ||
Subject: [PATCH 2/2] Follow-up fixes to make it work with wasi-libc (#1095) | ||
|
||
* Gate `fchown` and `fchmod` calls behind `os(WASI)` | ||
|
||
They are not available on WASI, so we gate them behind `os(WASI)`. | ||
|
||
* Add missing constant shims for wasi-libc | ||
|
||
* Use `futimens` instead of legacy `futimes` | ||
|
||
wasi-libc does not provide `futimes` as it is a legacy function. | ||
https://github.com/WebAssembly/wasi-libc/blob/574b88da481569b65a237cb80daf9a2d5aeaf82d/libc-top-half/musl/include/sys/time.h#L34 | ||
--- | ||
.../FileManager/FileOperations.swift | 10 +++++++--- | ||
Sources/FoundationEssentials/WASILibc+Extensions.swift | 9 +++++++++ | ||
Sources/_FoundationCShims/include/platform_shims.h | 4 ++++ | ||
3 files changed, 20 insertions(+), 3 deletions(-) | ||
|
||
diff --git a/Sources/FoundationEssentials/FileManager/FileOperations.swift b/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
index ce4de44..96ee566 100644 | ||
--- a/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
+++ b/Sources/FoundationEssentials/FileManager/FileOperations.swift | ||
@@ -940,26 +940,30 @@ enum _FileOperations { | ||
#endif | ||
var statInfo = stat() | ||
if fstat(srcFD, &statInfo) == 0 { | ||
+ #if !os(WASI) // WASI doesn't have fchown for now | ||
// Copy owner/group | ||
if fchown(dstFD, statInfo.st_uid, statInfo.st_gid) != 0 { | ||
try delegate.throwIfNecessary(errno, srcPath(), dstPath()) | ||
} | ||
+ #endif | ||
|
||
// Copy modification date | ||
- let value = timeval(tv_sec: statInfo.st_mtim.tv_sec, tv_usec: statInfo.st_mtim.tv_nsec / 1000) | ||
+ let value = statInfo.st_mtim | ||
var tv = (value, value) | ||
try withUnsafePointer(to: &tv) { | ||
- try $0.withMemoryRebound(to: timeval.self, capacity: 2) { | ||
- if futimes(dstFD, $0) != 0 { | ||
+ try $0.withMemoryRebound(to: timespec.self, capacity: 2) { | ||
+ if futimens(dstFD, $0) != 0 { | ||
try delegate.throwIfNecessary(errno, srcPath(), dstPath()) | ||
} | ||
} | ||
} | ||
|
||
+ #if !os(WASI) // WASI doesn't have fchmod for now | ||
// Copy permissions | ||
if fchmod(dstFD, statInfo.st_mode) != 0 { | ||
try delegate.throwIfNecessary(errno, srcPath(), dstPath()) | ||
} | ||
+ #endif | ||
} else { | ||
try delegate.throwIfNecessary(errno, srcPath(), dstPath()) | ||
} | ||
diff --git a/Sources/FoundationEssentials/WASILibc+Extensions.swift b/Sources/FoundationEssentials/WASILibc+Extensions.swift | ||
index 351fe19..44f3f93 100644 | ||
--- a/Sources/FoundationEssentials/WASILibc+Extensions.swift | ||
+++ b/Sources/FoundationEssentials/WASILibc+Extensions.swift | ||
@@ -49,5 +49,14 @@ internal var O_TRUNC: Int32 { | ||
internal var O_WRONLY: Int32 { | ||
return _platform_shims_O_WRONLY() | ||
} | ||
+internal var O_RDONLY: Int32 { | ||
+ return _platform_shims_O_RDONLY() | ||
+} | ||
+internal var O_DIRECTORY: Int32 { | ||
+ return _platform_shims_O_DIRECTORY() | ||
+} | ||
+internal var O_NOFOLLOW: Int32 { | ||
+ return _platform_shims_O_NOFOLLOW() | ||
+} | ||
|
||
#endif // os(WASI) | ||
diff --git a/Sources/_FoundationCShims/include/platform_shims.h b/Sources/_FoundationCShims/include/platform_shims.h | ||
index 6bc0a0e..e02b581 100644 | ||
--- a/Sources/_FoundationCShims/include/platform_shims.h | ||
+++ b/Sources/_FoundationCShims/include/platform_shims.h | ||
@@ -102,6 +102,10 @@ static inline int32_t _platform_shims_O_CREAT(void) { return O_CREAT; } | ||
static inline int32_t _platform_shims_O_EXCL(void) { return O_EXCL; } | ||
static inline int32_t _platform_shims_O_TRUNC(void) { return O_TRUNC; } | ||
static inline int32_t _platform_shims_O_WRONLY(void) { return O_WRONLY; } | ||
+static inline int32_t _platform_shims_O_RDONLY(void) { return O_RDONLY; } | ||
+static inline int32_t _platform_shims_O_DIRECTORY(void) { return O_DIRECTORY; } | ||
+static inline int32_t _platform_shims_O_NOFOLLOW(void) { return O_NOFOLLOW; } | ||
+ | ||
#endif | ||
|
||
#endif /* CSHIMS_PLATFORM_SHIMS */ | ||
-- | ||
2.46.0 | ||
|