[PATCH 4/7] log: Print truncated messages [and 1 more messages]

Ian Jackson ijackson at chiark.greenend.org.uk
Thu Jun 21 19:16:36 BST 2012


Simon Tatham writes ("Re: [PATCH 4/7] log: Print truncated messages"):
> [I tried to send this to sgo-software-discuss, but Mailman told me I
> wasn't allowed to post to it.]

It's subscriber postings only I'm afraid, to reduce spam.  Please
subscribe; if you read via the newsgroup, just turn off your mail
delivery.

> Ian Jackson  <ijackson at chiark.greenend.org.uk> wrote:
> > Fix this by always putting "\n\0" at the end of buff.  That way a
> > truncated message is printed and the buffer will be cleared out for
> > the next call.
> [...]
> >  	assert(bp < MESSAGE_BUFLEN);
> >  	vsnprintf(buff+bp,MESSAGE_BUFLEN-bp,message,args);
> > +	buff[sizeof(buff)-2] = '\n';
> > +	buff[sizeof(buff)-1] = '\0';
> 
> In the case where the line was _almost_ too long, so that vsnprintf
> wrote its own \0 to buff[sizeof(buff)-2], will this not have the
> unfortunate effect of adding a second newline?

See my updated commit message.

> (Also, if it were me I'd stick with one of MESSAGE_BUFLEN and
> sizeof(buff), rather than switching from one to the other half way
> through. I presume they're equivalent anyway, but it's more
> confusing like this.)

Because of this comment I wrote:

Ian Jackson writes ("Re: [PATCH 04/19] log: Print truncated messages"):
> I should have changed these sizeofs to MESSAGE_BUFLENs.

But in fact:

      static char buff[MESSAGE_BUFLEN+1]={0,};

So using MESSAGE_BUFLEN would be wrong.  And using sizeof() makes it
completely clear that at least that part of the code is correct
(modulo minor infelicities).

Ian.



More information about the sgo-software-discuss mailing list