Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > deab70dba8fd8b72c8c3761bd1c27960 > files > 2

ncftp-3.2.2-1mdv2009.0.src.rpm

--- ncftp-3.1.1/libncftp/io_listmem.c.y	Sun Jan 20 23:46:43 2002
+++ ncftp-3.1.1/libncftp/io_listmem.c	Sun Jan 20 23:48:54 2002
@@ -31,6 +31,52 @@
 #	endif
 #endif
 
+
+
+
+void parseEPLF(char *line) {
+  char newline[512];
+  char *name=0;
+  time_t mtime=0,now=time(0);
+  char type=0;	/* 0=file, 1=dir */
+  unsigned long size=0;
+  char *ptr=line;
+  struct tm *t;
+  char date[20];
+  char *months[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
+  while (*ptr)
+    switch (*ptr) {
+    case '\t':
+      {
+	char *tmp=strchr(ptr,'\n');
+	if (tmp) *tmp=0;
+      }
+      t=localtime(&mtime);
+      if ((mtime<=now) && (mtime>=now-(60*60*24*7*26))) {
+	sprintf(date,"%s %-2d %02d:%02d",months[t->tm_mon],t->tm_mday,t->tm_hour,t->tm_min);
+      } else {
+	sprintf(date,"%s %-2d %5d",months[t->tm_mon],t->tm_mday,t->tm_year+1900);
+      }
+      snprintf(newline,511,"%s  1 mirror   mirror  %8d %s %s",
+		type?"drwxr-xr-x":"-rw-r--r--",size,date,ptr+1);
+      newline[511]=0;
+      strcpy(line,newline);
+      return;
+    case 's':
+      while (*++ptr && (*ptr != ','))
+	size = size * 10 + (*ptr - '0');
+      break;
+    case 'm':
+      while (*++ptr && (*ptr != ','))
+	mtime = mtime * 10 + (*ptr - '0');
+      break;
+    case '/':
+      type=1;
+    default:
+      while (*ptr) if (*ptr++ == ',') break;
+    }
+}
+
 int
 FTPListToMemory2(const FTPCIPtr cip, const char *const pattern, const LineListPtr llines, const char *const lsflags, const int blankLines, int *const tryMLSD)
 {
@@ -149,6 +195,10 @@
 			/* Valid directory listing line of output */
 			if ((line[0] == '.') && ((line[1] == '\0') || ((line[1] == '.') && ((line[2] == '\0') || (iscntrl((int) line[2]))))))
 				continue;	/* Skip . and .. */
+
+			if (line[0] == '+') {   /* EPLF */
+				parseEPLF(line);
+			}
 
 			(void) AddLine(llines, line);
 		}