diff --git a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp index 1238d1e01b2..f4edb76d797 100644 --- a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp +++ b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp @@ -543,7 +543,7 @@ nsFTPDirListingConv::MonthNumber(const char *month) { char c1 = month[1], c2 = month[2]; PRInt8 rv = -1; - PR_LOG(gFTPDirListConvLog, PR_LOG_DEBUG, ("nsFTPDirListingConv::MonthNumber(month = %s) ", month) ); + //PR_LOG(gFTPDirListConvLog, PR_LOG_DEBUG, ("nsFTPDirListingConv::MonthNumber(month = %s) ", month) ); switch (*month) { case 'f': case 'F': @@ -583,7 +583,7 @@ nsFTPDirListingConv::MonthNumber(const char *month) { rv = -1; } - PR_LOG(gFTPDirListConvLog, PR_LOG_DEBUG, ("returning %d\n", rv) ); + //PR_LOG(gFTPDirListConvLog, PR_LOG_DEBUG, ("returning %d\n", rv) ); return rv; } @@ -666,15 +666,11 @@ nsFTPDirListingConv::ConvertUNIXDate(char *aCStr, PRTime& outDate) { PRExplodedTime curTime; - PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &curTime); + InitPRExplodedTime(curTime); char *bcol = aCStr; /* Column begin */ char *ecol; /* Column end */ - // defaults - curTime.tm_usec = 0; - curTime.tm_sec = 0; - // MONTH char tmpChar = bcol[3]; bcol[3] = '\0'; @@ -692,16 +688,12 @@ nsFTPDirListingConv::ConvertUNIXDate(char *aCStr, PRTime& outDate) { PRInt32 error; nsCAutoString day(bcol); curTime.tm_mday = day.ToInteger(&error, 10); - //curTime.tm_wday = 0; - //curTime.tm_yday = 0; // YEAR bcol = ++ecol; if ((ecol = PL_strchr(bcol, ':')) == NULL) { nsCAutoString intStr(bcol); curTime.tm_year = intStr.ToInteger(&error, 10); - curTime.tm_min = 0; - curTime.tm_hour = 0; } else { // TIME /* If the time is given as hh:mm, then the file is less than 1 year @@ -715,7 +707,10 @@ nsFTPDirListingConv::ConvertUNIXDate(char *aCStr, PRTime& outDate) { intStr = bcol; curTime.tm_hour = intStr.ToInteger(&error, 10); // Left side of ':' - curTime.tm_year = curTime.tm_year; + // Use the current year if one wasn't provided. + PRExplodedTime nowETime; + PR_ExplodeTime(PR_Now(), PR_LocalTimeParameters, &nowETime); + curTime.tm_year = nowETime.tm_year; //if (mktime(time_info) > curtime) // --time_info->tm_year; } @@ -730,7 +725,7 @@ nsFTPDirListingConv::ConvertVMSDate(char *aCStr, PRTime& outDate) { PRExplodedTime curTime; - PR_ExplodeTime(PR_Now(), PR_GMTParameters, &curTime); + InitPRExplodedTime(curTime); char *col; @@ -742,11 +737,6 @@ nsFTPDirListingConv::ConvertVMSDate(char *aCStr, PRTime& outDate) { PRInt32 error; curTime.tm_mday = intStr.ToInteger(&error, 10); - // XXX the following two sets may be skewing the Imploded time - // XXX we're not supposed to set wday and yday (see prtime.h) - curTime.tm_wday = 0; - curTime.tm_yday = 0; - if ((col = strtok(nsnull, "-")) == nsnull || (curTime.tm_month = MonthNumber(col)) < 0) return PR_FALSE; @@ -771,7 +761,6 @@ nsFTPDirListingConv::ConvertVMSDate(char *aCStr, PRTime& outDate) { intStr = col; curTime.tm_min = intStr.ToInteger(&error, 10); - curTime.tm_sec = 0; outDate = PR_ImplodeTime(&curTime); return PR_TRUE; @@ -782,7 +771,7 @@ nsFTPDirListingConv::ConvertDOSDate(char *aCStr, PRTime& outDate) { PRExplodedTime curTime; - PR_ExplodeTime(PR_Now(), PR_GMTParameters, &curTime); + InitPRExplodedTime(curTime); curTime.tm_month = (aCStr[1]-'0')-1; @@ -795,10 +784,6 @@ nsFTPDirListingConv::ConvertDOSDate(char *aCStr, PRTime& outDate) { curTime.tm_min = (((aCStr[13]-'0')*10) + aCStr[14]-'0'); - curTime.tm_wday = 0; - curTime.tm_yday = 0; - curTime.tm_sec = 0; - outDate = PR_ImplodeTime(&curTime); return PR_TRUE; } @@ -1001,6 +986,21 @@ nsFTPDirListingConv::ParseVMSLine(char *aLine, indexEntry *aEntry) { return NS_OK; } +void +nsFTPDirListingConv::InitPRExplodedTime(PRExplodedTime& aTime) { + aTime.tm_usec = 0; + aTime.tm_sec = 0; + aTime.tm_min = 0; + aTime.tm_hour = 0; + aTime.tm_mday = 0; + aTime.tm_month= 0; + aTime.tm_year = 0; + + // localize this sucker. + PRTimeParameters params = PR_LocalTimeParameters(&aTime); + aTime.tm_params = params; +} + //////////////////////////////////////////////////////////////////////// // Factory diff --git a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.h b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.h index ec72c6b5089..28e38cd88f7 100644 --- a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.h +++ b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.h @@ -142,6 +142,8 @@ private: nsresult ParseLSLine(char *aLine, indexEntry *aEntry); nsresult ParseVMSLine(char *aLine, indexEntry *aEntry); + void InitPRExplodedTime(PRExplodedTime& aTime); + // member data FTP_Server_Type mServerType; // what kind of server is the data coming from? nsCAutoString mBuffer; // buffered data.