Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1452)

Unified Diff: net/ftp/ftp_util.cc

Issue 7590011: FTP: add directory listing parser for OS/2 format. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/ftp/ftp_util.cc
diff --git a/net/ftp/ftp_util.cc b/net/ftp/ftp_util.cc
index 0f384bd31ee98f056a8e40c57cc84d02fee66d77..553d513f52752d26946fadd357ffa2f9a02a78e5 100644
--- a/net/ftp/ftp_util.cc
+++ b/net/ftp/ftp_util.cc
@@ -12,6 +12,7 @@
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "base/string_number_conversions.h"
+#include "base/string_split.h"
#include "base/string_tokenizer.h"
#include "base/string_util.h"
#include "base/time.h"
@@ -255,6 +256,67 @@ bool FtpUtil::LsDateListingToTime(const string16& month, const string16& day,
}
// static
+bool FtpUtil::WindowsDateListingToTime(const string16& date,
eroman 2011/08/10 23:52:16 I didn't review this, I presume it is just a move.
Paweł Hajdan Jr. 2011/08/11 00:03:19 Not really, I changed it a bit to make AM/PM optio
+ const string16& time,
+ base::Time* result) {
+ base::Time::Exploded time_exploded = { 0 };
+
+ // Date should be in format MM-DD-YY[YY].
+ std::vector<string16> date_parts;
+ base::SplitString(date, '-', &date_parts);
+ if (date_parts.size() != 3)
+ return false;
+ if (!base::StringToInt(date_parts[0], &time_exploded.month))
+ return false;
+ if (!base::StringToInt(date_parts[1], &time_exploded.day_of_month))
+ return false;
+ if (!base::StringToInt(date_parts[2], &time_exploded.year))
+ return false;
+ if (time_exploded.year < 0)
+ return false;
+ // If year has only two digits then assume that 00-79 is 2000-2079,
+ // and 80-99 is 1980-1999.
+ if (time_exploded.year < 80)
+ time_exploded.year += 2000;
+ else if (time_exploded.year < 100)
+ time_exploded.year += 1900;
+
+ // Time should be in format HH:MM[(AM|PM)]
+ if (time.length() < 5)
+ return false;
+
+ std::vector<string16> time_parts;
+ base::SplitString(time.substr(0, 5), ':', &time_parts);
+ if (time_parts.size() != 2)
+ return false;
+ if (!base::StringToInt(time_parts[0], &time_exploded.hour))
+ return false;
+ if (!base::StringToInt(time_parts[1], &time_exploded.minute))
+ return false;
+ if (!time_exploded.HasValidValues())
+ return false;
+
+ if (time.length() > 5) {
+ if (time.length() != 7)
+ return false;
+ string16 am_or_pm(time.substr(5, 2));
+ if (EqualsASCII(am_or_pm, "PM")) {
+ if (time_exploded.hour < 12)
+ time_exploded.hour += 12;
+ } else if (EqualsASCII(am_or_pm, "AM")) {
+ if (time_exploded.hour == 12)
+ time_exploded.hour = 0;
+ } else {
+ return false;
+ }
+ }
+
+ // We don't know the time zone of the server, so just use local time.
+ *result = base::Time::FromLocalExploded(time_exploded);
+ return true;
+}
+
+// static
string16 FtpUtil::GetStringPartAfterColumns(const string16& text, int columns) {
base::i18n::UTF16CharIterator iter(&text);

Powered by Google App Engine
This is Rietveld 408576698