Code improvements.
Added code for FTMsgWriter::writeFileListRqst(...) method.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@397 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/FTMsgWriter.cxx b/vncviewer/FTMsgWriter.cxx
index 7f22390..0a9f4df 100644
--- a/vncviewer/FTMsgWriter.cxx
+++ b/vncviewer/FTMsgWriter.cxx
@@ -36,10 +36,22 @@
 }
 
 bool 
-FTMsgWriter::writeFileListRqst(unsigned short dirNameSize, char *pDirName,
-                               int dest, unsigned char flags)
+FTMsgWriter::writeFileListRqst(char *pDirName, bool bDirOnly)
 {
-  return false;
+  char dirName[FT_FILENAME_SIZE];
+  strcpy(dirName, pDirName);
+  int len = convertToUnixPath(dirName);
+  if (len <= 0) return false;
+
+  unsigned char flags = 0;
+  if (bDirOnly) flags = 0x10;
+
+  m_pOutStream->writeU8(msgTypeFileListRequest);
+  m_pOutStream->writeU8(flags);
+  m_pOutStream->writeU16(len);
+  m_pOutStream->writeBytes((void *)dirName, len);
+
+  return true;
 }
 
 
@@ -105,3 +117,18 @@
 {
   return false;
 }
+
+int
+FTMsgWriter::convertToUnixPath(char *path)
+{
+  int len = strlen(path);
+  if (len >= FT_FILENAME_SIZE) return -1;
+  if (len == 0) {strcpy(path, "/"); return 1;}
+  for (int i = (len - 1); i >= 0; i--) {
+    if (path[i] == '\\') path[i] = '/';
+    path[i+1] = path[i];
+  }
+  path[len + 1] = '\0';
+  path[0] = '/';
+  return strlen(path);
+}
diff --git a/vncviewer/FTMsgWriter.h b/vncviewer/FTMsgWriter.h
index a7026f1..7c832db 100644
--- a/vncviewer/FTMsgWriter.h
+++ b/vncviewer/FTMsgWriter.h
@@ -26,6 +26,8 @@
 
 #include <rdr/types.h>
 #include <rdr/OutStream.h>
+#include <rfb/msgTypes.h>
+#include <rfb/fttypes.h>
 
 namespace rfb {
   namespace win32 {
@@ -35,8 +37,7 @@
       FTMsgWriter(rdr::OutStream *pOS);
       ~FTMsgWriter();
 
-      bool writeFileListRqst(unsigned short dirNameSize, char *pDirName,
-							 int dest, unsigned char flags);
+      bool writeFileListRqst(char *pDirName, bool bDirOnly);
       
       bool writeFileDownloadCancel(unsigned short reasonLen, char *pReason);
       bool writeFileDownloadRqst(unsigned short filenameLen, char *pFilename, 
@@ -57,6 +58,8 @@
 
     private:
       rdr::OutStream *m_pOutStream;
+
+      int convertToUnixPath(char *path);
     };
   }
 }