Subversion Repositories Programming Utils

Compare Revisions

Ignore whitespace Rev 113 → Rev 114

/trunk/log4cxx/src/main/cpp/charsetencoder.cpp
14,11 → 14,11
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstring>
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/charsetencoder.h>
#include <log4cxx/helpers/bytebuffer.h>
#include <log4cxx/helpers/exception.h>
#include <apr_xlate.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/transcoder.h>
#if !defined(LOG4CXX)
25,10 → 25,15
#define LOG4CXX 1
#endif
#include <log4cxx/private/log4cxx_private.h>
#include <apr_portable.h>
#include <log4cxx/helpers/mutex.h>
#include <log4cxx/helpers/synchronized.h>
#include <stdlib.h>
 
#ifndef LOG4CXX_QT
#include <apr_xlate.h>
#include <apr_portable.h>
#endif
 
using namespace log4cxx;
using namespace log4cxx::helpers;
 
124,7 → 129,7
log4cxx_status_t encode(const LogString& in,
LogString::const_iterator& iter,
ByteBuffer& out) {
log4cxx_status_t stat = APR_SUCCESS;
log4cxx_status_t stat = LOG4CXX_SUCCESS;
 
if (iter != in.end()) {
size_t outbytes_left = out.remaining();
146,7 → 151,7
size_t converted = wcstombs(out.data() + position, buf, outbytes_left);
 
if (converted == (size_t) -1) {
stat = APR_BADARG;
stat = LOG4CXX_BADARG;
//
// if unconvertable character was encountered
// repeatedly halve source to get fragment that
191,7 → 196,7
virtual log4cxx_status_t encode(const LogString& in,
LogString::const_iterator& iter,
ByteBuffer& out) {
log4cxx_status_t stat = APR_SUCCESS;
log4cxx_status_t stat = LOG4CXX_SUCCESS;
if (iter != in.end()) {
while(out.remaining() > 0 && iter != in.end()) {
LogString::const_iterator prev(iter);
200,7 → 205,7
out.put((char) sv);
} else {
iter = prev;
stat = APR_BADARG;
stat = LOG4CXX_BADARG;
break;
}
}
225,7 → 230,7
virtual log4cxx_status_t encode(const LogString& in,
LogString::const_iterator& iter,
ByteBuffer& out) {
log4cxx_status_t stat = APR_SUCCESS;
log4cxx_status_t stat = LOG4CXX_SUCCESS;
if (iter != in.end()) {
while(out.remaining() > 0 && iter != in.end()) {
LogString::const_iterator prev(iter);
234,7 → 239,7
out.put((char) sv);
} else {
iter = prev;
stat = APR_BADARG;
stat = LOG4CXX_BADARG;
break;
}
}
271,7 → 276,7
iter += requested;
out.position(out.position() + requested * sizeof(logchar));
}
return APR_SUCCESS;
return LOG4CXX_SUCCESS;
}
 
private:
296,11 → 301,11
while(iter != in.end() && out.remaining() >= 8) {
unsigned int sv = Transcoder::decode(in, iter);
if (sv == 0xFFFF) {
return APR_BADARG;
return LOG4CXX_BADARG;
}
Transcoder::encodeUTF8(sv, out);
}
return APR_SUCCESS;
return LOG4CXX_SUCCESS;
}
 
private:
323,11 → 328,11
while(iter != in.end() && out.remaining() >= 4) {
unsigned int sv = Transcoder::decode(in, iter);
if (sv == 0xFFFF) {
return APR_BADARG;
return LOG4CXX_BADARG;
}
Transcoder::encodeUTF16BE(sv, out);
}
return APR_SUCCESS;
return LOG4CXX_SUCCESS;
}
 
private:
350,11 → 355,11
while(iter != in.end() && out.remaining() >= 4) {
unsigned int sv = Transcoder::decode(in, iter);
if (sv == 0xFFFF) {
return APR_BADARG;
return LOG4CXX_BADARG;
}
Transcoder::encodeUTF16LE(sv, out);
}
return APR_SUCCESS;
return LOG4CXX_SUCCESS;
}
private:
UTF16LECharsetEncoder(const UTF16LECharsetEncoder&);
386,7 → 391,9
#endif
if (iter != in.end() && out.remaining() > 0) {
Pool subpool;
const char* enc = apr_os_locale_encoding(subpool.getAPRPool());
//const char* enc = apr_os_locale_encoding(subpool.getAPRPool());
//RM5248 no idea what this should be
const char* enc = "UTF-8";
{
synchronized sync(mutex);
if (enc == 0) {
407,7 → 414,7
}
return encoder->encode(in, iter, out);
}
return APR_SUCCESS;
return LOG4CXX_SUCCESS;
}
 
