diff -uNr ncftp-3.1.1/libncftp/io_listmem.c ncftp-3.1.1-fefe/libncftp/io_listmem.c --- ncftp-3.1.1/libncftp/io_listmem.c Fri Dec 14 17:01:02 2001 +++ ncftp-3.1.1-fefe/libncftp/io_listmem.c Sat Feb 2 22:42:43 2002 @@ -31,6 +31,49 @@ # 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 +192,8 @@ /* 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); } Ĵè齫app