summaryrefslogtreecommitdiff
path: root/ftp/wput/files/patch-src::ftp.c
blob: 843483ab08724c3f29d5ed6a964431c5be2511ea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--- src/ftp.c.orig	Mon Jul  5 21:26:46 2004
+++ src/ftp.c	Mon Jul  5 21:39:05 2004
@@ -798,15 +798,30 @@
 
 int get_msg(int csock, char * msg, int buflen){
   int res = 0;
+  char *s;
   
   do {
 	  memset(msg, 0, buflen);
 	  res = recv(csock, msg, buflen-1, 0);
 	  printout(vDEBUG, "%s", msg);
+	  /*
+	   * Multiline responses should of course only check on the last line.
+	   * If there are two \n's from the end of the string in the string,
+	   * the check at the start of second last one.
+	   */
+	  if ((s=strrchr(msg,'\n'))!=NULL) {
+		  if ((s=strrchr(s-1,'\n'))!=NULL) {
+			s++;
+			if (*s=='\r') s++;
+		  } else
+			s=msg;
+	  } else {
+		s=msg;
+	  }
   /* multiline messages are required by rfc to have a hiphen
    * after the command-code (e.g. 250-).
    * this counts for all but the last one, so look out for it. */
-  } while(msg[3] == '-');
+  } while(s[3] == '-');
   
   return res;
 }