private:
504,7 → 511,7
LogString::const_iterator& iter,
ByteBuffer& dst) {
log4cxx_status_t stat = enc->encode(src, iter, dst);
if (stat != APR_SUCCESS && iter != src.end()) {
if (stat != LOG4CXX_SUCCESS && iter != src.end()) {
#if LOG4CXX_LOGCHAR_IS_WCHAR || LOG4CXX_LOGCHAR_IS_UNICHAR
iter++;
#elif LOG4CXX_LOGCHAR_IS_UTF8
/trunk/log4cxx/src/main/cpp/appenderskeleton.cpp
22,7 → 22,6
#include <log4cxx/level.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/synchronized.h>
#include <apr_atomic.h>
 
 
using namespace log4cxx;
/trunk/log4cxx/src/main/cpp/class.cpp
71,7 → 71,10
 
#include <log4cxx/xml/domconfigurator.h>
#include <log4cxx/propertyconfigurator.h>
 
#ifndef LOG4CXX_QT
#include <apr.h>
#endif
 
 
using namespace log4cxx;
/trunk/log4cxx/src/main/cpp/asyncappender.cpp
20,20 → 20,16
#endif
 
#include <log4cxx/asyncappender.h>
 
 
#include <log4cxx/helpers/loglog.h>
#include <log4cxx/spi/loggingevent.h>
#include <apr_thread_proc.h>
#include <apr_thread_mutex.h>
#include <apr_thread_cond.h>
#include <log4cxx/helpers/condition.h>
#include <log4cxx/helpers/synchronized.h>
#include <log4cxx/helpers/stringhelper.h>
#include <apr_atomic.h>
#include <log4cxx/helpers/optionconverter.h>
#ifndef LOG4CXX_QT
#include <apr.h>
#endif
 
 
using namespace log4cxx;
using namespace log4cxx::helpers;
using namespace log4cxx::spi;
/trunk/log4cxx/src/main/cpp/bytebuffer.cpp
17,7 → 17,6
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/bytebuffer.h>
#include <log4cxx/helpers/exception.h>
#include <apr_pools.h>
#include <log4cxx/helpers/pool.h>
 
using namespace log4cxx;
/trunk/log4cxx/src/main/cpp/cacheddateformat.cpp
18,8 → 18,6
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/cacheddateformat.h>
 
 
#include <apr_time.h>
#include <log4cxx/helpers/pool.h>
#include <limits>
#include <log4cxx/helpers/exception.h>
97,7 → 95,7
const DateFormatPtr& formatter,
Pool& pool) {
 
apr_time_t slotBegin = (time / 1000000) * 1000000;
log4cxx_time_t slotBegin = (time / 1000000) * 1000000;
if (slotBegin > time) {
slotBegin -= 1000000;
}
/trunk/log4cxx/src/main/cpp/charsetdecoder.cpp
14,6 → 14,7
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstring>
#include <log4cxx/logstring.h>
#include <log4cxx/helpers/charsetdecoder.h>
#include <log4cxx/helpers/bytebuffer.h>
21,16 → 22,19
#include <log4cxx/helpers/mutex.h>
#include <log4cxx/helpers/synchronized.h>
#include <log4cxx/helpers/pool.h>
#include <apr_xlate.h>
#if !defined(LOG4CXX)
#define LOG4CXX 1
#endif
#include <log4cxx/private/log4cxx_private.h>
#include <locale.h>
#include <apr_portable.h>
#include <log4cxx/helpers/stringhelper.h>
#include <log4cxx/helpers/transcoder.h>
 
#ifndef LOG4CXX_QT
#include <apr_xlate.h>
#include <apr_portable.h>
#endif
 
using namespace log4cxx;
using namespace log4cxx::helpers;
 
39,373 → 43,375
 
namespace log4cxx
{
namespace helpers {
namespace helpers {
 
#if APR_HAS_XLATE
/**
/**
* Converts from an arbitrary encoding to LogString
* using apr_xlate. Requires real iconv implementation,
* apr-iconv will crash in use.
*/
class APRCharsetDecoder : public CharsetDecoder
{
public:
/**
class APRCharsetDecoder : public CharsetDecoder
{
public:
/**
* Creates a new instance.
* @param frompage name of source encoding.
*/
APRCharsetDecoder(const LogString& frompage) : pool(), mutex(pool) {
APRCharsetDecoder(const LogString& frompage) : pool(), mutex(pool) {
#if LOG4CXX_LOGCHAR_IS_WCHAR
const char* topage = "WCHAR_T";
const char* topage = "WCHAR_T";
#endif
#if LOG4CXX_LOGCHAR_IS_UTF8
const char* topage = "UTF-8";
const char* topage = "UTF-8";
#endif
#if LOG4CXX_LOGCHAR_IS_UNICHAR
const char* topage = "UTF-16";
const char* topage = "UTF-16";
#endif
std::string fpage(Transcoder::encodeCharsetName(frompage));
apr_status_t stat = apr_xlate_open(&convset,
topage,
fpage.c_str(),
pool.getAPRPool());
if (stat != APR_SUCCESS) {
throw IllegalArgumentException(frompage);
}
}
std::string fpage(Transcoder::encodeCharsetName(frompage));
apr_status_t stat = apr_xlate_open(&convset,
topage,
fpage.c_str(),
pool.getAPRPool());
if (stat != APR_SUCCESS) {
throw IllegalArgumentException(frompage);
}
}
 
/**
/**
* Destructor.
*/
virtual ~APRCharsetDecoder() {
}
virtual ~APRCharsetDecoder() {
}
 
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
enum { BUFSIZE = 256 };
logchar buf[BUFSIZE];
const apr_size_t initial_outbytes_left = BUFSIZE * sizeof(logchar);
apr_status_t stat = APR_SUCCESS;
if (in.remaining() == 0) {
size_t outbytes_left = initial_outbytes_left;
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
enum { BUFSIZE = 256 };
logchar buf[BUFSIZE];
const apr_size_t initial_outbytes_left = BUFSIZE * sizeof(logchar);
apr_status_t stat = APR_SUCCESS;
if (in.remaining() == 0) {
size_t outbytes_left = initial_outbytes_left;
{
synchronized sync(mutex);
stat = apr_xlate_conv_buffer((apr_xlate_t*) convset,
NULL, NULL, (char*) buf, &outbytes_left);
}
out.append(buf, (initial_outbytes_left - outbytes_left)/sizeof(logchar));
} else {
while(in.remaining() > 0 && stat == APR_SUCCESS) {
size_t inbytes_left = in.remaining();
size_t initial_inbytes_left = inbytes_left;
size_t pos = in.position();
apr_size_t outbytes_left = initial_outbytes_left;
{
synchronized sync(mutex);
stat = apr_xlate_conv_buffer((apr_xlate_t*) convset,
NULL, NULL, (char*) buf, &outbytes_left);
}
out.append(buf, (initial_outbytes_left - outbytes_left)/sizeof(logchar));
} else {
while(in.remaining() > 0 && stat == APR_SUCCESS) {
size_t inbytes_left = in.remaining();
size_t initial_inbytes_left = inbytes_left;
size_t pos = in.position();
apr_size_t outbytes_left = initial_outbytes_left;
{
synchronized sync(mutex);
stat = apr_xlate_conv_buffer((apr_xlate_t*) convset,
in.data() + pos,
&inbytes_left,
(char*) buf,
&outbytes_left);
}
out.append(buf, (initial_outbytes_left - outbytes_left)/sizeof(logchar));
in.position(pos + (initial_inbytes_left - inbytes_left));
in.data() + pos,
&inbytes_left,
(char*) buf,
&outbytes_left);
}
}
return stat;
}
out.append(buf, (initial_outbytes_left - outbytes_left)/sizeof(logchar));
in.position(pos + (initial_inbytes_left - inbytes_left));
}
}
return stat;
}
 
private:
APRCharsetDecoder(const APRCharsetDecoder&);
APRCharsetDecoder& operator=(const APRCharsetDecoder&);
log4cxx::helpers::Pool pool;
Mutex mutex;
apr_xlate_t *convset;
};
private:
APRCharsetDecoder(const APRCharsetDecoder&);
APRCharsetDecoder& operator=(const APRCharsetDecoder&);
log4cxx::helpers::Pool pool;
Mutex mutex;
apr_xlate_t *convset;
};
 
#endif
 
#if LOG4CXX_LOGCHAR_IS_WCHAR && LOG4CXX_HAS_MBSRTOWCS
/**
/**
* Converts from the default multi-byte string to
* LogString using mbstowcs.
*
*/
class MbstowcsCharsetDecoder : public CharsetDecoder
{
public:
MbstowcsCharsetDecoder() {
}
class MbstowcsCharsetDecoder : public CharsetDecoder
{
public:
MbstowcsCharsetDecoder() {
}
 
virtual ~MbstowcsCharsetDecoder() {
}
virtual ~MbstowcsCharsetDecoder() {
}
 
private:
inline log4cxx_status_t append(LogString& out, const wchar_t* buf) {
out.append(buf);
return APR_SUCCESS;
}
private:
inline log4cxx_status_t append(LogString& out, const wchar_t* buf) {
out.append(buf);
return LOG4CXX_SUCCESS;
}
 
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
log4cxx_status_t stat = APR_SUCCESS;
enum { BUFSIZE = 256 };
wchar_t buf[BUFSIZE];
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
log4cxx_status_t stat = LOG4CXX_SUCCESS;
enum { BUFSIZE = 256 };
wchar_t buf[BUFSIZE];
 
mbstate_t mbstate;
memset(&mbstate, 0, sizeof(mbstate));
mbstate_t mbstate;
memset(&mbstate, 0, sizeof(mbstate));
 
while(in.remaining() > 0) {
size_t requested = in.remaining();
if (requested > BUFSIZE - 1) {
requested = BUFSIZE - 1;
}
while(in.remaining() > 0) {
size_t requested = in.remaining();
if (requested > BUFSIZE - 1) {
requested = BUFSIZE - 1;
}
 
memset(buf, 0, BUFSIZE*sizeof(wchar_t));
const char* src = in.current();
if(*src == 0) {
out.append(1, (logchar) 0);
in.position(in.position() + 1);
} else {
size_t converted = mbsrtowcs(buf,
&src,
requested,
&mbstate);
if (converted == (size_t) -1) {
stat = APR_BADARG;
in.position(src - in.data());
break;
} else {
stat = append(out, buf);
in.position(in.position() + converted);
}
}
}
return stat;
}
memset(buf, 0, BUFSIZE*sizeof(wchar_t));
const char* src = in.current();
if(*src == 0) {
out.append(1, (logchar) 0);
in.position(in.position() + 1);
} else {
size_t converted = mbsrtowcs(buf,
&src,
requested,
&mbstate);
if (converted == (size_t) -1) {
stat = LOG4CXX_BADARG;
in.position(src - in.data());
break;
} else {
stat = append(out, buf);
in.position(in.position() + converted);
}
}
}
return stat;
}
 
 
 
private:
MbstowcsCharsetDecoder(const MbstowcsCharsetDecoder&);
MbstowcsCharsetDecoder& operator=(const MbstowcsCharsetDecoder&);
};
private:
MbstowcsCharsetDecoder(const MbstowcsCharsetDecoder&);
MbstowcsCharsetDecoder& operator=(const MbstowcsCharsetDecoder&);
};
#endif
 
 
/**
/**
* Decoder used when the external and internal charsets
* are the same.
*
*/
class TrivialCharsetDecoder : public CharsetDecoder
{
public:
TrivialCharsetDecoder() {
}
class TrivialCharsetDecoder : public CharsetDecoder
{
public:
TrivialCharsetDecoder() {
}
 
virtual ~TrivialCharsetDecoder() {
}
virtual ~TrivialCharsetDecoder() {
}
 
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
size_t remaining = in.remaining();
if( remaining > 0) {
const logchar* src = (const logchar*) (in.data() + in.position());
size_t count = remaining / sizeof(logchar);
out.append(src, count);
in.position(in.position() + remaining);
}
return APR_SUCCESS;
}
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
size_t remaining = in.remaining();
if( remaining > 0) {
const logchar* src = (const logchar*) (in.data() + in.position());
size_t count = remaining / sizeof(logchar);
out.append(src, count);
in.position(in.position() + remaining);
}
return LOG4CXX_SUCCESS;
}
 
 
 
