summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/btrfs-tools/btrfs-tools/lzo-option.patch
blob: f4278a5c5d0482cb70b8a1f95278ef9b800b183a (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
Upstream-Status: Backport [https://github.com/kdave/btrfs-progs/commit/73545c1fe6304f08ab306b76d2bcacaf22a5e99a]
Signed-off-by: Ross Burton <ross.burton@arm.com>

From 4f4eafe8ebcc86f84f6c85a5c5814c430d8f190c Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Tue, 24 May 2022 13:44:29 +0100
Subject: [PATCH] btrfs-progs: add option to disable LZO support

LZO as a compression format is pretty archaic these days, there are
better algorithsm in all metrics for compression and decompression, and
lzo hasn't had a new release since 2017.

Add an option to disable LZO (defaulting to enabled), and respect it in
cmds/restore.c.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 Makefile        |  2 +-
 Makefile.inc.in |  1 +
 cmds/restore.c  |  7 +++++++
 configure.ac    | 30 ++++++++++++++++++++----------
 4 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index af4908f9..0e8e05f3 100644
--- a/Makefile
+++ b/Makefile
@@ -335,7 +335,7 @@ endif
 btrfs_convert_cflags = -DBTRFSCONVERT_EXT2=$(BTRFSCONVERT_EXT2)
 btrfs_convert_cflags += -DBTRFSCONVERT_REISERFS=$(BTRFSCONVERT_REISERFS)
 btrfs_fragments_libs = -lgd -lpng -ljpeg -lfreetype
-cmds_restore_cflags = -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
+cmds_restore_cflags = -DBTRFSRESTORE_LZO=$(BTRFSRESTORE_LZO) -DBTRFSRESTORE_ZSTD=$(BTRFSRESTORE_ZSTD)
 
 ifeq ($(CRYPTOPROVIDER_BUILTIN),1)
 CRYPTO_OBJECTS = crypto/sha224-256.o crypto/blake2b-ref.o
diff --git a/Makefile.inc.in b/Makefile.inc.in
index c995aef9..385b7ae1 100644
--- a/Makefile.inc.in
+++ b/Makefile.inc.in
@@ -16,6 +16,7 @@ BUILD_PROGRAMS = @BUILD_PROGRAMS@
 BUILD_SHARED_LIBRARIES = @BUILD_SHARED_LIBRARIES@
 BUILD_STATIC_LIBRARIES = @BUILD_STATIC_LIBRARIES@
 BTRFSCONVERT_EXT2 = @BTRFSCONVERT_EXT2@
+BTRFSRESTORE_LZO = @BTRFSRESTORE_LZO@
 BTRFSCONVERT_REISERFS = @BTRFSCONVERT_REISERFS@
 BTRFSRESTORE_ZSTD = @BTRFSRESTORE_ZSTD@
 PYTHON_BINDINGS = @PYTHON_BINDINGS@
diff --git a/cmds/restore.c b/cmds/restore.c
index 5923d571..4dd79fce 100644
--- a/cmds/restore.c
+++ b/cmds/restore.c
@@ -25,8 +25,10 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#if BTRFSRESTORE_LZO
 #include <lzo/lzoconf.h>
 #include <lzo/lzo1x.h>
+#endif
 #include <zlib.h>
 #if BTRFSRESTORE_ZSTD
 #include <zstd.h>
@@ -98,6 +100,10 @@ static inline size_t read_compress_length(unsigned char *buf)
 static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf,
 			char *outbuf, u64 compress_len, u64 *decompress_len)
 {
+#if !BTRFSRESTORE_LZO
+	error("btrfs not compiled with lzo support");
+	return -1;
+#else
 	size_t new_len;
 	size_t in_len;
 	size_t out_len = 0;
@@ -156,6 +162,7 @@ static int decompress_lzo(struct btrfs_root *root, unsigned char *inbuf,
 	*decompress_len = out_len;
 
 	return 0;
+#endif
 }
 
 static int decompress_zstd(const char *inbuf, char *outbuf, u64 compress_len,
diff --git a/configure.ac b/configure.ac
index d907636b..c1ad2c22 100644
--- a/configure.ac
+++ b/configure.ac
@@ -372,16 +372,26 @@ if ${PKG_CONFIG} udev --atleast-version 190; then
 fi
 AC_SUBST(UDEVDIR)
 
-dnl lzo library does not provide pkg-config, let use classic way
-AC_CHECK_LIB([lzo2], [lzo_version], [
-	LZO2_LIBS="-llzo2"
-	LZO2_CFLAGS=""
-	LZO2_LIBS_STATIC="-llzo2"],[
-	AC_MSG_ERROR([cannot find lzo2 library])
-])
-AC_SUBST([LZO2_LIBS])
-AC_SUBST([LZO2_LIBS_STATIC])
-AC_SUBST([LZO2_CFLAGS])
+AC_ARG_ENABLE([lzo],
+	AS_HELP_STRING([--disable-lzo], [build without lzo support]),
+	[], [enable_lzo=yes]
+)
+
+if test "x$enable_lzo" = xyes; then
+	dnl lzo library does not provide pkg-config, let use classic way
+	AC_CHECK_LIB([lzo2], [lzo_version], [
+		LZO2_LIBS="-llzo2"
+		LZO2_CFLAGS=""
+		LZO2_LIBS_STATIC="-llzo2"],[
+		AC_MSG_ERROR([cannot find lzo2 library])
+	])
+	AC_SUBST([LZO2_LIBS])
+	AC_SUBST([LZO2_LIBS_STATIC])
+	AC_SUBST([LZO2_CFLAGS])
+fi
+
+AS_IF([test "x$enable_lzo" = xyes], [BTRFSRESTORE_LZO=1], [BTRFSRESTORE_LZO=0])
+AC_SUBST(BTRFSRESTORE_LZO)
 
 dnl call PKG_INSTALLDIR from pkg.m4 to set pkgconfigdir
 m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], [AC_MSG_ERROR([please install pkgconf])])
-- 
2.25.1