[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [xml] xmllib2-2.3.4 compiler warnings on QNX



Hi Daniel, All,

>    if this is the use of COPY_BUF macro it seems, I don't see how
> the compiler can detect an unreachable code in
> 
> #define COPY_BUF(l,b,i,v)                                     \
>     if (l == 1) b[i++] = (xmlChar) v;                                   \
>     else i += xmlCopyChar(l,&b[i],v)
> 
> int val = xmlParseStringCharRef(ctxt, &str);
> if (val != 0) {
>     COPY_BUF(0,buffer,nbchars,val);
> }
> 
>   And I would appreciate insight on who's wrong there...

Calling COPY_BUF with first parameter (l) equal 0 will never process the 
b[i++] = (xmlChar) v part.

I'm looking at a old sources (2.2.11), but I assume the documentation for 
xmlCopyChar is out of sync, as the first parameter is referred to as 
@len:  pointer to the length of the char read (or zero)

On a related topic, the len parameter is hardly used in xmlCopyChar and 
can probably be eliminated, along with the code branch computing len 
when the parameter is zero:

xmlCopyChar(xmlChar *out, int val) {
	if  (val >= 0x80) {
		xmlChar *savedout = out;
  		int bits; 
		if (val <   0x800) { *out++= (val >>  6) | 0xC0;  bits=  0; }
		else if (val < 0x10000) { *out++= (val >> 12) | 0xE0;  bits=  6; }
		else if (val < 0x110000)  { *out++= (val >> 18) | 0xF0;  bits= 12; }
		else {
			xmlGenericError(xmlGenericErrorContext,
				"Internal error, xmlCopyChar 0x%X out of bound\n", val);
			return(0);
		}
 		for ( ; bits >= 0; bits-= 6)
			*out++= ((val >> bits) & 0x3F) | 0x80 ;
		return (out - savedout);
	}
	*out = (xmlChar) val;
	return 1;
}

Regards,
Peter Jacobi





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]