private:
TrivialCharsetDecoder(const TrivialCharsetDecoder&);
TrivialCharsetDecoder& operator=(const TrivialCharsetDecoder&);
};
private:
TrivialCharsetDecoder(const TrivialCharsetDecoder&);
TrivialCharsetDecoder& operator=(const TrivialCharsetDecoder&);
};
 
 
#if LOG4CXX_LOGCHAR_IS_UTF8
typedef TrivialCharsetDecoder UTF8CharsetDecoder;
typedef TrivialCharsetDecoder UTF8CharsetDecoder;
#else
/**
/**
* Converts from UTF-8 to std::wstring
*
*/
class UTF8CharsetDecoder : public CharsetDecoder
{
public:
UTF8CharsetDecoder() {
}
class UTF8CharsetDecoder : public CharsetDecoder
{
public:
UTF8CharsetDecoder() {
}
 
virtual ~UTF8CharsetDecoder() {
}
virtual ~UTF8CharsetDecoder() {
}
 
private:
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
if (in.remaining() > 0) {
std::string tmp(in.current(), in.remaining());
std::string::const_iterator iter = tmp.begin();
while(iter != tmp.end()) {
unsigned int sv = Transcoder::decode(tmp, iter);
if (sv == 0xFFFF) {
size_t offset = iter - tmp.begin();
in.position(in.position() + offset);
return APR_BADARG;
} else {
Transcoder::encode(sv, out);
}
}
in.position(in.limit());
private:
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
if (in.remaining() > 0) {
std::string tmp(in.current(), in.remaining());
std::string::const_iterator iter = tmp.begin();
while(iter != tmp.end()) {
unsigned int sv = Transcoder::decode(tmp, iter);
if (sv == 0xFFFF) {
size_t offset = iter - tmp.begin();
in.position(in.position() + offset);
return LOG4CXX_BADARG;
} else {
Transcoder::encode(sv, out);
}
}
in.position(in.limit());
}
return LOG4CXX_SUCCESS;
}
return APR_SUCCESS;
}
 
private:
private:
UTF8CharsetDecoder(const UTF8CharsetDecoder&);
UTF8CharsetDecoder& operator=(const UTF8CharsetDecoder&);
};
};
#endif
 
