diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-11-25 10:01:04 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-11-25 10:01:04 +0000 |
commit | 966bdae3e0ff9129ba5832f3e59b302c22371211 (patch) | |
tree | d6346d41c70c9ac6cac35ed5aca120c138b34a9f /libsylph/recv.c | |
parent | 104671cac3692b816ee3636b778d37d0f4dee485 (diff) |
removed CR+LF to LF conversion on receiving.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@779 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph/recv.c')
-rw-r--r-- | libsylph/recv.c | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/libsylph/recv.c b/libsylph/recv.c index 3d2a7968..55890df5 100644 --- a/libsylph/recv.c +++ b/libsylph/recv.c @@ -130,6 +130,7 @@ gint recv_write(SockInfo *sock, FILE *fp) gint len; gint count = 0; gint bytes = 0; + gchar *p; GTimeVal tv_prev, tv_cur; g_get_current_time(&tv_prev); @@ -164,19 +165,13 @@ gint recv_write(SockInfo *sock, FILE *fp) } } - if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') { - buf[len - 2] = '\n'; - buf[len - 1] = '\0'; - len--; - } - + p = buf; if (buf[0] == '.' && buf[1] == '.') - memmove(buf, buf + 1, len--); - - if (!strncmp(buf, ">From ", 6)) - memmove(buf, buf + 1, len--); + p++; + else if (!strncmp(buf, ">From ", 6)) + p++; - if (fp && fputs(buf, fp) == EOF) { + if (fp && fputs(p, fp) == EOF) { perror("fputs"); g_warning(_("Can't write to file.\n")); fp = NULL; @@ -190,46 +185,27 @@ gint recv_write(SockInfo *sock, FILE *fp) gint recv_bytes_write(SockInfo *sock, glong size, FILE *fp) { - gchar *buf; - gchar *prev, *cur; + gchar buf[BUFFSIZE]; + glong count = 0; if (size == 0) return 0; - buf = recv_bytes(sock, size); - if (!buf) - return -2; - - /* +------------------+----------------+--------------------------+ * - * ^buf ^prev ^cur buf+size-1^ */ + do { + gint read_count, to_read; - prev = buf; - while ((cur = memchr(prev, '\r', size - (prev - buf))) != NULL) { - if (cur == buf + size - 1) break; + to_read = MIN(sizeof(buf), size - count); + read_count = sock_read(sock, buf, to_read); + if (read_count <= 0) + return -2; - if (fp && (fwrite(prev, sizeof(gchar), cur - prev, fp) == EOF || - fwrite("\n", sizeof(gchar), 1, fp) == EOF)) { + if (fp && fwrite(buf, read_count, 1, fp) < 1) { perror("fwrite"); g_warning(_("Can't write to file.\n")); fp = NULL; } - - if (*(cur + 1) == '\n') - prev = cur + 2; - else - prev = cur + 1; - - if (prev - buf >= size) break; - } - - if (prev - buf < size && fp && - fwrite(buf, sizeof(gchar), size - (prev - buf), fp) == EOF) { - perror("fwrite"); - g_warning(_("Can't write to file.\n")); - fp = NULL; - } - - g_free(buf); + count += read_count; + } while (count < size); if (!fp) return -1; |