On 12/12/07, Curt Arnold <[EMAIL PROTECTED]> wrote:
>
>
> On Dec 12, 2007, at 7:17 AM, Mykhailo Parfeniuk wrote:
>
> > When I use XMLSocketAppender in my application it fails with
> > assertion "invalid subscript". The reason is it tries to append zero
> > length string to output .
> > When I looked at code I saw strange implementation of function write:
> >
> > void OutputStreamWriter::write(const LogString& str, Pool& p) {
> > if (str.length() > 0) {
> > enum { BUFSIZE = 1024 };
> > char rawbuf[BUFSIZE];
> > ByteBuffer buf(rawbuf, (size_t) BUFSIZE);
> > enc->reset();
> > LogString::const_iterator iter = str.begin();
> > while(iter != str.end()) {
> > CharsetEncoder::encode(enc, str, iter, buf);
> > buf.flip();
> > out->write(buf, p);
> > buf.clear();
> > }
> > CharsetEncoder::encode(enc, str, iter, buf);
> > enc->flush(buf);
> > buf.flip();
> > out->write(buf, p);
> > }
> > }
> >
> > It seems to me that there should be iterator changing.
> > Am I right or not?
> > If use another appenders - file, console, all works normally.
> > Maybe I forgot initialize something? Or function is implemented
> > incorrectly?
> >
> >
> >
>
> OutputStreamWriter::write is also used by all FileAppenders, so any
> flaw in its implementation would be seen there too.
> CharsetEncoder::encode() will advance the iterator as it encodes the
> string into the specified encoding.
>
> There was recent work to make SocketAppender functional with
> Chainsaw. I did some sanity tests with it and the SocketAppender did
> work. However, those changes resulted in some refactoring of
> XMLSocketAppender and it is possible that I messed that up. I didn't
> do any sanity tests with XMLSocketAppender, since I could not figure
> out how to get Chainsaw to work with it. It would be helpful if you
> could
>
> a) See if SocketAppender works with Chainsaw for you
> b) Give me instructions on how to set up Chainsaw to work with the
> socket appender
>
>
>
>