From 486b5b6bfc61344c945d807b230c12a99c3c8edb Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 11 Aug 2014 21:15:25 +0200
Subject: [PATCH] fs/io/TextFile: use AutoGunzipReader

Several MPD subsystems can now read gzipped files; for example, the
database file can be gzipped.
---
 src/fs/io/TextFile.cxx | 17 ++++++++++++++++-
 src/fs/io/TextFile.hxx |  7 +++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/fs/io/TextFile.cxx b/src/fs/io/TextFile.cxx
index 396d0f9cd..5b3bc4505 100644
--- a/src/fs/io/TextFile.cxx
+++ b/src/fs/io/TextFile.cxx
@@ -20,6 +20,7 @@
 #include "config.h"
 #include "TextFile.hxx"
 #include "FileReader.hxx"
+#include "AutoGunzipReader.hxx"
 #include "BufferedReader.hxx"
 #include "fs/Path.hxx"
 
@@ -27,8 +28,19 @@
 
 TextFile::TextFile(Path path_fs, Error &error)
 	:file_reader(new FileReader(path_fs, error)),
+#ifdef HAVE_ZLIB
+	 gunzip_reader(file_reader->IsDefined()
+		       ? new AutoGunzipReader(*file_reader)
+		       : nullptr),
+#endif
 	 buffered_reader(file_reader->IsDefined()
-			 ? new BufferedReader(*file_reader)
+			 ? new BufferedReader(*
+#ifdef HAVE_ZLIB
+					      gunzip_reader
+#else
+					      file_reader
+#endif
+					      )
 			 : nullptr)
 {
 }
@@ -36,6 +48,9 @@ TextFile::TextFile(Path path_fs, Error &error)
 TextFile::~TextFile()
 {
 	delete buffered_reader;
+#ifdef HAVE_ZLIB
+	delete gunzip_reader;
+#endif
 	delete file_reader;
 }
 
diff --git a/src/fs/io/TextFile.hxx b/src/fs/io/TextFile.hxx
index 33a1b8060..8bab808c7 100644
--- a/src/fs/io/TextFile.hxx
+++ b/src/fs/io/TextFile.hxx
@@ -20,6 +20,7 @@
 #ifndef MPD_TEXT_FILE_HXX
 #define MPD_TEXT_FILE_HXX
 
+#include "check.h"
 #include "Compiler.h"
 
 #include <stddef.h>
@@ -27,10 +28,16 @@
 class Path;
 class Error;
 class FileReader;
+class AutoGunzipReader;
 class BufferedReader;
 
 class TextFile {
 	FileReader *const file_reader;
+
+#ifdef HAVE_ZLIB
+	AutoGunzipReader *const gunzip_reader;
+#endif
+
 	BufferedReader *const buffered_reader;
 
 public: