VirtualFileSystem.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:7k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // VirtualFileSystem.h : header file
  2. //
  3. #include "unix.h"
  4. /////////////////////////////////////////////////////////////////////////////
  5. // CVirtualFileSystem window
  6. // Each therad has it's own private window. At this time the window
  7. // is executed by the callers therad (to relax task switching).
  8. // However, this might change. The caller must not relay on the
  9. // fact that the window is ran by it's own thread.
  10. class DLL_VFSYS_ CVirtualFileSystem : public CWnd
  11. {
  12. // Construction
  13. public:
  14. CVirtualFileSystem();
  15. static SMEM m_MasterVfSys; // Master file system
  16. static CLinkedList m_FreeThreads;
  17. static CLinkedList m_BusyThreads;
  18. // Overrides
  19. // ClassWizard generated virtual function overrides
  20. //{{AFX_VIRTUAL(CVirtualFileSystem)
  21. //}}AFX_VIRTUAL
  22. // Implementation
  23. public:
  24. virtual ~CVirtualFileSystem();
  25. static CWinThread *GetThread(CWinThread *pTherad, HWND hWnd);
  26. LONG ProcessRequest(int Type, WPARAM wParam, LPARAM lParam);
  27. static void Shutdown();
  28. afx_msg LONG mhCallback( WPARAM wParam, LPARAM lParam);
  29. afx_msg LONG mhCreateFile( WPARAM wParam, LPARAM lParam);
  30. afx_msg LONG mhCreate( WPARAM wParam, LPARAM lParam);
  31. afx_msg LONG mhChdir( WPARAM wParam, LPARAM lParam);
  32. afx_msg LONG mhChmod( WPARAM wParam, LPARAM lParam);
  33. afx_msg LONG mhPreperePath( WPARAM wParam, LPARAM lParam);
  34. afx_msg LONG mhList( WPARAM wParam, LPARAM lParam);
  35. afx_msg LONG mhCloseFile( WPARAM wParam, LPARAM lParam);
  36. afx_msg LONG mhWlist( WPARAM wParam, LPARAM lParam);
  37. afx_msg LONG mhFsysstat( WPARAM wParam, LPARAM lParam);
  38. afx_msg LONG mhCreateDir( WPARAM wParam, LPARAM lParam);
  39. afx_msg LONG mhDeleteDir( WPARAM wParam, LPARAM lParam);
  40. afx_msg LONG mhDeleteFile( WPARAM wParam, LPARAM lParam);
  41. afx_msg LONG mhDeleteGeneric( WPARAM wParam, LPARAM lParam);
  42. afx_msg LONG mhLinkFile( WPARAM wParam, LPARAM lParam);
  43. afx_msg LONG mhMoveFile( WPARAM wParam, LPARAM lParam);
  44. afx_msg LONG mhQuit(WPARAM wParam, LPARAM lParam);
  45. afx_msg LONG mhStat(WPARAM wParam, LPARAM lParam);
  46. // Generated message map functions
  47. protected:
  48. //{{AFX_MSG(CVirtualFileSystem)
  49. // NOTE - the ClassWizard will add and remove member functions here.
  50. //}}AFX_MSG
  51. DECLARE_MESSAGE_MAP()
  52. };
  53. class DLL_VFSYS_ CFsysThread
  54. {
  55. public:
  56. CFsysThread(); 
  57. ~CFsysThread();
  58. static UINT EntryPoint(LPVOID pParam);
  59. UINT Process();
  60. DIR_NODE *GetRootNode();
  61. void LogMsg(int flag, LPCSTR Format, ...);
  62. BOOL ParseRootpath(LPCSTR RootPath, CString& Name, CString& LinkPath);
  63. BOOL ScanPath(LPCSTR Path, BOOL FullScanToPath, BOOL Recursive, BOOL Force, BOOL DoLock = TRUE);
  64. BOOL ParsePath(CString& Path);
  65. BOOL CheckPermissions(LPCSTR Path, DWORD ReqType, DWORD Perm, SMEM *psmNode);
  66. BOOL UserHasPermission(DWORD Perms, DWORD PermWanted);
  67. BOOL UserHasPermission(DIR_NODE *pDir, DWORD Perm);
  68. SMEM FindNode(SMEM& smDir, LPCSTR Name);
  69. BOOL BldFileInfoList(CFileList& FileList, LPCSTR Path, BOOL ListDir);
  70. int AddFileInfoListPath(CFileList& FileList, LPCSTR Path, LPCSTR Pattern);
  71. int AddFileInfoListPath(CFileList& FileList, SMEM smDir, LPCSTR Pattern);
  72. BOOL ChDir(LPCSTR Path);
  73. void Flush(SMEM smDir);
  74. // User functions
  75. BOOL DoCreateUser(LPCSTR RootPaths);
  76. BOOL DoCreateFile(LPCSTR Path);
  77. BOOL DoChDirUser(LPCSTR Path);
  78. BOOL DoPrepereUserCmdLine(LPCSTR CmdLine);
  79. BOOL DoList(LPCSTR ArgumentsUnparsed);
  80. BOOL DoWlist(LPCSTR ArgumentsUnparsed);
  81. void DoCloseFile(SMEM smNode);
  82. BOOL DoChmod(CCmdArgs& Args);
  83. BOOL DoFsysStat();
  84. BOOL DoCreateDirectory(LPCSTR Path);
  85. BOOL DoDeleteGeneric(LPCSTR Path, DWORD Flags);
  86. BOOL DoCreateLink(LPCSTR From, LPCSTR To);
  87. BOOL DoMoveFile(LPCSTR From, LPCSTR To);
  88. BOOL DoStat(LPCSTR Path);
  89. // Data members
  90. CCriticalSection m_Lock;
  91. int m_SeqNo;
  92. HWND m_CallbackWin;
  93. static int m_NumThreadsStarted;
  94. CUserFsys *m_pFsys;
  95. enum // Delete flags
  96. {
  97. DELE_FILE = 0x00000001,
  98. DELE_DIR = 0x00000002
  99. };
  100. };
  101. class DLL_VFSYS_ CChmod : public CUnix
  102. {
  103. protected:
  104. int m_Owner;
  105. int m_Group;
  106. LPCSTR m_Comment;
  107. int m_DefDirPerms;
  108. int m_DefFilePerms;
  109. int m_SpecialNewFilePerm;
  110. BOOL m_SetMode;
  111. CFsysThread *m_pFsysThread;
  112. CStringList m_VisitedDirs;
  113. LPVOID set;
  114. long val;
  115. int oct, omode;
  116. int Hflag, Lflag, Pflag, Rflag, ch, fflag, hflag, rval;
  117. char *ep, *mode;
  118. public:
  119. CChmod(CFsysThread *pFsysThread);
  120. ~CChmod();
  121. protected:
  122. virtual int main(int argc, char **argv);
  123. int Process(int argc, char **argv, int Level, CFileList& MasterFileList);
  124. int _Process(int argc, char **argv, int Level, CFileList& MasterFileList);
  125. int usage();
  126. BOOL ChmodFileList(CFileList& FileList, LPCSTR Path);
  127. int __chmod(FILE_NODE *pNode, int SetMode, int SetOwner, 
  128. int SetClass, LPCSTR SetComment, int DefDirMode, 
  129. int DefFileMode, int SpecialNewFilePerm);
  130. };
  131. class DLL_VFSYS_ CVfSysLs : public CUnix
  132. {
  133. public:
  134. long blocksize; /* block size units */
  135. int termwidth; /* default terminal width */
  136. /* flags */
  137. int f_accesstime; /* use time of last access */
  138. int f_column; /* columnated format */
  139. int f_flags; /* show flags associated with a file */
  140. int f_inode; /* print inode */
  141. int f_kblocks; /* print size in kilobytes */
  142. int f_listdir; /* list actual directory, not contents */
  143. int f_listdot; /* list files beginning with . */
  144. int f_hidethisandprevdotdir;
  145. int f_longform; /* long listing format */
  146. int f_newline; /* if precede with newline */
  147. int f_nonprint; /* show unprintables as ? */
  148. int f_nosort; /* don't sort output */
  149. int f_recursive; /* ls subdirectories also */
  150. int f_reversesort; /* reverse whatever sort is used */
  151. int f_sectime; /* print the real time for all files */
  152. int f_singlecol; /* use single column output */
  153. int f_size; /* list size in short listing */
  154. int f_statustime; /* use time of last mode change */
  155. int f_dirname; /* if precede with directory name */
  156. int f_timesort; /* sort by time vice name */
  157. int f_type; /* add type character for non-regular files */
  158. int f_followLinks; // Follown any symbolic links (FTS_COMFOLLOW)
  159. int f_printdlc;
  160. int f_comment;
  161. int output;
  162. int (*sortfcn)(const CLinkedListItem **a, const CLinkedListItem **b);
  163. FLEN btotal;
  164. int entries;
  165. int maxlen;
  166. FLEN maxsize;
  167. int s_block, s_group, s_inode, s_nlink, s_size, s_user;
  168. BOOL m_Virgin;
  169. CFsysThread *m_pFsysThread;
  170. FILE_NODE **array;
  171. int lastentries;
  172. CStringList m_VisitedDirs;
  173. public:
  174. CVfSysLs();
  175. ~CVfSysLs();
  176. virtual int main(int argc, char **argv);
  177. int ListDir(int argc, char **argv);
  178. int _ListDir(int argc, char **argv);
  179. BOOL PrintFileList(CFileList& FileList, LPCSTR Path);
  180. void printscol(CFileList& FileList, LPCSTR Path);
  181. int printaname(CPseudoFileInfo& Info, LPCSTR Path);
  182. int printtype(CPseudoFileInfo& Info);
  183. void printlong(CFileList& FileList, LPCSTR Path);
  184. void printtime(LPFILETIME ftime);
  185. void printcol(CFileList& FileList, LPCSTR Path);
  186. int printcomment(CPseudoFileInfo& Info);
  187. static int namecmp(const CLinkedListItem **a, const CLinkedListItem **b);
  188. static int revnamecmp(const CLinkedListItem **a, const CLinkedListItem **b);
  189. static int modcmp(const CLinkedListItem **a, const CLinkedListItem **b);
  190. static int revmodcmp(const CLinkedListItem **a, const CLinkedListItem **b);
  191. static int acccmp(const CLinkedListItem **a, const CLinkedListItem **b);
  192. static int revacccmp(const CLinkedListItem **a, const CLinkedListItem **b);
  193. static int statcmp(const CLinkedListItem **a, const CLinkedListItem **b);
  194. static int revstatcmp(const CLinkedListItem **a, const CLinkedListItem **b);
  195. void usage();
  196. };