gecko-dev/modules/libjar/nsJARInputStream.h
Mike Hommey a53b913e63 Bug 1717947 - Remove support for brotli streams in Jar archives. r=valentin
This was added in bug 1355661, has been kept Nightly-only since then,
and was only used briefly for omni.ja, and eventually we switched
compression off entirely on omni.ja. If we ever switch compression on
again on omni.ja, it would likely be with zstd, which is much faster
on the compression side.

Differential Revision: https://phabricator.services.mozilla.com/D118654
2021-06-25 00:20:10 +00:00

75 lines
2.4 KiB
C++

/* nsJARInputStream.h
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsJARINPUTSTREAM_h__
#define nsJARINPUTSTREAM_h__
#include "nsIInputStream.h"
#include "nsJAR.h"
#include "nsTArray.h"
#include "mozilla/Attributes.h"
/*-------------------------------------------------------------------------
* Class nsJARInputStream declaration. This class defines the type of the
* object returned by calls to nsJAR::GetInputStream(filename) for the
* purpose of reading a file item out of a JAR file.
*------------------------------------------------------------------------*/
class nsJARInputStream final : public nsIInputStream {
public:
nsJARInputStream()
: mOutSize(0),
mInCrc(0),
mOutCrc(0),
mNameLen(0),
mCurPos(0),
mArrPos(0),
mMode(MODE_NOTINITED) {
memset(&mZs, 0, sizeof(z_stream));
}
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIINPUTSTREAM
// takes ownership of |fd|, even on failure
nsresult InitFile(nsJAR* aJar, nsZipItem* item);
nsresult InitDirectory(nsJAR* aJar, const nsACString& aJarDirSpec,
const char* aDir);
private:
~nsJARInputStream() { Close(); }
RefPtr<nsZipHandle> mFd; // handle for reading
uint32_t mOutSize; // inflated size
uint32_t mInCrc; // CRC as provided by the zipentry
uint32_t mOutCrc; // CRC as calculated by me
z_stream mZs; // zip data structure
/* For directory reading */
RefPtr<nsJAR> mJar; // string reference to zipreader
uint32_t mNameLen; // length of dirname
nsCString mBuffer; // storage for generated text of stream
uint32_t mCurPos; // Current position in buffer
uint32_t mArrPos; // current position within mArray
nsTArray<nsCString> mArray; // array of names in (zip) directory
typedef enum {
MODE_NOTINITED,
MODE_CLOSED,
MODE_DIRECTORY,
MODE_INFLATE,
MODE_COPY
} JISMode;
JISMode mMode; // Modus of the stream
nsresult ContinueInflate(char* aBuf, uint32_t aCount, uint32_t* aBytesRead);
nsresult ReadDirectory(char* aBuf, uint32_t aCount, uint32_t* aBytesRead);
uint32_t CopyDataToBuffer(char*& aBuffer, uint32_t& aCount);
};
#endif /* nsJARINPUTSTREAM_h__ */