aboutsummaryrefslogtreecommitdiff
path: root/libsylph/recv.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-11-25 10:01:04 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-11-25 10:01:04 +0000
commit966bdae3e0ff9129ba5832f3e59b302c22371211 (patch)
treed6346d41c70c9ac6cac35ed5aca120c138b34a9f /libsylph/recv.c
parent104671cac3692b816ee3636b778d37d0f4dee485 (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.c58
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;