/**
/**
* Converts from ISO-8859-1 to LogString.
*
*/
class ISOLatinCharsetDecoder : public CharsetDecoder
{
public:
ISOLatinCharsetDecoder() {
}
class ISOLatinCharsetDecoder : public CharsetDecoder
{
public:
ISOLatinCharsetDecoder() {
}
 
virtual ~ISOLatinCharsetDecoder() {
}
virtual ~ISOLatinCharsetDecoder() {
}
 
private:
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
if (in.remaining() > 0) {
private:
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
if (in.remaining() > 0) {
 
const unsigned char* src = (unsigned char*) in.current();
const unsigned char* srcEnd = src + in.remaining();
while(src < srcEnd) {
unsigned int sv = *(src++);
Transcoder::encode(sv, out);
}
in.position(in.limit());
const unsigned char* src = (unsigned char*) in.current();
const unsigned char* srcEnd = src + in.remaining();
while(src < srcEnd) {
unsigned int sv = *(src++);
Transcoder::encode(sv, out);
}
in.position(in.limit());
}
return LOG4CXX_SUCCESS;
}
return APR_SUCCESS;
}
 
 
 
private:
private:
ISOLatinCharsetDecoder(const ISOLatinCharsetDecoder&);
ISOLatinCharsetDecoder& operator=(const ISOLatinCharsetDecoder&);
};
};
 
 
/**
/**
* Converts from US-ASCII to LogString.
*
*/
class USASCIICharsetDecoder : public CharsetDecoder
{
public:
USASCIICharsetDecoder() {
}
class USASCIICharsetDecoder : public CharsetDecoder
{
public:
USASCIICharsetDecoder() {
}
 
virtual ~USASCIICharsetDecoder() {
}
virtual ~USASCIICharsetDecoder() {
}
 
private:
private:
 
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
log4cxx_status_t stat = APR_SUCCESS;
if (in.remaining() > 0) {
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
log4cxx_status_t stat = LOG4CXX_SUCCESS;
if (in.remaining() > 0) {
 
const unsigned char* src = (unsigned char*) in.current();
const unsigned char* srcEnd = src + in.remaining();
while(src < srcEnd) {
unsigned char sv = *src;
if (sv < 0x80) {
src++;
Transcoder::encode(sv, out);
} else {
stat = APR_BADARG;
break;
}
const unsigned char* src = (unsigned char*) in.current();
const unsigned char* srcEnd = src + in.remaining();
while(src < srcEnd) {
unsigned char sv = *src;
if (sv < 0x80) {
src++;
Transcoder::encode(sv, out);
} else {
stat = LOG4CXX_BADARG;
break;
}
}
in.position(src - (const unsigned char*) in.data());
}
return stat;
}
in.position(src - (const unsigned char*) in.data());
}
return stat;
}
 
 
 
private:
private:
USASCIICharsetDecoder(const USASCIICharsetDecoder&);
USASCIICharsetDecoder& operator=(const USASCIICharsetDecoder&);
};
};
 
/**
/**
* Charset decoder that uses an embedded CharsetDecoder consistent
* with current locale settings.
*/
class LocaleCharsetDecoder : public CharsetDecoder {
public:
LocaleCharsetDecoder() : pool(), mutex(pool), decoder(), encoding() {
}
virtual ~LocaleCharsetDecoder() {
}
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
const char* p = in.current();
size_t i = in.position();
class LocaleCharsetDecoder : public CharsetDecoder {
public:
LocaleCharsetDecoder() : pool(), mutex(pool), decoder(), encoding() {
}
virtual ~LocaleCharsetDecoder() {
}
virtual log4cxx_status_t decode(ByteBuffer& in,
LogString& out) {
const char* p = in.current();
size_t i = in.position();
#if !LOG4CXX_CHARSET_EBCDIC
for (; i < in.limit() && ((unsigned int) *p) < 0x80; i++, p++) {
out.append(1, *p);
}
in.position(i);
for (; i < in.limit() && ((unsigned int) *p) < 0x80; i++, p++) {
out.append(1, *p);
}
in.position(i);
#endif
if (i < in.limit()) {
Pool subpool;
const char* enc = apr_os_locale_encoding(subpool.getAPRPool());
{
synchronized sync(mutex);
if (enc == 0) {
if (decoder == 0) {
encoding = "C";
decoder = new USASCIICharsetDecoder();
}
} else if (encoding != enc) {
encoding = enc;
try {
LogString e;
Transcoder::decode(encoding, e);
decoder = getDecoder(e);
} catch (IllegalArgumentException& ex) {
decoder = new USASCIICharsetDecoder();
}
}
}
return decoder->decode(in, out);
}
return APR_SUCCESS;
}
private:
Pool pool;
Mutex mutex;
CharsetDecoderPtr decoder;
std::string encoding;
};
if (i < in.limit()) {
Pool subpool;
//const char* enc = apr_os_locale_encoding(subpool.getAPRPool());
//RM5248 no idea what this should be
const char* enc = "UTF-8";
{
synchronized sync(mutex);
if (enc == 0) {
if (decoder == 0) {
encoding = "C";
decoder = new USASCIICharsetDecoder();
}
} else if (encoding != enc) {
encoding = enc;
try {
LogString e;
Transcoder::decode(encoding, e);
decoder = getDecoder(e);
} catch (IllegalArgumentException& ex) {
decoder = new USASCIICharsetDecoder();
}
}
}
return decoder->decode(in, out);
}
return LOG4CXX_SUCCESS;
}
private:
Pool pool;
Mutex mutex;
CharsetDecoderPtr decoder;
std::string encoding;
};
 
 
 
} // namespace helpers
} // namespace helpers
 
} //namespace log4cxx
 
419,11 → 425,11
 
CharsetDecoder* CharsetDecoder::createDefaultDecoder() {
#if LOG4CXX_CHARSET_UTF8
return new UTF8CharsetDecoder();
return new UTF8CharsetDecoder();
#elif LOG4CXX_CHARSET_ISO88591 || defined(_WIN32_WCE)
return new ISOLatinCharsetDecoder();
return new ISOLatinCharsetDecoder();
#elif LOG4CXX_CHARSET_USASCII
return new USASCIICharsetDecoder();
return new USASCIICharsetDecoder();
#elif LOG4CXX_LOGCHAR_IS_WCHAR && LOG4CXX_HAS_MBSRTOWCS
return new MbstowcsCharsetDecoder();
#else
439,7 → 445,7
// then create a new decoder.
//
if (decoder == 0) {
return createDefaultDecoder();
return createDefaultDecoder();
}
return decoder;
}
452,7 → 458,7
// then create a new decoder.
//
if (decoder == 0) {
return new UTF8CharsetDecoder();
return new UTF8CharsetDecoder();
}
return decoder;
}
464,16 → 470,16
 
