isync

mailbox synchronization program
git clone https://git.code.sf.net/p/isync/isync
Log | Files | Refs | README | LICENSE

commit 951b7e77f8adb0ba41e51c3bf8222bf6cf5890dd
parent 509a191474f9c872166d9345d0fd5c6b16cb36d8
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date:   Sat,  5 Nov 2016 18:32:49 +0100

factor out copy_msg_bytes()

Diffstat:
Msrc/sync.c | 64++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/sync.c b/src/sync.c @@ -302,6 +302,36 @@ copy_msg( copy_vars_t *vars ) static void msg_stored( int sts, int uid, void *aux ); static void +copy_msg_bytes( char **out_ptr, const char *in_buf, int *in_idx, int in_len, int in_cr, int out_cr ) +{ + char *out = *out_ptr; + int idx = *in_idx; + if (out_cr != in_cr) { + char c; + if (out_cr) { + for (; idx < in_len; idx++) { + if ((c = in_buf[idx]) != '\r') { + if (c == '\n') + *out++ = '\r'; + *out++ = c; + } + } + } else { + for (; idx < in_len; idx++) { + if ((c = in_buf[idx]) != '\r') + *out++ = c; + } + } + } else { + memcpy( out, in_buf + idx, in_len - idx ); + out += in_len - idx; + idx = in_len; + } + *out_ptr = out; + *in_idx = idx; +} + +static void msg_fetched( int sts, void *aux ) { copy_vars_t *vars = (copy_vars_t *)aux; @@ -376,23 +406,7 @@ msg_fetched( int sts, void *aux ) buf = vars->data.data = nfmalloc( vars->data.len ); i = 0; if (vars->srec) { - if (tcr != scr) { - if (tcr) { - for (; i < sbreak; i++) - if ((c = fmap[i]) != '\r') { - if (c == '\n') - *buf++ = '\r'; - *buf++ = c; - } - } else { - for (; i < sbreak; i++) - if ((c = fmap[i]) != '\r') - *buf++ = c; - } - } else { - memcpy( buf, fmap, sbreak ); - buf += sbreak; - } + copy_msg_bytes( &buf, fmap, &i, sbreak, scr, tcr ); memcpy( buf, "X-TUID: ", 8 ); buf += 8; @@ -403,21 +417,7 @@ msg_fetched( int sts, void *aux ) *buf++ = '\n'; i = ebreak; } - if (tcr != scr) { - if (tcr) { - for (; i < len; i++) - if ((c = fmap[i]) != '\r') { - if (c == '\n') - *buf++ = '\r'; - *buf++ = c; - } - } else { - for (; i < len; i++) - if ((c = fmap[i]) != '\r') - *buf++ = c; - } - } else - memcpy( buf, fmap + i, len - i ); + copy_msg_bytes( &buf, fmap, &i, len, scr, tcr ); free( fmap ); }