summaryrefslogtreecommitdiff
path: root/repo/system/efivar/patches/musl-bswap.patch
blob: 8b86d9ae54a535b0255a6497fa4635774a4b1fd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
From c9b54ee2cd504542cac4ed95fa7842bd14b39f9c Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Fri, 18 Aug 2017 20:36:03 -0500
Subject: [PATCH] makeguids: Ensure compatibility with other libcs

The musl libc does not provide __bswap_constant_XX.
If <endian.h> does not provide these macros, use our own.

This fixes issue #84.
---
 src/makeguids.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/makeguids.c b/src/makeguids.c
index ec75a86..6b0d80e 100644
--- a/src/makeguids.c
+++ b/src/makeguids.c
@@ -152,6 +152,15 @@ main(int argc, char *argv[])
 	fprintf(symout, "#include <efivar/efivar.h>\n");
 	fprintf(symout, "#include <endian.h>\n");
 	fprintf(symout, """\n\
+#ifndef __bswap_constant_16\n\
+#define __bswap_constant_16(x)\\\n\
+	((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))\n\
+#endif\n\
+#ifndef __bswap_constant_32\n\
+#define __bswap_constant_32(x)\\\n\
+	((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) | \\\n\
+	 (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))\n\
+#endif\n\
 #if BYTE_ORDER == BIG_ENDIAN\n\
 #define cpu_to_be32(n) (n)\n\
 #define cpu_to_be16(n) (n)\n\