CharsetDecoderPtr CharsetDecoder::getDecoder(const LogString& charset) {
if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF-8"), LOG4CXX_STR("utf-8")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF8"), LOG4CXX_STR("utf8"))) {
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("UTF8"), LOG4CXX_STR("utf8"))) {
return new UTF8CharsetDecoder();
} else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("C"), LOG4CXX_STR("c")) ||
charset == LOG4CXX_STR("646") ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("US-ASCII"), LOG4CXX_STR("us-ascii")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968"))) {
charset == LOG4CXX_STR("646") ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("US-ASCII"), LOG4CXX_STR("us-ascii")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO646-US"), LOG4CXX_STR("iso646-US")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ANSI_X3.4-1968"), LOG4CXX_STR("ansi_x3.4-1968"))) {
return new USASCIICharsetDecoder();
} else if (StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-8859-1"), LOG4CXX_STR("iso-8859-1")) ||
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1"))) {
StringHelper::equalsIgnoreCase(charset, LOG4CXX_STR("ISO-LATIN-1"), LOG4CXX_STR("iso-latin-1"))) {
return new ISOLatinCharsetDecoder();
}
#if APR_HAS_XLATE || !defined(_WIN32)
/trunk/log4cxx/src/main/cpp/bytearrayinputstream.cpp
18,7 → 18,6
#include <log4cxx/helpers/bytearrayinputstream.h>
#include <log4cxx/helpers/exception.h>
#include <log4cxx/helpers/bytebuffer.h>
#include <apr_file_io.h>
#include <log4cxx/helpers/transcoder.h>
#include <algorithm>
 
/trunk/log4cxx/src/main/cpp/condition.cpp
18,7 → 18,9
#include <log4cxx/helpers/condition.h>
#include <log4cxx/helpers/exception.h>
 
#ifndef LOG4CXX_QT
#include <apr_thread_cond.h>
#endif
#include <log4cxx/helpers/synchronized.h>
#include <log4cxx/helpers/pool.h>
#include <log4cxx/helpers/thread.h>
34,6 → 36,8
if (stat != APR_SUCCESS) {
throw RuntimeException(stat);
}
#elif LOG4CXX_QT
condition = new QWaitCondition();
#endif
}
 
41,6 → 45,8
{
#if APR_HAS_THREADS
apr_thread_cond_destroy(condition);
#elif LOG4CXX_QT
delete condition;
#endif
}
 
48,6 → 54,8
{
#if APR_HAS_THREADS
return apr_thread_cond_broadcast(condition);
#elif LOG4CXX_QT
condition->wakeAll();
#else
return APR_SUCCESS;
#endif
65,6 → 73,17
if (stat != APR_SUCCESS) {
throw InterruptedException(stat);
}
#elif LOG4CXX_QT
bool stat;
if (Thread::interrupted()) {
throw InterruptedException();
}
mutex.getQtMutex()->lock();
stat = condition->wait( mutex.getQtMutex() );
mutex.getQtMutex()->unlock();
if (stat != true ) {
throw InterruptedException(stat);
}
#endif
}
 
/trunk/log4cxx/src/main/include/log4cxx/helpers/condition.h
21,9 → 21,13
#include <log4cxx/log4cxx.h>
#include <log4cxx/helpers/mutex.h>
 
#ifdef LOG4CXX_QT
#include <QWaitCondition>
#else
extern "C" {
struct apr_thread_cond_t;
}
#endif
 
namespace log4cxx
{
63,7 → 67,11
void await(Mutex& lock);
 
private:
#ifndef LOG4CXX_QT
apr_thread_cond_t* condition;
#else
QWaitCondition* condition;
#endif
Condition(const Condition&);
Condition& operator=(const Condition&);
};
/trunk/log4cxx/src/main/include/log4cxx/helpers/mutex.h
20,32 → 20,56
 
#include <log4cxx/log4cxx.h>
 
#ifndef LOG4CXX_QT
extern "C" {
struct apr_thread_mutex_t;
struct apr_pool_t;
struct apr_thread_mutex_t;
struct apr_pool_t;
}
 
 
namespace log4cxx
{
namespace helpers
{
class Pool;
namespace helpers
{
class Pool;
 
class LOG4CXX_EXPORT Mutex
{
public:
Mutex(log4cxx::helpers::Pool& p);
Mutex(apr_pool_t* p);
~Mutex();
apr_thread_mutex_t* getAPRMutex() const;
class LOG4CXX_EXPORT Mutex
{
public:
Mutex(log4cxx::helpers::Pool& p);
Mutex(apr_pool_t* p);
~Mutex();
apr_thread_mutex_t* getAPRMutex() const;
 
private:
Mutex(const Mutex&);
Mutex& operator=(const Mutex&);
apr_thread_mutex_t* mutex;
};
} // namespace helpers
private:
Mutex(const Mutex&);
Mutex& operator=(const Mutex&);
apr_thread_mutex_t* mutex;
};
} // namespace helpers
} // namespace log4cxx
#else
#include <QMutex>
 
namespace log4cxx
{
namespace helpers
{
 
class Pool;
 
class LOG4CXX_EXPORT Mutex
{
public:
Mutex(log4cxx::helpers::Pool& p);
Mutex();
~Mutex();
QMutex* getQtMutex() const;
 
private:
QMutex* mutex;
};
}
}
#endif //_LOG4CXX_QT
#endif //_LOG4CXX_HELPERS_MUTEX_H
/trunk/log4cxx/src/main/include/log4cxx/log4cxx.hw
35,6 → 35,8
#define LOG4CXX_WCHAR_T_API 1
#define LOG4CXX_UNICHAR_API 0
#define LOG4CXX_CFSTRING_API 0
#define LOG4CXX_SUCCESS 0
#define LOG4CXX_BADARG 2000
 
#if defined(_MSC_VER)
typedef __int64 log4cxx_int64_t;
/trunk/log4cxx/log4cxx-qt.pro
0,0 → 1,354
#-------------------------------------------------
#
# Project created by QtCreator 2015-04-17T19:30:21
#
#-------------------------------------------------
 
