uefitool: Add patch working around musl libc issue

musl libc is very conservative in what it implements,
preferring a very "pure" libc implementation. this means
that it lacks many of the niceties found in others like
the GNU C Library; the latter implements many BSD libc
extensions, for example.

ACCESSPERMS is a #define in BSD libc that does:
S_IRWXU | S_IRWXG | S_IRWXO

Essentially, it provides a bitwise OR providing chmod 0777,
which can be used as shorthand in calls to functions such
as mkdir() available in all libc implementations.

In the case of uefitool, this define is indeed used on mkdir.
Conditionally re-define ACCESSPERMS, if undefined, so that musl
libc can be used when building uefitool.

Signed-off-by: Leah Rowe <leah@libreboot.org>
3050wip
Leah Rowe 2024-07-28 16:09:35 +01:00
parent 59894ed555
commit a78eaac883
1 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,54 @@
From 35f5bbf5aa7dc32f0140147737af73fd3866f455 Mon Sep 17 00:00:00 2001
From: Leah Rowe <info@minifree.org>
Date: Sun, 28 Jul 2024 16:04:30 +0100
Subject: [PATCH 1/1] common/filesystem: define ACCESSPERMS if undefined
normally defined in sys/stat.h on various libc implementations,
but musl libc doesn't seem to have it, leading to this build
issue:
common/filesystem.cpp:86:38: error: 'ACCESSPERMS' was not declared in this scope
86 | return (mkdir(dir.toLocal8Bit(), ACCESSPERMS) == 0);
ACCESSPERMS is typically defined as the result of bitwise OR:
S_IRWXU | S_IRWXG | S_IRWXO
This creates the chmod permission 0777, used on the mkdir() call.
ACCESSPERMS is supported on GNU C Library, for compatibility with
BSD libc implementations; the latter also implements ALLPERMS
and DEFFILEMODE, which don't seem to be used by uefitool regardless.
Signed-off-by: Leah Rowe <info@minifree.org>
---
common/filesystem.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/common/filesystem.cpp b/common/filesystem.cpp
index b2b8d65..9672e07 100644
--- a/common/filesystem.cpp
+++ b/common/filesystem.cpp
@@ -15,6 +15,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <sys/stat.h>
#include <fstream>
+/* musl libc does not define ACCESSPERMS, seen on glibc and many bsd libc.
+ * let's do alpine linux users a massive favour, so that the code compiles.
+ */
+#ifndef ACCESSPERMS
+#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* chmod permission: 0777 */
+#endif
+
bool readFileIntoBuffer(const UString& inPath, UByteArray& buf)
{
if (!isExistOnFs(inPath))
@@ -103,4 +110,4 @@ UString getAbsPath(const UString & path) {
return UString(abs);
return path;
}
-#endif
\ No newline at end of file
+#endif
--
2.39.2