> > So anyway, I think there are probably some good reasons to do the > merging in __fwritex rather than in the __stdio_write backend. But it > should be a lot simpler than what you initially proposed. > > Rich > Thanks for your feedback! In interest of keeping the proposal as simple as possible, I've gone with just one extra line of code (see below). It simply does copying for i <= 8. It works on my initial testing and I'm getting zero lengths in the 2nd writev iovec (as expected), but I'll test it more in coming week. size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f) { size_t i=0; if (!f->wend && __towrite(f)) return 0; if (l > f->wend - f->wpos) return f->write(f, s, l); if (f->lbf >= 0) { /* Match /^(.*\n|)/ */ for (i=l; i && s[i-1] != '\n'; i--); if (i) { *if (i <= 8) for (; i; i--, l--) *(f->wpos)++ = *s++;* size_t n = f->write(f, s, i); if (*!f->wpos ||* n < i) return n; l -= i; s += i; } } memcpy(f->wpos, s, l); f->wpos += l; return l+i; }