* Add character to buffer.
* int agxbputc(agxbuf*, char)
*/
-#define agxbputc(X,C) ((((X)->ptr >= (X)->eptr) ? agxbmore(X,1) : 0), (void)(*(X)->ptr++ = ((unsigned char)C)))
+static inline int agxbputc(agxbuf * xb, char c) {
+ if (xb->ptr >= xb->eptr) {
+ if (agxbmore(xb, 1) != 0) {
+ return -1;
+ }
+ }
+ *xb->ptr++ = (unsigned char)c;
+ return 0;
+}
/* agxbuse:
* Null-terminates buffer; resets and returns pointer to data. The buffer is
if (v < 0x7F) /* entity needs 1 byte in UTF8 */
c = v;
else if (v < 0x07FF) { /* entity needs 2 bytes in UTF8 */
- agxbputc(&xb, (v >> 6) | 0xC0);
+ agxbputc(&xb, (char)((v >> 6) | 0xC0));
c = (v & 0x3F) | 0x80;
}
else { /* entity needs 3 bytes in UTF8 */
- agxbputc(&xb, (v >> 12) | 0xE0);
- agxbputc(&xb, ((v >> 6) & 0x3F) | 0x80);
+ agxbputc(&xb, (char)((v >> 12) | 0xE0));
+ agxbputc(&xb, (char)(((v >> 6) & 0x3F) | 0x80));
c = (v & 0x3F) | 0x80;
}
}
else /* copy n byte UTF8 characters */
for (ui = 0; ui < uc; ++ui)
if ((*s & 0xC0) == 0x80) {
- agxbputc(&xb, c);
+ agxbputc(&xb, (char)c);
c = *(unsigned char*)s++;
}
else {
c = cvtAndAppend (c, &xb);
break;
}
- agxbputc(&xb, c);
+ agxbputc(&xb, (char)c);
}
ns = agxbdisown(&xb);
agxbfree(&xb);
if (!v) v = '&';
}
if (v < 0x7F)
- agxbputc(&xb, v);
+ agxbputc(&xb, (char)v);
else if (v < 0x07FF) {
- agxbputc(&xb, (v >> 6) | 0xC0);
- agxbputc(&xb, (v & 0x3F) | 0x80);
+ agxbputc(&xb, (char)((v >> 6) | 0xC0));
+ agxbputc(&xb, (char)((v & 0x3F) | 0x80));
}
else {
- agxbputc(&xb, (v >> 12) | 0xE0);
- agxbputc(&xb, ((v >> 6) & 0x3F) | 0x80);
- agxbputc(&xb, (v & 0x3F) | 0x80);
+ agxbputc(&xb, (char)((v >> 12) | 0xE0));
+ agxbputc(&xb, (char)(((v >> 6) & 0x3F) | 0x80));
+ agxbputc(&xb, (char)((v & 0x3F) | 0x80));
}
}
ns = agxbdisown(&xb);
while ((c = *(unsigned char*)s++)) {
if (c < 0x7F)
- agxbputc(&xb, c);
+ agxbputc(&xb, (char)c);
else {
outc = (c & 0x03) << 6;
c = *(unsigned char*)s++;
outc = outc | (c & 0x3F);
- agxbputc(&xb, outc);
+ agxbputc(&xb, (char)outc);
}
}
ns = agxbdisown(&xb);
int dyna; /* true if buffer is malloc'ed */
} agxbuf;
-#define agxbputc(X,C) ((((X)->ptr >= (X)->eptr) ? agxbmore(X,1) : 0), \
- (void)(*(X)->ptr++ = ((unsigned char)C)))
#define agxbuse(X) (agxbputc(X,'\0'),(char*)((X)->ptr = (X)->buf))
static void agxbinit(agxbuf * xb, unsigned int hint, unsigned char *init)
return ssz;
}
+static int agxbputc(agxbuf * xb, char c) {
+ if (xb->ptr >= xb->eptr) {
+ if (agxbmore(xb, 1) != 0) {
+ return -1;
+ }
+ }
+ *xb->ptr++ = (unsigned char)c;
+ return 0;
+}
+
/* agxbfree:
* Free any malloced resources.
*/