aboutsummaryrefslogtreecommitdiff
path: root/bbot/utility.txx
diff options
context:
space:
mode:
Diffstat (limited to 'bbot/utility.txx')
-rw-r--r--bbot/utility.txx21
1 files changed, 19 insertions, 2 deletions
diff --git a/bbot/utility.txx b/bbot/utility.txx
index e485a80..3199a61 100644
--- a/bbot/utility.txx
+++ b/bbot/utility.txx
@@ -150,8 +150,25 @@ namespace bbot
if (!file_exists (f))
fail (fh) << what << " manifest file " << f << " does not exist";
- ifdstream ifs (f);
- return parse_manifest<T> (ifs, f.string (), what, fh, iu);
+ bool d (f.extension () == "lz4");
+
+ ifdstream ifs (f, (d
+ ? ifdstream::badbit
+ : ifdstream::badbit | ifdstream::failbit));
+ ilz4stream izs;
+
+ if (d)
+ izs.open (ifs, true /* end */);
+
+ return parse_manifest<T> (d
+ ? static_cast<istream&> (izs)
+ : static_cast<istream&> (ifs),
+ f.string (), what, fh, iu);
+ }
+ catch (const invalid_argument& e) // Invalid compressed content.
+ {
+ fail (fh) << "invalid " << what << " manifest " << f << ": " << e
+ << endf;
}
catch (const system_error& e) // EACCES, etc.
{