summaryrefslogtreecommitdiff
path: root/tools/squashfs4/patches/130-dynamic_lzma_params.patch
blob: 65fc3f6252ea19399b4e65361409d60c7124256d (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
--- a/squashfs-tools/lzma_wrapper.c
+++ b/squashfs-tools/lzma_wrapper.c
@@ -20,6 +20,8 @@
  */
 
 #include <LzmaLib.h>
+#include <stdio.h>
+#include "compressor.h"
 
 #define LZMA_HEADER_SIZE	(LZMA_PROPS_SIZE + 8)
 
@@ -30,9 +32,18 @@
 	size_t props_size = LZMA_PROPS_SIZE,
 		outlen = block_size - LZMA_HEADER_SIZE;
 	int res;
+	int lc;
+	int lp;
+	int pb;
+
+	if (!comp_args || sscanf(comp_args, "%d:%d:%d", &lc, &lp, &pb) != 3) {
+		lc = 0;
+		lp = 2;
+		pb = 2;
+	}
 
 	res = LzmaCompress(d + LZMA_HEADER_SIZE, &outlen, s, size, d,
-		&props_size, 5, block_size, 3, 0, 2, 32, 1);
+		&props_size, 5, block_size, lc, lp, pb, 32, 1);
 	
 	if(res == SZ_ERROR_OUTPUT_EOF) {
 		/*
--- a/squashfs-tools/compressor.c
+++ b/squashfs-tools/compressor.c
@@ -25,6 +25,7 @@
 #include "compressor.h"
 #include "squashfs_fs.h"
 
+char *comp_args = NULL;
 extern int gzip_compress(void **, char *, char *, int, int, int *);
 extern int gzip_uncompress(char *, char *, int, int, int *);
 extern int lzma_compress(void **, char *, char *, int, int, int *);
--- a/squashfs-tools/compressor.h
+++ b/squashfs-tools/compressor.h
@@ -31,3 +31,4 @@
 extern struct compressor *lookup_compressor(char *);
 extern struct compressor *lookup_compressor_id(int);
 extern void display_compressors(char *, char *);
+extern char *comp_args;
--- a/squashfs-tools/mksquashfs.c
+++ b/squashfs-tools/mksquashfs.c
@@ -4355,6 +4355,12 @@
 				exit(1);
 			}
 			comp_name = argv[i];
+		} else if(strcmp(argv[i], "-comp_args") == 0) {
+			if(++i == argc) {
+				ERROR("%s: -comp_args missing compression arguments\n", argv[0]);
+				exit(1);
+			}
+			comp_args = argv[i];
 		} else if(strcmp(argv[i], "-pf") == 0) {
 			if(++i == argc) {
 				ERROR("%s: -pf missing filename\n", argv[0]);
@@ -4574,6 +4580,7 @@
 				"[-e list of exclude\ndirs/files]\n", argv[0]);
 			ERROR("\nFilesystem build options:\n");
 			ERROR("-comp <comp>\t\tselect <comp> compression\n");
+			ERROR("-comp_args <comp>\t\tselect compression arguments\n");
 			ERROR("\t\t\tCompressors available:\n");
 			display_compressors("\t\t\t", COMP_DEFAULT);
 			ERROR("-b <block_size>\t\tset data block to "
@@ -4736,7 +4743,8 @@
 		else if(strcmp(argv[i], "-root-becomes") == 0 ||
 				strcmp(argv[i], "-sort") == 0 ||
 				strcmp(argv[i], "-pf") == 0 ||
-				strcmp(argv[i], "-comp") == 0)
+				strcmp(argv[i], "-comp") == 0 ||
+				strcmp(argv[i], "-comp_args") == 0)
 			i++;
 
 	if(i != argc) {
@@ -4761,7 +4769,8 @@
 		else if(strcmp(argv[i], "-root-becomes") == 0 ||
 				strcmp(argv[i], "-ef") == 0 ||
 				strcmp(argv[i], "-pf") == 0 ||
-				strcmp(argv[i], "-comp") == 0)
+				strcmp(argv[i], "-comp") == 0 ||
+				strcmp(argv[i], "-comp_args") == 0)
 			i++;
 
 #ifdef SQUASHFS_TRACE