diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-10-12 11:15:54 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2007-10-12 11:15:54 +0000 |
commit | f7b0a392067280312b1a4e7a3b9254f008560ab5 (patch) | |
tree | 1d4d4a3216aae7ecf37e53445cfb0b54cfa19e1d | |
parent | abba405eb603deaf69e31701464d8fdeb3aa1f2c (diff) | |
download | mailfromd-f7b0a392067280312b1a4e7a3b9254f008560ab5.tar.gz mailfromd-f7b0a392067280312b1a4e7a3b9254f008560ab5.tar.bz2 |
* src/mtasim.c (_def_read): Return 0 if zero bytes were read
(get_input_line): Fix counting of input bytes.
(smtp): Fix checking for returns from process_data_reply.
* gacopyz/server.c (srv_format_macros): Do not add trailing zero
to the packet.
git-svn-id: file:///svnroot/mailfromd/trunk@1515 7a8a7f39-df28-0410-adc6-e0d955640f24
-rw-r--r-- | gacopyz/server.c | 3 | ||||
-rw-r--r-- | src/mtasim.c | 31 |
2 files changed, 19 insertions, 15 deletions
diff --git a/gacopyz/server.c b/gacopyz/server.c index 9187f10d..401854b2 100644 --- a/gacopyz/server.c +++ b/gacopyz/server.c @@ -164,7 +164,7 @@ srv_format_macros(gacopyz_srv_t srv, unsigned char cmd, size_t *psize) { size_t i; char *p; - size_t size = macro_size(srv) + 2; + size_t size = macro_size(srv) + 1; struct gacopyz_macro_def *def; srv_ensure_space(srv, size); @@ -188,7 +188,6 @@ srv_format_macros(gacopyz_srv_t srv, unsigned char cmd, size_t *psize) memcpy(p, def->value, len); p += len; } - *p = 0; *psize = size; } diff --git a/src/mtasim.c b/src/mtasim.c index debdc13f..228e832f 100644 --- a/src/mtasim.c +++ b/src/mtasim.c @@ -774,8 +774,8 @@ static int _def_read (void *sd, char *data, size_t size, size_t * nbytes) { int n = read ((int) sd, data, size); - if (n != size) - return errno ? errno : -1; + if (n && n != size) + return errno; if (nbytes) *nbytes = n; return 0; @@ -1037,14 +1037,13 @@ get_input_line (char *buf, size_t bufsize) if (buf[i] == '\n') { if (buf[i-1] == '\r') - { - i--; - buf[i] = '\n'; - } + buf[i-1] = '\n'; + else + i++; break; } } - buf[++i] = 0; + buf[i] = 0; return i; } @@ -1598,7 +1597,7 @@ smtp (void) char **argv; int kw, len; - if (get_input_line (buf, sizeof buf) < 0) + if (get_input_line (buf, sizeof buf) <= 0) { state = STATE_QUIT; continue; @@ -1851,8 +1850,7 @@ smtp (void) if (gsrv) { int rc = gacopyz_srv_eom (gsrv, NULL, 0); - if (process_data_reply ("cmd", "eom", rc, &state, &datareply)) - continue; + process_data_reply ("cmd", "eom", rc, &state, &datareply); /* FIXME: Clear macro table, except for the entries from command line */ gacopyz_srv_clear_macros (gsrv); @@ -1890,8 +1888,7 @@ smtp (void) int rc; rc = gacopyz_srv_eom (gsrv, body_buf, body_level); - if (process_data_reply ("cmd", "eom", rc, &state, &datareply)) - continue; + process_data_reply ("cmd", "eom", rc, &state, &datareply); /* FIXME: Clear macro table, except for the entries from command line */ gacopyz_srv_clear_macros (gsrv); @@ -1925,7 +1922,15 @@ smtp (void) body_level = 0; if (process_data_reply ("cmd", "data", rc, &state, &datareply)) - break; + { + if (datareply) + { + smtp_send_string (datareply, 0); + free (datareply); + datareply = 0; + } + } + break; } } } |