diff lib/protocols.c @ 60:8a9324fb63a4

2002-11-21 Brian Masney <masneyb@gftp.org> * lib/protocols.c (gftp_get_next_line) - fixed several bugs * lib/cache.c - Don't do a cache lookup in gftp_new_cache_entry(). In gftp_find_cache_entry(), don't log an error to the user if we can't open up the cache file * lib/rfc959.c lib/rfc2068.c lib/protocols.c - small cache fixes * lib/cache.c lib/rfc2068.c lib/rfc959.c - pass full buffer size instead of buffer size - 1 to gftp_get_line
author masneyb
date Fri, 22 Nov 2002 00:54:38 +0000
parents c01d91c10f6c
children 41b71c4e5076
line wrap: on
line diff
--- a/lib/protocols.c	Thu Nov 21 02:49:06 2002 +0000
+++ b/lib/protocols.c	Fri Nov 22 00:54:38 2002 +0000
@@ -343,15 +343,17 @@
         }
 #endif
 
-      if (ret >= 0 && !request->cached && request->cachefd > 0&& 
+      if (ret >= 0 && !request->cached && request->cachefd > 0 && 
           request->last_dir_entry != NULL)
         {
-          if (gftp_writefmt (request, request->cachefd, "%s\n",
-                             request->last_dir_entry) < 0)
+          if (gftp_write (request, request->last_dir_entry,
+                          request->last_dir_entry_len, request->cachefd) < 0)
             {
               request->logging_function (gftp_logging_error, request->user_data,
                                         _("Error: Cannot write to cache: %s\n"),
                                         g_strerror (errno));
+              close (request->cachefd);
+              request->cachefd = -1;
             }
         }
     } while (ret > 0 && !gftp_match_filespec (fle->file, filespec));
@@ -1883,13 +1885,14 @@
     {
       *rbuf = g_malloc0 (sizeof (**rbuf));
       (*rbuf)->max_bufsize = len;
-      (*rbuf)->buffer = g_malloc ((*rbuf)->max_bufsize);
+      (*rbuf)->buffer = g_malloc ((*rbuf)->max_bufsize + 1);
       if ((ret = gftp_read (request, (*rbuf)->buffer, (*rbuf)->max_bufsize, 
                             fd)) <= 0)
         {
           gftp_free_getline_buffer (rbuf);
           return (ret);
         }
+      (*rbuf)->buffer[ret] = '\0';
       (*rbuf)->cur_bufsize = ret;
       (*rbuf)->curpos = (*rbuf)->buffer;
     }
@@ -1909,20 +1912,12 @@
               if (pos > (*rbuf)->curpos && *(pos - 1) == '\r')
                 pos--;
               *pos = '\0';
-
-              if (len > pos - (*rbuf)->curpos + 1)
-                len = pos - (*rbuf)->curpos + 1;
             }
           else
-            {
-              nextpos = NULL;
-              if (len > (*rbuf)->cur_bufsize)
-                len = (*rbuf)->cur_bufsize;
-            }
+            nextpos = NULL;
 
           strncpy (str, (*rbuf)->curpos, len);
-          str[len] = '\0';
-          retval = len;
+          retval = pos - (*rbuf)->curpos > len ? len : pos - (*rbuf)->curpos;
 
           if (pos != NULL)
             {
@@ -1956,6 +1951,7 @@
               gftp_free_getline_buffer (rbuf);
               return (ret);
             }
+          (*rbuf)->buffer[ret + copysize] = '\0';
           (*rbuf)->cur_bufsize = ret + copysize;
         }
     }