diff -ur ncftp-3.0beta21/libncftp/io.c ncftp-3.0beta21-fefe/libncftp/io.c --- ncftp-3.0beta21/libncftp/io.c Mon Oct 4 06:24:28 1999 +++ ncftp-3.0beta21-fefe/libncftp/io.c Fri Mar 17 19:44:00 2000 @@ -361,6 +361,49 @@ +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) @@ -476,6 +519,9 @@ /* Valid directory listing line of output */ if ((line[0] == '.') && ((line[1] == '\0') || ((line[1] == '.') && ((line[2] == '\0') || (iscntrl(line[2])))))) continue; /* Skip . and .. */ + if (line[0] == '+') { /* EPLF */ + parseEPLF(line); + } (void) AddLine(llines, line); }