From fe777884cfd41589dc79648ec0c36b921eadd7b5 Mon Sep 17 00:00:00 2001
From: hniksic <devnull@localhost>
Date: Thu, 4 Aug 2005 14:45:28 -0700
Subject: [PATCH] [svn] Remember the position of the previous token instead of
 backtracking to it. By Giuseppe Bonacci.

---
 src/ChangeLog | 5 +++++
 src/ftp-ls.c  | 8 +++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 15e55151..774f9b53 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2005-08-04  Giuseppe Bonacci  <g.bonacci@libero.it>
+
+	* ftp-ls.c (ftp_parse_unix_ls): Remember the position of the
+	previous token instead of backtracking back to it.
+
 2005-07-08  Gisle Vanem  <giva@bgnett.no>
 
 	* mswindows.h: Include process.h to get getpid() declaration.
diff --git a/src/ftp-ls.c b/src/ftp-ls.c
index ce17f450..9e35f27a 100644
--- a/src/ftp-ls.c
+++ b/src/ftp-ls.c
@@ -104,7 +104,7 @@ ftp_parse_unix_ls (const char *file, int ignore_perms)
   struct tm timestruct, *tnow;
   time_t timenow;
 
-  char *line, *tok;		/* tokenizer */
+  char *line, *tok, *ptok;	/* tokenizer */
   struct fileinfo *dir, *l, cur; /* list creation */
 
   fp = fopen (file, "rb");
@@ -195,7 +195,9 @@ ftp_parse_unix_ls (const char *file, int ignore_perms)
 	 This tactic is quite dubious when it comes to
 	 internationalization issues (non-English month names), but it
 	 works for now.  */
-      while ((tok = strtok (NULL, " ")) != NULL)
+      ptok = line;
+      while (ptok = tok,
+	     (tok = strtok (NULL, " ")) != NULL)
 	{
 	  --next;
 	  if (next < 0)		/* a month name was not encountered */
@@ -211,7 +213,7 @@ ftp_parse_unix_ls (const char *file, int ignore_perms)
 
 		  /* Back up to the beginning of the previous token
 		     and parse it with str_to_wgint.  */
-		  char *t = tok - 2;
+		  char *t = ptok;
 		  while (t > line && ISDIGIT (*t))
 		    --t;
 		  if (t == line)