QT -= gui
 
TARGET = log4cxx-qt
TEMPLATE = lib
 
DEFINES += LOG4CXX_QT LOG4CXX
 
SOURCES += \
src/main/cpp/action.cpp \
src/main/cpp/appenderattachableimpl.cpp \
src/main/cpp/appenderskeleton.cpp \
src/main/cpp/asyncappender.cpp \
src/main/cpp/basicconfigurator.cpp \
src/main/cpp/bufferedwriter.cpp \
src/main/cpp/bytearrayinputstream.cpp \
src/main/cpp/bytearrayoutputstream.cpp \
src/main/cpp/bytebuffer.cpp \
src/main/cpp/cacheddateformat.cpp \
src/main/cpp/charsetdecoder.cpp \
src/main/cpp/charsetencoder.cpp \
src/main/cpp/class.cpp \
src/main/cpp/classnamepatternconverter.cpp \
src/main/cpp/classregistration.cpp \
src/main/cpp/condition.cpp \
src/main/cpp/configurator.cpp \
src/main/cpp/consoleappender.cpp \
src/main/cpp/cyclicbuffer.cpp \
src/main/cpp/dailyrollingfileappender.cpp \
src/main/cpp/datagrampacket.cpp \
src/main/cpp/datagramsocket.cpp \
src/main/cpp/date.cpp \
src/main/cpp/dateformat.cpp \
src/main/cpp/datelayout.cpp \
src/main/cpp/datepatternconverter.cpp \
src/main/cpp/defaultconfigurator.cpp \
src/main/cpp/defaultloggerfactory.cpp \
src/main/cpp/defaultrepositoryselector.cpp \
src/main/cpp/domconfigurator.cpp \
src/main/cpp/exception.cpp \
src/main/cpp/fallbackerrorhandler.cpp \
src/main/cpp/file.cpp \
src/main/cpp/fileappender.cpp \
src/main/cpp/filedatepatternconverter.cpp \
src/main/cpp/fileinputstream.cpp \
src/main/cpp/filelocationpatternconverter.cpp \
src/main/cpp/fileoutputstream.cpp \
src/main/cpp/filerenameaction.cpp \
src/main/cpp/filewatchdog.cpp \
src/main/cpp/filter.cpp \
src/main/cpp/filterbasedtriggeringpolicy.cpp \
src/main/cpp/fixedwindowrollingpolicy.cpp \
src/main/cpp/formattinginfo.cpp \
src/main/cpp/fulllocationpatternconverter.cpp \
src/main/cpp/gzcompressaction.cpp \
src/main/cpp/hierarchy.cpp \
src/main/cpp/htmllayout.cpp \
src/main/cpp/inetaddress.cpp \
src/main/cpp/inputstream.cpp \
src/main/cpp/inputstreamreader.cpp \
src/main/cpp/integer.cpp \
src/main/cpp/integerpatternconverter.cpp \
src/main/cpp/layout.cpp \
src/main/cpp/level.cpp \
src/main/cpp/levelmatchfilter.cpp \
src/main/cpp/levelpatternconverter.cpp \
src/main/cpp/levelrangefilter.cpp \
src/main/cpp/linelocationpatternconverter.cpp \
src/main/cpp/lineseparatorpatternconverter.cpp \
src/main/cpp/literalpatternconverter.cpp \
src/main/cpp/loader.cpp \
src/main/cpp/locale.cpp \
src/main/cpp/locationinfo.cpp \
src/main/cpp/logger.cpp \
src/main/cpp/loggerpatternconverter.cpp \
src/main/cpp/loggingevent.cpp \
src/main/cpp/loggingeventpatternconverter.cpp \
src/main/cpp/loglog.cpp \
src/main/cpp/logmanager.cpp \
src/main/cpp/logstream.cpp \
src/main/cpp/manualtriggeringpolicy.cpp \
src/main/cpp/mdc.cpp \
src/main/cpp/messagebuffer.cpp \
src/main/cpp/messagepatternconverter.cpp \
src/main/cpp/methodlocationpatternconverter.cpp \
src/main/cpp/mutex.cpp \
src/main/cpp/nameabbreviator.cpp \
src/main/cpp/namepatternconverter.cpp \
src/main/cpp/ndc.cpp \
src/main/cpp/ndcpatternconverter.cpp \
src/main/cpp/nteventlogappender.cpp \
src/main/cpp/objectimpl.cpp \
src/main/cpp/objectoutputstream.cpp \
src/main/cpp/objectptr.cpp \
src/main/cpp/obsoleterollingfileappender.cpp \
src/main/cpp/odbcappender.cpp \
src/main/cpp/onlyonceerrorhandler.cpp \
src/main/cpp/optionconverter.cpp \
src/main/cpp/outputdebugstringappender.cpp \
src/main/cpp/outputstream.cpp \
src/main/cpp/outputstreamwriter.cpp \
src/main/cpp/patternconverter.cpp \
src/main/cpp/patternlayout.cpp \
src/main/cpp/patternparser.cpp \
src/main/cpp/pool.cpp \
src/main/cpp/properties.cpp \
src/main/cpp/propertiespatternconverter.cpp \
src/main/cpp/propertyconfigurator.cpp \
src/main/cpp/propertyresourcebundle.cpp \
src/main/cpp/propertysetter.cpp \
src/main/cpp/reader.cpp \
src/main/cpp/relativetimedateformat.cpp \
src/main/cpp/relativetimepatternconverter.cpp \
src/main/cpp/resourcebundle.cpp \
src/main/cpp/rollingfileappender.cpp \
src/main/cpp/rollingpolicy.cpp \
src/main/cpp/rollingpolicybase.cpp \
src/main/cpp/rolloverdescription.cpp \
src/main/cpp/rootlogger.cpp \
src/main/cpp/serversocket.cpp \
src/main/cpp/simpledateformat.cpp \
src/main/cpp/simplelayout.cpp \
src/main/cpp/sizebasedtriggeringpolicy.cpp \
src/main/cpp/smtpappender.cpp \
src/main/cpp/socket.cpp \
src/main/cpp/socketappender.cpp \
src/main/cpp/socketappenderskeleton.cpp \
src/main/cpp/sockethubappender.cpp \
src/main/cpp/socketoutputstream.cpp \
src/main/cpp/strftimedateformat.cpp \
src/main/cpp/stringhelper.cpp \
src/main/cpp/stringmatchfilter.cpp \
src/main/cpp/stringtokenizer.cpp \
src/main/cpp/synchronized.cpp \
src/main/cpp/syslogappender.cpp \
src/main/cpp/syslogwriter.cpp \
src/main/cpp/system.cpp \
src/main/cpp/systemerrwriter.cpp \
src/main/cpp/systemoutwriter.cpp \
src/main/cpp/telnetappender.cpp \
src/main/cpp/threadcxx.cpp \
src/main/cpp/threadlocal.cpp \
src/main/cpp/threadpatternconverter.cpp \
src/main/cpp/threadspecificdata.cpp \
src/main/cpp/throwableinformationpatternconverter.cpp \
src/main/cpp/timebasedrollingpolicy.cpp \
src/main/cpp/timezone.cpp \
src/main/cpp/transcoder.cpp \
src/main/cpp/transform.cpp \
src/main/cpp/triggeringpolicy.cpp \
src/main/cpp/ttcclayout.cpp \
src/main/cpp/writer.cpp \
src/main/cpp/writerappender.cpp \
src/main/cpp/xmllayout.cpp \
src/main/cpp/xmlsocketappender.cpp \
src/main/cpp/zipcompressaction.cpp
 
