File xz-5.2.0-text-tune.patch of Package xz

diff -Nurp xz-5.2.0.orig/src/liblzma/api/lzma/container.h xz-5.2.0/src/liblzma/api/lzma/container.h
--- xz-5.2.0.orig/src/liblzma/api/lzma/container.h	2014-12-21 20:49:11.000000000 +0200
+++ xz-5.2.0/src/liblzma/api/lzma/container.h	2014-12-22 21:58:22.659906214 +0200
@@ -43,7 +43,7 @@
 /*
  * Preset flags
  *
- * Currently only one flag is defined.
+ * Currently only two flags are defined.
  */
 
 /**
@@ -59,6 +59,12 @@
  */
 #define LZMA_PRESET_EXTREME       (UINT32_C(1) << 31)
 
+/**
+ * \brief       Text compression preset
+ *
+ * TODO
+ */
+#define LZMA_PRESET_TEXT          (UINT32_C(1) << 18)
 
 /**
  * \brief       Multithreading options
diff -Nurp xz-5.2.0.orig/src/liblzma/lzma/lzma_encoder_presets.c xz-5.2.0/src/liblzma/lzma/lzma_encoder_presets.c
--- xz-5.2.0.orig/src/liblzma/lzma/lzma_encoder_presets.c	2014-12-21 20:49:11.000000000 +0200
+++ xz-5.2.0/src/liblzma/lzma/lzma_encoder_presets.c	2014-12-22 21:58:22.659906214 +0200
@@ -18,7 +18,7 @@ lzma_lzma_preset(lzma_options_lzma *opti
 {
 	const uint32_t level = preset & LZMA_PRESET_LEVEL_MASK;
 	const uint32_t flags = preset & ~LZMA_PRESET_LEVEL_MASK;
-	const uint32_t supported_flags = LZMA_PRESET_EXTREME;
+	const uint32_t supported_flags = LZMA_PRESET_EXTREME | LZMA_PRESET_TEXT;
 
 	if (level > 9 || (flags & ~supported_flags))
 		return true;
@@ -59,5 +59,18 @@ lzma_lzma_preset(lzma_options_lzma *opti
 		}
 	}
 
+	if (flags & LZMA_PRESET_TEXT) {
+		if (level == 0)
+			options->lc = 3;
+		else
+			options->lc = 4;
+		options->lp = 0;
+		options->pb = 0;
+		options->mode = LZMA_MODE_NORMAL;
+		options->nice_len = 273;
+		options->mf = LZMA_MF_BT4;
+		options->depth = 512;
+	}
+
 	return false;
 }
diff -Nurp xz-5.2.0.orig/src/xz/args.c xz-5.2.0/src/xz/args.c
--- xz-5.2.0.orig/src/xz/args.c	2014-12-21 20:49:11.000000000 +0200
+++ xz-5.2.0/src/xz/args.c	2014-12-22 21:58:22.660906204 +0200
@@ -143,6 +143,7 @@ parse_real(args_info *args, int argc, ch
 		OPT_ROBOT,
 		OPT_FLUSH_TIMEOUT,
 		OPT_IGNORE_CHECK,
+		OPT_TEXT,
 	};
 
 	static const char short_opts[]
@@ -185,6 +186,8 @@ parse_real(args_info *args, int argc, ch
 		{ "extreme",      no_argument,       NULL,  'e' },
 		{ "fast",         no_argument,       NULL,  '0' },
 		{ "best",         no_argument,       NULL,  '9' },
+		{ "text",         no_argument,       NULL,  OPT_TEXT },
+
 
 		// Filters
 		{ "lzma1",        optional_argument, NULL,  OPT_LZMA1 },
@@ -497,6 +500,10 @@ parse_real(args_info *args, int argc, ch
 					optarg, 0, UINT64_MAX);
 			break;
 
+		case OPT_TEXT:
+			coder_set_text();
+			break;
+
 		default:
 			message_try_help();
 			tuklib_exit(E_ERROR, E_ERROR, false);
diff -Nurp xz-5.2.0.orig/src/xz/coder.c xz-5.2.0/src/xz/coder.c
--- xz-5.2.0.orig/src/xz/coder.c	2014-12-21 20:49:11.000000000 +0200
+++ xz-5.2.0/src/xz/coder.c	2014-12-22 21:58:22.660906204 +0200
@@ -104,6 +104,15 @@ coder_set_extreme(void)
 
 
 extern void
+coder_set_text(void)
+{
+	preset_number |= LZMA_PRESET_TEXT;
+	forget_filter_chain();
+	return;
+}
+
+
+extern void
 coder_add_filter(lzma_vli id, void *options)
 {
 	if (filters_count == LZMA_FILTERS_MAX)
diff -Nurp xz-5.2.0.orig/src/xz/coder.h xz-5.2.0/src/xz/coder.h
--- xz-5.2.0.orig/src/xz/coder.h	2014-12-21 20:49:11.000000000 +0200
+++ xz-5.2.0/src/xz/coder.h	2014-12-22 21:58:22.660906204 +0200
@@ -61,6 +61,9 @@ extern void coder_set_preset(uint32_t ne
 /// Enable extreme mode
 extern void coder_set_extreme(void);
 
+/// Enable text mode
+extern void coder_set_text(void);
+
 /// Add a filter to the custom filter chain
 extern void coder_add_filter(lzma_vli id, void *options);
 
openSUSE Build Service is sponsored by