bug fixes
parent
1e45c2d305
commit
eee814871a
28
files.cpp
28
files.cpp
|
|
@ -44,21 +44,6 @@ unsigned long FileStore::MaxRetrievable() const
|
||||||
return end-current;
|
return end-current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int FileStore::Peek(byte &outByte) const
|
|
||||||
{
|
|
||||||
if (!m_stream)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
int result = m_stream->peek();
|
|
||||||
if (result == EOF) // GCC workaround: 2.95.2 doesn't have char_traits<char>::eof()
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outByte = byte(result);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int FileStore::TransferTo2(BufferedTransformation &target, unsigned long &transferBytes, const std::string &channel, bool blocking)
|
unsigned int FileStore::TransferTo2(BufferedTransformation &target, unsigned long &transferBytes, const std::string &channel, bool blocking)
|
||||||
{
|
{
|
||||||
if (!m_stream)
|
if (!m_stream)
|
||||||
|
|
@ -103,6 +88,19 @@ unsigned int FileStore::CopyRangeTo2(BufferedTransformation &target, unsigned lo
|
||||||
if (!m_stream)
|
if (!m_stream)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (begin == 0 && end == 1)
|
||||||
|
{
|
||||||
|
int result = m_stream->peek();
|
||||||
|
if (result == EOF) // GCC workaround: 2.95.2 doesn't have char_traits<char>::eof()
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned int blockedBytes = target.ChannelPut(channel, byte(result), blocking);
|
||||||
|
begin += 1-blockedBytes;
|
||||||
|
return blockedBytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: figure out what happens on cin
|
// TODO: figure out what happens on cin
|
||||||
streampos current = m_stream->tellg();
|
streampos current = m_stream->tellg();
|
||||||
streampos endPosition = m_stream->seekg(0, ios::end).tellg();
|
streampos endPosition = m_stream->seekg(0, ios::end).tellg();
|
||||||
|
|
|
||||||
2
files.h
2
files.h
|
|
@ -30,8 +30,6 @@ public:
|
||||||
std::istream* GetStream() {return m_stream;}
|
std::istream* GetStream() {return m_stream;}
|
||||||
|
|
||||||
unsigned long MaxRetrievable() const;
|
unsigned long MaxRetrievable() const;
|
||||||
unsigned int Peek(byte &outByte) const;
|
|
||||||
|
|
||||||
unsigned int TransferTo2(BufferedTransformation &target, unsigned long &transferBytes, const std::string &channel=NULL_CHANNEL, bool blocking=true);
|
unsigned int TransferTo2(BufferedTransformation &target, unsigned long &transferBytes, const std::string &channel=NULL_CHANNEL, bool blocking=true);
|
||||||
unsigned int CopyRangeTo2(BufferedTransformation &target, unsigned long &begin, unsigned long end=ULONG_MAX, const std::string &channel=NULL_CHANNEL, bool blocking=true) const;
|
unsigned int CopyRangeTo2(BufferedTransformation &target, unsigned long &begin, unsigned long end=ULONG_MAX, const std::string &channel=NULL_CHANNEL, bool blocking=true) const;
|
||||||
|
|
||||||
|
|
|
||||||
22
filters.cpp
22
filters.cpp
|
|
@ -387,35 +387,27 @@ void Redirector::ChannelInitialize(const std::string &channel, const NameValuePa
|
||||||
// *************************************************************
|
// *************************************************************
|
||||||
|
|
||||||
ProxyFilter::ProxyFilter(BufferedTransformation *filter, unsigned int firstSize, unsigned int lastSize, BufferedTransformation *attachment)
|
ProxyFilter::ProxyFilter(BufferedTransformation *filter, unsigned int firstSize, unsigned int lastSize, BufferedTransformation *attachment)
|
||||||
: FilterWithBufferedInput(firstSize, 1, lastSize, attachment), m_filter(filter), m_proxy(NULL)
|
: FilterWithBufferedInput(firstSize, 1, lastSize, attachment), m_filter(filter)
|
||||||
{
|
{
|
||||||
if (m_filter.get())
|
if (m_filter.get())
|
||||||
m_filter->Attach(m_proxy = new OutputProxy(*this, false));
|
m_filter->Attach(new OutputProxy(*this, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProxyFilter::IsolatedFlush(bool completeFlush)
|
bool ProxyFilter::IsolatedFlush(bool hardFlush, bool blocking)
|
||||||
{
|
{
|
||||||
if (m_filter.get())
|
return m_filter.get() ? m_filter->Flush(hardFlush, -1, blocking) : false;
|
||||||
{
|
|
||||||
bool passSignal = m_proxy->GetPassSignal();
|
|
||||||
m_proxy->SetPassSignal(false);
|
|
||||||
m_filter->Flush(completeFlush, -1);
|
|
||||||
m_proxy->SetPassSignal(passSignal);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProxyFilter::SetFilter(Filter *filter)
|
void ProxyFilter::SetFilter(Filter *filter)
|
||||||
{
|
{
|
||||||
bool passSignal = m_proxy ? m_proxy->GetPassSignal() : false;
|
|
||||||
m_filter.reset(filter);
|
m_filter.reset(filter);
|
||||||
if (filter)
|
if (filter)
|
||||||
{
|
{
|
||||||
std::auto_ptr<OutputProxy> temp(m_proxy = new OutputProxy(*this, passSignal));
|
OutputProxy *proxy;
|
||||||
m_filter->TransferAllTo(*m_proxy);
|
std::auto_ptr<OutputProxy> temp(proxy = new OutputProxy(*this, false));
|
||||||
|
m_filter->TransferAllTo(*proxy);
|
||||||
m_filter->Attach(temp.release());
|
m_filter->Attach(temp.release());
|
||||||
}
|
}
|
||||||
else
|
|
||||||
m_proxy=NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProxyFilter::NextPutMultiple(const byte *s, unsigned int len)
|
void ProxyFilter::NextPutMultiple(const byte *s, unsigned int len)
|
||||||
|
|
|
||||||
|
|
@ -144,8 +144,8 @@ public:
|
||||||
/*! calls ForceNextPut() if hardFlush is true */
|
/*! calls ForceNextPut() if hardFlush is true */
|
||||||
bool IsolatedFlush(bool hardFlush, bool blocking);
|
bool IsolatedFlush(bool hardFlush, bool blocking);
|
||||||
|
|
||||||
/*! the input buffer may contain more than blockSize bytes if lastSize != 0
|
/*! The input buffer may contain more than blockSize bytes if lastSize != 0.
|
||||||
ForceNextPut() forces a call to NextPut() if this is the case
|
ForceNextPut() forces a call to NextPut() if this is the case.
|
||||||
*/
|
*/
|
||||||
void ForceNextPut();
|
void ForceNextPut();
|
||||||
|
|
||||||
|
|
@ -440,14 +440,13 @@ class ProxyFilter : public FilterWithBufferedInput
|
||||||
public:
|
public:
|
||||||
ProxyFilter(BufferedTransformation *filter, unsigned int firstSize, unsigned int lastSize, BufferedTransformation *attachment);
|
ProxyFilter(BufferedTransformation *filter, unsigned int firstSize, unsigned int lastSize, BufferedTransformation *attachment);
|
||||||
|
|
||||||
void IsolatedFlush(bool completeFlush);
|
bool IsolatedFlush(bool hardFlush, bool blocking);
|
||||||
|
|
||||||
void SetFilter(Filter *filter);
|
void SetFilter(Filter *filter);
|
||||||
void NextPutMultiple(const byte *s, unsigned int len);
|
void NextPutMultiple(const byte *s, unsigned int len);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
member_ptr<BufferedTransformation> m_filter;
|
member_ptr<BufferedTransformation> m_filter;
|
||||||
OutputProxy *m_proxy;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! simple proxy filter that doesn't modify the underlying filter's input or output
|
//! simple proxy filter that doesn't modify the underlying filter's input or output
|
||||||
|
|
|
||||||
2
modes.h
2
modes.h
|
|
@ -144,7 +144,7 @@ class CTR_ModePolicy : public ModePolicyCommonTemplate<AdditiveCipherAbstractPol
|
||||||
|
|
||||||
static inline void IncrementCounterByOne(byte *output, const byte *input, unsigned int s)
|
static inline void IncrementCounterByOne(byte *output, const byte *input, unsigned int s)
|
||||||
{
|
{
|
||||||
for (int i=s-1, carry=1; i>=0 && carry; i--)
|
for (int i=s-1, carry=1; i>=0; i--)
|
||||||
carry = !(output[i] = input[i]+1);
|
carry = !(output[i] = input[i]+1);
|
||||||
}
|
}
|
||||||
inline void ProcessMultipleBlocks(byte *output, const byte *input, unsigned int n)
|
inline void ProcessMultipleBlocks(byte *output, const byte *input, unsigned int n)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue