Browse Source

Factoring out repeated code

(cherry picked from commit de5dfb5074e45d2eb00d2b339b401785b268c07a)

Source commit: ded1ed1fddc24df4a04aaebb0163682c5b3d46ef
Martin Prikryl 4 years ago
parent
commit
09ba2d7ba4
2 changed files with 59 additions and 97 deletions
  1. 58 97
      source/filezilla/FtpListResult.cpp
  2. 1 0
      source/filezilla/FtpListResult.h

+ 58 - 97
source/filezilla/FtpListResult.cpp

@@ -398,65 +398,74 @@ CFtpListResult::~CFtpListResult()
     delete [] m_curline;
 }
 
-t_directory::t_direntry *CFtpListResult::getList(int &num)
+void CFtpListResult::DoParseLine(char *& Line, t_directory::t_direntry & DirEntry)
 {
-  #ifdef _DEBUG
-  USES_CONVERSION;
-  #endif
-  char *line=GetLine();
-  m_curline=line;
-  while (line)
+  int ServerType;
+  char * TmpLine = new char[strlen(Line) + 1];
+  strcpy(TmpLine, Line);
+  bool Result = parseLine(TmpLine, strlen(TmpLine), DirEntry, ServerType);
+  delete [] TmpLine;
+  if (Result)
   {
-    int tmp;
-    char *tmpline = new char[strlen(line) + 1];
-    strcpy(tmpline, line);
-    t_directory::t_direntry direntry;
-    if (parseLine(tmpline, strlen(tmpline), direntry, tmp))
+    if (ServerType != 0)
     {
-      delete [] tmpline;
-      if (tmp)
-        m_server.nServerType |= tmp;
-      if (direntry.name!=L"." && direntry.name!=L"..")
-      {
-        AddLine(direntry);
-      }
-      if (m_prevline)
-      {
-        delete [] m_prevline;
-        m_prevline=0;
-      }
-      if (m_curline!=line)
-        delete [] m_curline;
-      delete [] line;
-      line=GetLine();
-      m_curline=line;
+      m_server.nServerType |= ServerType;
     }
-    else
+    if ((DirEntry.name != L".") && (DirEntry.name != L".."))
+    {
+      AddLine(DirEntry);
+    }
+    if (m_prevline != NULL)
     {
-      delete [] tmpline;
-      if (m_prevline)
+      delete [] m_prevline;
+      m_prevline = NULL;
+    }
+    if (m_curline != Line)
+    {
+      delete [] m_curline;
+    }
+    delete [] Line;
+    Line = GetLine();
+    m_curline = Line;
+  }
+  else
+  {
+    if (m_prevline != NULL)
+    {
+      if (m_curline != Line)
       {
-        if (m_curline!=line)
-        {
-          delete [] m_prevline;
-          m_prevline=m_curline;
-          delete [] line;
-          line=GetLine();
-          m_curline=line;
-        }
-        else
-        {
-          line=new char[strlen(m_prevline)+strlen(m_curline)+2];
-          sprintf(line, "%s %s", m_prevline, m_curline);
-        }
+        delete [] m_prevline;
+        m_prevline = m_curline;
+        delete [] Line;
+        Line = GetLine();
+        m_curline = Line;
       }
       else
       {
-        m_prevline=line;
-        line=GetLine();
-        m_curline=line;
+        Line = new char[strlen(m_prevline) + strlen(m_curline) + 2];
+        sprintf(Line, "%s %s", m_prevline, m_curline);
       }
     }
+    else
+    {
+      m_prevline = Line;
+      Line = GetLine();
+      m_curline = Line;
+    }
+  }
+}
+
+t_directory::t_direntry *CFtpListResult::getList(int &num)
+{
+  #ifdef _DEBUG
+  USES_CONVERSION;
+  #endif
+  char *line=GetLine();
+  m_curline=line;
+  while (line)
+  {
+    t_directory::t_direntry direntry;
+    DoParseLine(line, direntry);
   }
   if (m_prevline)
   {
@@ -586,55 +595,7 @@ void CFtpListResult::AddData(char *data, int size)
       m_curline = 0;
       break;
     }
-    int tmp;
-    char *tmpline = new char[strlen(line) + 1];
-    strcpy(tmpline, line);
-    if (parseLine(tmpline, strlen(tmpline), direntry, tmp))
-    {
-      delete [] tmpline;
-      if (tmp)
-        m_server.nServerType |= tmp;
-      if (direntry.name!=L"." && direntry.name!=L"..")
-      {
-        AddLine(direntry);
-      }
-      if (m_prevline)
-      {
-        delete [] m_prevline;
-        m_prevline=0;
-      }
-      if (m_curline!=line)
-        delete [] m_curline;
-      delete [] line;
-      line = GetLine();
-      m_curline = line;
-    }
-    else
-    {
-      delete [] tmpline;
-      if (m_prevline)
-      {
-        if (m_curline != line)
-        {
-          delete [] m_prevline;
-          m_prevline = m_curline;
-          delete [] line;
-          line = GetLine();
-          m_curline = line;
-        }
-        else
-        {
-          line=new char[strlen(m_prevline)+strlen(m_curline)+2];
-          sprintf(line, "%s %s", m_prevline, m_curline);
-        }
-      }
-      else
-      {
-        m_prevline=line;
-        line=GetLine();
-        m_curline=line;
-      }
-    }
+    DoParseLine(line, direntry);
   }
   curpos=pOldListPos;
   pos=nOldListBufferPos;

+ 1 - 0
source/filezilla/FtpListResult.h

@@ -42,6 +42,7 @@ private:
   tEntryList m_EntryList;
 
   BOOL parseLine(const char * lineToParse, const int linelen, t_directory::t_direntry & direntry, int & nFTPServerType);
+  void DoParseLine(char *& Line, t_directory::t_direntry & DirEntry);
 
   BOOL parseAsVMS(const char * line, const int linelen, t_directory::t_direntry & direntry);
   BOOL parseAsEPLF(const char * line, const int linelen, t_directory::t_direntry & direntry);