static ssize_t cc_write(Sfio_t* sp, const void* buf, size_t n, Sfdisc_t* disc) { register State_t* state = (State_t*)((Codex_t*)disc)->data; char* fb; char* tb; size_t fn; size_t tn; size_t r; fb = (char*)buf; fn = n; n = 0; while (fn > 0) { tb = (char*)state->buf; tn = sizeof(buf); if ((r = iconv(state->cvt, &fb, &fn, &tb, &tn)) == (size_t)(-1)) return n ? n : -1; n += r; if (sfwr(sp, state->buf, r, disc) != r) return n ? n : -1; } return n; }
static int flush(register State_t* state, int c) { size_t n; if (c < 0 && state->col) { state->col = 0; PUTCHAR(state, '='); PUTCHAR(state, '\n'); } if (state->bp && (n = state->bp - state->buf) && sfwr(state->codex->sp, state->buf, n, &state->codex->sfdisc) != n) return EOF; state->be = (state->bp = state->buf) + sizeof(state->buf); if (c >= 0) *state->bp++ = c; return 0; }
ssize_t sasl_write(Sfio_t *f, const Void_t *buf, size_t size, Sfdisc_t *disc) { int result; const char *outbuf; int outlen; Sasldisc_t *sd = (Sasldisc_t *) disc; result = sasl_encode(sd->conn, buf, size, &outbuf, &outlen); if (result != SASL_OK) { return -1; } if (outbuf != NULL) { sfwr(f, outbuf, outlen, disc); } return size; }