HEADERS += \
src/main/include/log4cxx/appender.h \
src/main/include/log4cxx/appenderskeleton.h \
src/main/include/log4cxx/asyncappender.h \
src/main/include/log4cxx/basicconfigurator.h \
src/main/include/log4cxx/config_msvc.h.in \
src/main/include/log4cxx/consoleappender.h \
src/main/include/log4cxx/dailyrollingfileappender.h \
src/main/include/log4cxx/defaultconfigurator.h \
src/main/include/log4cxx/defaultloggerfactory.h \
src/main/include/log4cxx/file.h \
src/main/include/log4cxx/fileappender.h \
src/main/include/log4cxx/hierarchy.h \
src/main/include/log4cxx/htmllayout.h \
src/main/include/log4cxx/layout.h \
src/main/include/log4cxx/level.h \
src/main/include/log4cxx/log4cxx.h.in \
src/main/include/log4cxx/log4cxx.hw \
src/main/include/log4cxx/logger.h \
src/main/include/log4cxx/logmanager.h \
src/main/include/log4cxx/logstring.h \
src/main/include/log4cxx/mdc.h \
src/main/include/log4cxx/ndc.h \
src/main/include/log4cxx/patternlayout.h \
src/main/include/log4cxx/portability.h \
src/main/include/log4cxx/propertyconfigurator.h \
src/main/include/log4cxx/provisionnode.h \
src/main/include/log4cxx/rollingfileappender.h \
src/main/include/log4cxx/simplelayout.h \
src/main/include/log4cxx/stream.h \
src/main/include/log4cxx/ttcclayout.h \
src/main/include/log4cxx/writerappender.h \
src/main/include/log4cxx/config/propertysetter.h \
src/main/include/log4cxx/db/odbcappender.h \
src/main/include/log4cxx/filter/andfilter.h \
src/main/include/log4cxx/filter/denyallfilter.h \
src/main/include/log4cxx/filter/expressionfilter.h \
src/main/include/log4cxx/filter/levelmatchfilter.h \
src/main/include/log4cxx/filter/levelrangefilter.h \
src/main/include/log4cxx/filter/locationinfofilter.h \
src/main/include/log4cxx/filter/mapfilter.h \
src/main/include/log4cxx/filter/propertyfilter.h \
src/main/include/log4cxx/filter/stringmatchfilter.h \
src/main/include/log4cxx/net/smtpappender.h \
src/main/include/log4cxx/net/socketappender.h \
src/main/include/log4cxx/net/socketappenderskeleton.h \
src/main/include/log4cxx/net/sockethubappender.h \
src/main/include/log4cxx/net/syslogappender.h \
src/main/include/log4cxx/net/telnetappender.h \
src/main/include/log4cxx/net/xmlsocketappender.h \
src/main/include/log4cxx/nt/nteventlogappender.h \
src/main/include/log4cxx/nt/outputdebugstringappender.h \
src/main/include/log4cxx/pattern/classnamepatternconverter.h \
src/main/include/log4cxx/pattern/datepatternconverter.h \
src/main/include/log4cxx/pattern/filedatepatternconverter.h \
src/main/include/log4cxx/pattern/filelocationpatternconverter.h \
src/main/include/log4cxx/pattern/formattinginfo.h \
src/main/include/log4cxx/pattern/fulllocationpatternconverter.h \
src/main/include/log4cxx/pattern/integerpatternconverter.h \
src/main/include/log4cxx/pattern/levelpatternconverter.h \
src/main/include/log4cxx/pattern/linelocationpatternconverter.h \
src/main/include/log4cxx/pattern/lineseparatorpatternconverter.h \
src/main/include/log4cxx/pattern/literalpatternconverter.h \
src/main/include/log4cxx/pattern/loggerpatternconverter.h \
src/main/include/log4cxx/pattern/loggingeventpatternconverter.h \
src/main/include/log4cxx/pattern/messagepatternconverter.h \
src/main/include/log4cxx/pattern/methodlocationpatternconverter.h \
src/main/include/log4cxx/pattern/nameabbreviator.h \
src/main/include/log4cxx/pattern/namepatternconverter.h \
src/main/include/log4cxx/pattern/ndcpatternconverter.h \
src/main/include/log4cxx/pattern/patternconverter.h \
src/main/include/log4cxx/pattern/patternparser.h \
src/main/include/log4cxx/pattern/propertiespatternconverter.h \
src/main/include/log4cxx/pattern/relativetimepatternconverter.h \
src/main/include/log4cxx/pattern/threadpatternconverter.h \
src/main/include/log4cxx/pattern/throwableinformationpatternconverter.h \
src/main/include/log4cxx/private/log4cxx_private.h \
src/main/include/log4cxx/rolling/action.h \
src/main/include/log4cxx/rolling/filerenameaction.h \
src/main/include/log4cxx/rolling/filterbasedtriggeringpolicy.h \
src/main/include/log4cxx/rolling/fixedwindowrollingpolicy.h \
src/main/include/log4cxx/rolling/gzcompressaction.h \
src/main/include/log4cxx/rolling/manualtriggeringpolicy.h \
src/main/include/log4cxx/rolling/rollingfileappender.h \
src/main/include/log4cxx/rolling/rollingfileappenderskeleton.h \
src/main/include/log4cxx/rolling/rollingpolicy.h \
src/main/include/log4cxx/rolling/rollingpolicybase.h \
src/main/include/log4cxx/rolling/rolloverdescription.h \
src/main/include/log4cxx/rolling/sizebasedtriggeringpolicy.h \
src/main/include/log4cxx/rolling/timebasedrollingpolicy.h \
src/main/include/log4cxx/rolling/triggeringpolicy.h \
src/main/include/log4cxx/rolling/zipcompressaction.h \
src/main/include/log4cxx/spi/appenderattachable.h \
src/main/include/log4cxx/spi/configurator.h \
src/main/include/log4cxx/spi/defaultrepositoryselector.h \
src/main/include/log4cxx/spi/errorhandler.h \
src/main/include/log4cxx/spi/filter.h \
src/main/include/log4cxx/spi/hierarchyeventlistener.h \
src/main/include/log4cxx/spi/loggerfactory.h \
src/main/include/log4cxx/spi/loggerrepository.h \
src/main/include/log4cxx/spi/loggingevent.h \
src/main/include/log4cxx/spi/optionhandler.h \
src/main/include/log4cxx/spi/repositoryselector.h \
src/main/include/log4cxx/spi/rootlogger.h \
src/main/include/log4cxx/spi/triggeringeventevaluator.h \
src/main/include/log4cxx/spi/location/locationinfo.h \
src/main/include/log4cxx/varia/fallbackerrorhandler.h \
src/main/include/log4cxx/xml/domconfigurator.h \
src/main/include/log4cxx/xml/xmllayout.h \
src/main/include/log4cxx/helpers/absolutetimedateformat.h \
src/main/include/log4cxx/helpers/appenderattachableimpl.h \
src/main/include/log4cxx/helpers/bufferedoutputstream.h \
src/main/include/log4cxx/helpers/bufferedwriter.h \
src/main/include/log4cxx/helpers/bytearrayinputstream.h \
src/main/include/log4cxx/helpers/bytearrayoutputstream.h \
src/main/include/log4cxx/helpers/bytebuffer.h \
src/main/include/log4cxx/helpers/cacheddateformat.h \
src/main/include/log4cxx/helpers/charsetdecoder.h \
src/main/include/log4cxx/helpers/charsetencoder.h \
src/main/include/log4cxx/helpers/class.h \
src/main/include/log4cxx/helpers/classregistration.h \
src/main/include/log4cxx/helpers/condition.h \
src/main/include/log4cxx/helpers/cyclicbuffer.h \
src/main/include/log4cxx/helpers/datagrampacket.h \
src/main/include/log4cxx/helpers/datagramsocket.h \
src/main/include/log4cxx/helpers/date.h \
src/main/include/log4cxx/helpers/dateformat.h \
src/main/include/log4cxx/helpers/datelayout.h \
src/main/include/log4cxx/helpers/datetimedateformat.h \
src/main/include/log4cxx/helpers/exception.h \
src/main/include/log4cxx/helpers/fileinputstream.h \
src/main/include/log4cxx/helpers/fileoutputstream.h \
src/main/include/log4cxx/helpers/filewatchdog.h \
src/main/include/log4cxx/helpers/inetaddress.h \
src/main/include/log4cxx/helpers/inputstream.h \
src/main/include/log4cxx/helpers/inputstreamreader.h \
src/main/include/log4cxx/helpers/integer.h \
src/main/include/log4cxx/helpers/iso8601dateformat.h \
src/main/include/log4cxx/helpers/loader.h \
src/main/include/log4cxx/helpers/locale.h \
src/main/include/log4cxx/helpers/loglog.h \
src/main/include/log4cxx/helpers/messagebuffer.h \
src/main/include/log4cxx/helpers/mutex.h \
src/main/include/log4cxx/helpers/object.h \
src/main/include/log4cxx/helpers/objectimpl.h \
src/main/include/log4cxx/helpers/objectoutputstream.h \
src/main/include/log4cxx/helpers/objectptr.h \
src/main/include/log4cxx/helpers/onlyonceerrorhandler.h \
src/main/include/log4cxx/helpers/optionconverter.h \
src/main/include/log4cxx/helpers/outputstream.h \
src/main/include/log4cxx/helpers/outputstreamwriter.h \
src/main/include/log4cxx/helpers/pool.h \
src/main/include/log4cxx/helpers/properties.h \
src/main/include/log4cxx/helpers/propertyresourcebundle.h \
src/main/include/log4cxx/helpers/reader.h \
src/main/include/log4cxx/helpers/relativetimedateformat.h \
src/main/include/log4cxx/helpers/resourcebundle.h \
src/main/include/log4cxx/helpers/serversocket.h \
src/main/include/log4cxx/helpers/simpledateformat.h \
src/main/include/log4cxx/helpers/socket.h \
src/main/include/log4cxx/helpers/socketoutputstream.h \
src/main/include/log4cxx/helpers/strftimedateformat.h \
src/main/include/log4cxx/helpers/strictmath.h \
src/main/include/log4cxx/helpers/stringhelper.h \
src/main/include/log4cxx/helpers/stringtokenizer.h \
src/main/include/log4cxx/helpers/synchronized.h \
src/main/include/log4cxx/helpers/syslogwriter.h \
src/main/include/log4cxx/helpers/system.h \
src/main/include/log4cxx/helpers/systemerrwriter.h \
src/main/include/log4cxx/helpers/systemoutwriter.h \
src/main/include/log4cxx/helpers/tchar.h \
src/main/include/log4cxx/helpers/thread.h \
src/main/include/log4cxx/helpers/threadlocal.h \
src/main/include/log4cxx/helpers/threadspecificdata.h \
src/main/include/log4cxx/helpers/timezone.h \
src/main/include/log4cxx/helpers/transcoder.h \
src/main/include/log4cxx/helpers/transform.h \
src/main/include/log4cxx/helpers/writer.h \
src/main/include/log4cxx/helpers/xml.h
 
INCLUDEPATH += $$PWD/src/main/include
 
unix {
target.path = /usr/lib
INSTALLS += target
}
 
DISTFILES += \
src/main/include/log4cxx/Makefile.am \
src/main/include/log4cxx/Makefile.in \
src/main/include/log4cxx/helpers/Makefile.am \
src/main/include/log4cxx/helpers/Makefile.in