Index: net/third_party/parseftp/chromium.patch |
diff --git a/net/third_party/parseftp/chromium.patch b/net/third_party/parseftp/chromium.patch |
new file mode 100644 |
index 0000000000000000000000000000000000000000..56598173c5066de134da3fe2ca1d3bb0cfbdd464 |
--- /dev/null |
+++ b/net/third_party/parseftp/chromium.patch |
@@ -0,0 +1,440 @@ |
+diff --git a/net/third_party/parseftp/ParseFTPList.cpp b/net/third_party/parseftp/ParseFTPList.cpp |
+index b9ffbdc..be099e1 100644 |
+--- a/net/third_party/parseftp/ParseFTPList.cpp |
++++ b/net/third_party/parseftp/ParseFTPList.cpp |
+@@ -36,15 +36,18 @@ |
+ * |
+ * ***** END LICENSE BLOCK ***** */ |
+ |
+-#include <stdlib.h> |
+-#include <string.h> |
++#include "net/third_party/parseftp/ParseFTPList.h" |
++ |
+ #include <ctype.h> |
+-#include "plstr.h" |
+ |
+-#include "ParseFTPList.h" |
++#include "base/string_util.h" |
++ |
++using base::Time; |
+ |
+ /* ==================================================================== */ |
+ |
++namespace net { |
++ |
+ int ParseFTPList(const char *line, struct list_state *state, |
+ struct list_result *result ) |
+ { |
+@@ -156,11 +159,9 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ pos++; |
+ if (pos < linelen && line[pos] == ',') |
+ { |
+- PRTime t; |
+- PRTime seconds; |
+- PR_sscanf(p+1, "%llu", &seconds); |
+- LL_MUL(t, seconds, PR_USEC_PER_SEC); |
+- PR_ExplodeTime(t, PR_LocalTimeParameters, &(result->fe_time) ); |
++ uint64 seconds = StringToInt64(p+1); |
++ Time t = Time::FromTimeT(seconds); |
++ t.LocalExplode(&(result->fe_time)); |
wtc
2009/09/10 18:55:32
We need to subtract 1 from result->fe_time.month a
|
+ } |
+ } |
+ } |
+@@ -508,12 +509,9 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ * So its rounded up to the next block, so what, its better |
+ * than not showing the size at all. |
+ */ |
+- PRUint64 fsz, factor; |
+- LL_UI2L(fsz, strtoul(tokens[1], (char **)0, 10)); |
+- LL_UI2L(factor, 512); |
+- LL_MUL(fsz, fsz, factor); |
+- PR_snprintf(result->fe_size, sizeof(result->fe_size), |
+- "%lld", fsz); |
++ long long size = strtoul(tokens[1], NULL, 10) * 512; |
++ base::snprintf(result->fe_size, sizeof(result->fe_size), "%lld", |
++ size); |
+ } |
+ |
+ } /* if (result->fe_type != 'd') */ |
+@@ -535,17 +533,17 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ } |
+ if (month_num >= 12) |
+ month_num = 0; |
+- result->fe_time.tm_month = month_num; |
+- result->fe_time.tm_mday = atoi(tokens[2]); |
+- result->fe_time.tm_year = atoi(p+4); // NSPR wants year as XXXX |
++ result->fe_time.month = month_num; |
++ result->fe_time.day_of_month = atoi(tokens[2]); |
++ result->fe_time.year = atoi(p+4); |
+ |
+ p = tokens[3] + 2; |
+ if (*p == ':') |
+ p++; |
+ if (p[2] == ':') |
+- result->fe_time.tm_sec = atoi(p+3); |
+- result->fe_time.tm_hour = atoi(tokens[3]); |
+- result->fe_time.tm_min = atoi(p); |
++ result->fe_time.second = atoi(p+3); |
++ result->fe_time.hour = atoi(tokens[3]); |
++ result->fe_time.minute = atoi(p); |
+ |
+ return result->fe_type; |
+ |
+@@ -678,25 +676,25 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ p = tokens[tokmarker+4]; |
+ if (toklen[tokmarker+4] == 10) /* newstyle: YYYY-MM-DD format */ |
+ { |
+- result->fe_time.tm_year = atoi(p+0) - 1900; |
+- result->fe_time.tm_month = atoi(p+5) - 1; |
+- result->fe_time.tm_mday = atoi(p+8); |
++ result->fe_time.year = atoi(p+0) - 1900; |
++ result->fe_time.month = atoi(p+5) - 1; |
++ result->fe_time.day_of_month = atoi(p+8); |
+ } |
+ else /* oldstyle: [M]M/DD/YY format */ |
+ { |
+ pos = toklen[tokmarker+4]; |
+- result->fe_time.tm_month = atoi(p) - 1; |
+- result->fe_time.tm_mday = atoi((p+pos)-5); |
+- result->fe_time.tm_year = atoi((p+pos)-2); |
+- if (result->fe_time.tm_year < 70) |
+- result->fe_time.tm_year += 100; |
++ result->fe_time.month = atoi(p) - 1; |
++ result->fe_time.day_of_month = atoi((p+pos)-5); |
++ result->fe_time.year = atoi((p+pos)-2); |
++ if (result->fe_time.year < 70) |
++ result->fe_time.year += 100; |
+ } |
+ |
+ p = tokens[tokmarker+5]; |
+ pos = toklen[tokmarker+5]; |
+- result->fe_time.tm_hour = atoi(p); |
+- result->fe_time.tm_min = atoi((p+pos)-5); |
+- result->fe_time.tm_sec = atoi((p+pos)-2); |
++ result->fe_time.hour = atoi(p); |
++ result->fe_time.minute = atoi((p+pos)-5); |
++ result->fe_time.second = atoi((p+pos)-2); |
+ |
+ result->fe_cinfs = 1; |
+ result->fe_fname = tokens[0]; |
+@@ -839,25 +837,25 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ } |
+ } |
+ |
+- result->fe_time.tm_month = atoi(tokens[0]+0); |
+- if (result->fe_time.tm_month != 0) |
++ result->fe_time.month = atoi(tokens[0]+0); |
++ if (result->fe_time.month != 0) |
+ { |
+- result->fe_time.tm_month--; |
+- result->fe_time.tm_mday = atoi(tokens[0]+3); |
+- result->fe_time.tm_year = atoi(tokens[0]+6); |
++ result->fe_time.month--; |
++ result->fe_time.day_of_month = atoi(tokens[0]+3); |
++ result->fe_time.year = atoi(tokens[0]+6); |
+ /* if year has only two digits then assume that |
+ 00-79 is 2000-2079 |
+ 80-99 is 1980-1999 */ |
+- if (result->fe_time.tm_year < 80) |
+- result->fe_time.tm_year += 2000; |
+- else if (result->fe_time.tm_year < 100) |
+- result->fe_time.tm_year += 1900; |
++ if (result->fe_time.year < 80) |
++ result->fe_time.year += 2000; |
++ else if (result->fe_time.year < 100) |
++ result->fe_time.year += 1900; |
+ } |
+ |
+- result->fe_time.tm_hour = atoi(tokens[1]+0); |
+- result->fe_time.tm_min = atoi(tokens[1]+3); |
+- if ((tokens[1][5]) == 'P' && result->fe_time.tm_hour < 12) |
+- result->fe_time.tm_hour += 12; |
++ result->fe_time.hour = atoi(tokens[1]+0); |
++ result->fe_time.minute = atoi(tokens[1]+3); |
++ if ((tokens[1][5]) == 'P' && result->fe_time.hour < 12) |
++ result->fe_time.hour += 12; |
+ |
+ /* the caller should do this (if dropping "." and ".." is desired) |
+ if (result->fe_type == 'd' && result->fe_fname[0] == '.' && |
+@@ -955,13 +953,13 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ result->fe_size[pos] = '\0'; |
+ } |
+ |
+- result->fe_time.tm_month = atoi(&p[35-18]) - 1; |
+- result->fe_time.tm_mday = atoi(&p[38-18]); |
+- result->fe_time.tm_year = atoi(&p[41-18]); |
+- if (result->fe_time.tm_year < 80) |
+- result->fe_time.tm_year += 100; |
+- result->fe_time.tm_hour = atoi(&p[46-18]); |
+- result->fe_time.tm_min = atoi(&p[49-18]); |
++ result->fe_time.month = atoi(&p[35-18]) - 1; |
++ result->fe_time.day_of_month = atoi(&p[38-18]); |
++ result->fe_time.year = atoi(&p[41-18]); |
++ if (result->fe_time.year < 80) |
++ result->fe_time.year += 100; |
++ result->fe_time.hour = atoi(&p[46-18]); |
++ result->fe_time.minute = atoi(&p[49-18]); |
+ |
+ /* the caller should do this (if dropping "." and ".." is desired) |
+ if (result->fe_type == 'd' && result->fe_fname[0] == '.' && |
+@@ -1006,7 +1004,7 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ * "drwxr-xr-x 2 0 0 512 May 28 22:17 etc" |
+ */ |
+ |
+- PRBool is_old_Hellsoft = PR_FALSE; |
++ bool is_old_Hellsoft = false; |
+ |
+ if (numtoks >= 6) |
+ { |
+@@ -1034,7 +1032,7 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ /* rest is FMA[S] or AFM[S] */ |
+ lstyle = 'U'; /* very likely one of the NetWare servers */ |
+ if (toklen[0] == 10) |
+- is_old_Hellsoft = PR_TRUE; |
++ is_old_Hellsoft = true; |
+ } |
+ } |
+ } |
+@@ -1150,10 +1148,10 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ result->fe_size[pos] = '\0'; |
+ } |
+ |
+- result->fe_time.tm_month = month_num; |
+- result->fe_time.tm_mday = atoi(tokens[tokmarker+2]); |
+- if (result->fe_time.tm_mday == 0) |
+- result->fe_time.tm_mday++; |
++ result->fe_time.month = month_num; |
++ result->fe_time.day_of_month = atoi(tokens[tokmarker+2]); |
++ if (result->fe_time.day_of_month == 0) |
++ result->fe_time.day_of_month++; |
+ |
+ p = tokens[tokmarker+3]; |
+ pos = (unsigned int)atoi(p); |
+@@ -1161,25 +1159,26 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ p--; |
+ if (p[2] != ':') /* year */ |
+ { |
+- result->fe_time.tm_year = pos; |
++ result->fe_time.year = pos; |
+ } |
+ else |
+ { |
+- result->fe_time.tm_hour = pos; |
+- result->fe_time.tm_min = atoi(p+3); |
++ result->fe_time.hour = pos; |
++ result->fe_time.minute = atoi(p+3); |
+ if (p[5] == ':') |
+- result->fe_time.tm_sec = atoi(p+6); |
++ result->fe_time.second = atoi(p+6); |
+ |
+- if (!state->now_time) |
++ if (!state->now_tm_valid) |
+ { |
+- state->now_time = PR_Now(); |
+- PR_ExplodeTime((state->now_time), PR_LocalTimeParameters, &(state->now_tm) ); |
++ Time t = Time::Now(); |
++ t.LocalExplode(&(state->now_tm)); |
wtc
2009/09/10 18:55:32
We need to subtract 1 from state->now_tm.month aft
|
++ state->now_tm_valid = true; |
+ } |
+ |
+- result->fe_time.tm_year = state->now_tm.tm_year; |
+- if ( (( state->now_tm.tm_month << 5) + state->now_tm.tm_mday) < |
+- ((result->fe_time.tm_month << 5) + result->fe_time.tm_mday) ) |
+- result->fe_time.tm_year--; |
++ result->fe_time.year = state->now_tm.year; |
++ if ( (( state->now_tm.month << 5) + state->now_tm.day_of_month) < |
++ ((result->fe_time.month << 5) + result->fe_time.day_of_month) ) |
++ result->fe_time.year--; |
+ |
+ } /* time/year */ |
+ |
+@@ -1197,10 +1196,10 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ { |
+ /* First try to use result->fe_size to find " -> " sequence. |
+ This can give proper result for cases like "aaa -> bbb -> ccc". */ |
+- PRUint32 fe_size = atoi(result->fe_size); |
++ unsigned int fe_size = atoi(result->fe_size); |
+ |
+ if (result->fe_fnlen > (fe_size + 4) && |
+- PL_strncmp(result->fe_fname + result->fe_fnlen - fe_size - 4 , " -> ", 4) == 0) |
++ strncmp(result->fe_fname + result->fe_fnlen - fe_size - 4 , " -> ", 4) == 0) |
+ { |
+ result->fe_lname = result->fe_fname + (result->fe_fnlen - fe_size); |
+ result->fe_lnlen = (&(line[linelen])) - (result->fe_lname); |
+@@ -1216,7 +1215,7 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ p = result->fe_fname + (result->fe_fnlen - 5); |
+ for (pos = (result->fe_fnlen - 5); pos > 0; pos--) |
+ { |
+- if (PL_strncmp(p, " -> ", 4) == 0) |
++ if (strncmp(p, " -> ", 4) == 0) |
+ { |
+ result->fe_lname = p + 4; |
+ result->fe_lnlen = (&(line[linelen])) |
+@@ -1371,9 +1370,9 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ tbuf[1] == month_names[pos+1] && |
+ tbuf[2] == month_names[pos+2]) |
+ { |
+- result->fe_time.tm_month = pos/3; |
+- result->fe_time.tm_mday = atoi(tokens[3]); |
+- result->fe_time.tm_year = atoi(tokens[4]) - 1900; |
++ result->fe_time.month = pos/3; |
++ result->fe_time.day_of_month = atoi(tokens[3]); |
++ result->fe_time.year = atoi(tokens[4]) - 1900; |
+ break; |
+ } |
+ } |
+@@ -1381,17 +1380,17 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ } |
+ else |
+ { |
+- result->fe_time.tm_month = atoi(p+0)-1; |
+- result->fe_time.tm_mday = atoi(p+3); |
+- result->fe_time.tm_year = atoi(p+6); |
+- if (result->fe_time.tm_year < 80) /* SuperTCP */ |
+- result->fe_time.tm_year += 100; |
++ result->fe_time.month = atoi(p+0)-1; |
++ result->fe_time.day_of_month = atoi(p+3); |
++ result->fe_time.year = atoi(p+6); |
++ if (result->fe_time.year < 80) /* SuperTCP */ |
++ result->fe_time.year += 100; |
+ |
+ pos = 3; /* SuperTCP toknum of date field */ |
+ } |
+ |
+- result->fe_time.tm_hour = atoi(tokens[pos]); |
+- result->fe_time.tm_min = atoi(&(tokens[pos][toklen[pos]-2])); |
++ result->fe_time.hour = atoi(tokens[pos]); |
++ result->fe_time.minute = atoi(&(tokens[pos][toklen[pos]-2])); |
+ |
+ /* the caller should do this (if dropping "." and ".." is desired) |
+ if (result->fe_type == 'd' && result->fe_fname[0] == '.' && |
+@@ -1607,7 +1606,7 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ pos = atoi(tokens[pos]); |
+ if (pos > 0 && pos <= 31) |
+ { |
+- result->fe_time.tm_mday = pos; |
++ result->fe_time.day_of_month = pos; |
+ month_num = 1; |
+ for (pos = 0; pos < (12*3); pos+=3) |
+ { |
+@@ -1618,34 +1617,35 @@ int ParseFTPList(const char *line, struct list_state *state, |
+ month_num++; |
+ } |
+ if (month_num > 12) |
+- result->fe_time.tm_mday = 0; |
++ result->fe_time.day_of_month = 0; |
+ else |
+- result->fe_time.tm_month = month_num - 1; |
++ result->fe_time.month = month_num - 1; |
+ } |
+ } |
+- if (result->fe_time.tm_mday) |
++ if (result->fe_time.day_of_month) |
+ { |
+ tokmarker += 3; /* skip mday/mon/yrtime (to find " -> ") */ |
+ p = tokens[tokmarker]; |
+ |
+ pos = atoi(p); |
+ if (pos > 24) |
+- result->fe_time.tm_year = pos-1900; |
++ result->fe_time.year = pos-1900; |
+ else |
+ { |
+ if (p[1] == ':') |
+ p--; |
+- result->fe_time.tm_hour = pos; |
+- result->fe_time.tm_min = atoi(p+3); |
+- if (!state->now_time) |
++ result->fe_time.hour = pos; |
++ result->fe_time.minute = atoi(p+3); |
++ if (!state->now_tm_valid) |
+ { |
+- state->now_time = PR_Now(); |
+- PR_ExplodeTime((state->now_time), PR_LocalTimeParameters, &(state->now_tm) ); |
++ Time t = Time::Now(); |
++ t.LocalExplode(&(state->now_tm)); |
wtc
2009/09/10 18:55:32
We need to subtract 1 from state->now_tm.month aft
|
++ state->now_tm_valid = true; |
+ } |
+- result->fe_time.tm_year = state->now_tm.tm_year; |
+- if ( (( state->now_tm.tm_month << 4) + state->now_tm.tm_mday) < |
+- ((result->fe_time.tm_month << 4) + result->fe_time.tm_mday) ) |
+- result->fe_time.tm_year--; |
++ result->fe_time.year = state->now_tm.year; |
++ if ( (( state->now_tm.month << 4) + state->now_tm.day_of_month) < |
++ ((result->fe_time.month << 4) + result->fe_time.day_of_month) ) |
++ result->fe_time.year--; |
+ } /* got year or time */ |
+ } /* got month/mday */ |
+ } /* may have year or time */ |
+@@ -1893,3 +1893,5 @@ int main(int argc, char *argv[]) |
+ return 0; |
+ } |
+ #endif |
++ |
++} // namespace net |
+diff --git a/net/third_party/parseftp/ParseFTPList.h b/net/third_party/parseftp/ParseFTPList.h |
+index 30ef8a3..b11abdc 100644 |
+--- a/net/third_party/parseftp/ParseFTPList.h |
++++ b/net/third_party/parseftp/ParseFTPList.h |
+@@ -35,7 +35,11 @@ |
+ * the terms of any one of the MPL, the GPL or the LGPL. |
+ * |
+ * ***** END LICENSE BLOCK ***** */ |
+-#include "nspr.h" |
++ |
++#ifndef NET_THIRD_PARTY_PARSEFTP_PARSEFTPLIST_H_ |
++#define NET_THIRD_PARTY_PARSEFTP_PARSEFTPLIST_H_ |
++ |
++#include "base/time.h" |
+ |
+ /* ParseFTPList() parses lines from an FTP LIST command. |
+ ** |
+@@ -96,28 +100,30 @@ |
+ #define SUPPORT_OS2 /* IBM TCP/IP for OS/2 - FTP Server */ |
+ #define SUPPORT_W16 /* win16 hosts: SuperTCP or NetManage Chameleon */ |
+ |
++namespace net { |
wtc
2009/09/10 18:55:32
Let's add a comment here about the 'month' field
o
|
++ |
+ struct list_state |
+ { |
+ void *magic; /* to determine if previously initialized */ |
+- PRTime now_time; /* needed for year determination */ |
+- PRExplodedTime now_tm; /* needed for year determination */ |
+- PRInt32 lstyle; /* LISTing style */ |
+- PRInt32 parsed_one; /* returned anything yet? */ |
++ bool now_tm_valid; /* true if now_tm is valid */ |
++ base::Time::Exploded now_tm; /* needed for year determination */ |
++ int lstyle; /* LISTing style */ |
++ int parsed_one; /* returned anything yet? */ |
+ char carry_buf[84]; /* for VMS multiline */ |
+- PRUint32 carry_buf_len; /* length of name in carry_buf */ |
+- PRUint32 numlines; /* number of lines seen */ |
++ unsigned int carry_buf_len; /* length of name in carry_buf */ |
++ unsigned int numlines; /* number of lines seen */ |
+ }; |
+ |
+ struct list_result |
+ { |
+- PRInt32 fe_type; /* 'd'(dir) or 'l'(link) or 'f'(file) */ |
++ int fe_type; /* 'd'(dir) or 'l'(link) or 'f'(file) */ |
+ const char * fe_fname; /* pointer to filename */ |
+- PRUint32 fe_fnlen; /* length of filename */ |
++ unsigned int fe_fnlen; /* length of filename */ |
+ const char * fe_lname; /* pointer to symlink name */ |
+- PRUint32 fe_lnlen; /* length of symlink name */ |
++ unsigned int fe_lnlen; /* length of symlink name */ |
+ char fe_size[40]; /* size of file in bytes (<= (2^128 - 1)) */ |
+- PRExplodedTime fe_time; /* last-modified time */ |
+- PRInt32 fe_cinfs; /* file system is definitely case insensitive */ |
++ base::Time::Exploded fe_time; /* last-modified time */ |
++ int fe_cinfs; /* file system is definitely case insensitive */ |
+ /* (converting all-upcase names may be desirable) */ |
+ }; |
+ |
+@@ -125,3 +131,6 @@ int ParseFTPList(const char *line, |
+ struct list_state *state, |
+ struct list_result *result ); |
+ |
++} // namespace net |
++ |
++#endif // NET_THIRD_PARTY_PARSEFTP_PARSEFTPLIST_H_ |