fs.h
上传用户:pycemail
上传日期:2007-01-04
资源大小:329k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /*
  2.  * ProFTPD - FTP server daemon
  3.  * Copyright (c) 1997, 1998 Public Flood Software
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
  18.  */
  19. /* ProFTPD virtual/modular filesystem support.
  20.  * $Id: fs.h,v 1.2 1999/09/07 23:29:07 macgyver Exp $
  21.  */
  22. #ifndef _VIRTUAL_FS_H
  23. #define _VIRTUAL_FS_H
  24. /* Operation codes */
  25. #define FSOP_STAT (1 << 0)
  26. #define FSOP_LSTAT (1 << 1)
  27. #define FSOP_RENAME (1 << 2)
  28. #define FSOP_UNLINK (1 << 3)
  29. #define FSOP_OPEN (1 << 4)
  30. #define FSOP_CREAT (1 << 5)
  31. #define FSOP_CLOSE (1 << 6)
  32. #define FSOP_READ (1 << 7)
  33. #define FSOP_WRITE (1 << 8)
  34. #define FSOP_LINK (1 << 9)
  35. #define FSOP_SYMLINK (1 << 10)
  36. #define FSOP_READLINK (1 << 11)
  37. #define FSOP_CHMOD (1 << 12)
  38. #define FSOP_CHOWN (1 << 13)
  39. #define FSOP_CHDIR (1 << 14)
  40. #define FSOP_OPENDIR (1 << 15)
  41. #define FSOP_CLOSEDIR (1 << 16)
  42. #define FSOP_READDIR (1 << 17)
  43. #define FSOP_FILEMASK (FSOP_OPEN|FSOP_READ|FSOP_WRITE|FSOP_CLOSE|
  44. FSOP_CREAT)
  45. typedef struct fs_dir_handler fsdir_t;
  46. typedef struct fs_dir_match fsmatch_t;
  47. struct fs_dir_match {
  48.   fsmatch_t *next;
  49.   char *name;
  50.   int opmask;
  51.   int (*dir_hit)(fsdir_t*,const char*,int);
  52.   int (*file_hit)(fsdir_t*,const char*,int);
  53. };
  54. struct fs_dir_handler {
  55.   fsdir_t *next;
  56.   char *name;
  57.   fsdir_t *parent; /* parent handlers */
  58.   void *private;
  59.   /* actual handler functions */
  60.   int (*stat)(fsdir_t*,const char*,struct stat*);
  61.   int (*lstat)(fsdir_t*,const char*,struct stat*);
  62.   int (*rename)(fsdir_t*,const char*,const char*);
  63.   int (*unlink)(fsdir_t*,const char*);
  64.   int (*open)(fsdir_t*,const char*,int);
  65.   int (*creat)(fsdir_t*,const char*,mode_t);
  66.   int (*close)(fsdir_t*,int);
  67.   int (*read)(fsdir_t*,int,char*,size_t);
  68.   int (*write)(fsdir_t*,int,const char*,size_t);
  69.   off_t (*lseek)(fsdir_t*,int,off_t,int);
  70.   int (*link)(fsdir_t*,const char*,const char*);
  71.   int (*symlink)(fsdir_t*,const char*,const char*);
  72.   int (*readlink)(fsdir_t*,const char*,char*,size_t);
  73.   int (*chmod)(fsdir_t*,const char*,mode_t);
  74.   int (*chown)(fsdir_t*,const char*,uid_t,gid_t);
  75.   /* for actual operations on the directory (or subdirs)
  76.    * we cast the return from opendir to DIR* in src/fs.c, so
  77.    * modules can use their own data type
  78.    */
  79.   int (*chdir)(fsdir_t*,const char*);
  80.   void *(*opendir)(fsdir_t*,const char*);
  81.   int (*closedir)(fsdir_t*,void*);
  82.   struct dirent *(*readdir)(fsdir_t*,void*);
  83. };
  84. /* prototypes */
  85. fsmatch_t *fs_register_match(char*,int);
  86. fsdir_t *fs_register(char*);
  87. void fs_unregister(fsdir_t*);
  88. fsdir_t *fs_lookup_dir(const char *,int);
  89. fsdir_t *fs_lookup_file(const char *,char **,int);
  90. fsdir_t *fs_lookup_file_canon(const char *,char**,int);
  91. void fs_setcwd(const char *);
  92. const char *fs_getcwd();
  93. const char *fs_getvwd();
  94. void fs_dircat(char *,int,const char *, const char *);
  95. int fs_interpolate(const char *,char *,int);
  96. int fs_resolve_partial(const char *,char *,int,int);
  97. int fs_resolve_path(const char *,char *,int,int);
  98. void fs_virtual_path(const char *,char *,int);
  99. void fs_clean_path(const char *,char *,int);
  100. int fs_stat(const char *,struct stat *);
  101. int fs_stat_canon(const char *,struct stat *);
  102. int fs_lstat(const char *,struct stat *);
  103. int fs_lstat_canon(const char *,struct stat *);
  104. int fs_readlink(const char *, char *, int);
  105. int fs_readlink_canon(const char *,char *,int);
  106. int fs_chdir(const char *,int);
  107. int fs_chdir_canon(const char *, int);
  108. void *fs_opendir(const char *);
  109. int fs_closedir(void*);
  110. struct dirent *fs_readdir(void*);
  111. int fs_glob(const char*,int,int (*errfunc)(const char *,int),glob_t*);
  112. void fs_globfree(glob_t*);
  113. int fs_rename(const char*,const char*);
  114. int fs_rename_canon(const char*,const char*);
  115. int fs_unlink(const char*);
  116. int fs_unlink_canon(const char*);
  117. fsdir_t *fs_open(const char*,int,int*);
  118. fsdir_t *fs_open_canon(const char*,int,int*);
  119. fsdir_t *fs_creat(const char*,mode_t,int*);
  120. fsdir_t *fs_creat_canon(const char*,mode_t,int*);
  121. int fs_close(fsdir_t*,int);
  122. int fs_read(fsdir_t*,int,char*,size_t);
  123. int fs_write(fsdir_t*,int,const char*,size_t);
  124. int fs_link(const char*,const char*);
  125. int fs_link_canon(const char*,const char*);
  126. int fs_symlink(const char*,const char*);
  127. int fs_symlink_canon(const char*,const char*);
  128. int fs_chmod(const char*,mode_t);
  129. int fs_chmod_canon(const char*,mode_t);
  130. int fs_chown(const char*,uid_t,gid_t);
  131. int fs_chown_canon(const char*,uid_t,gid_t);
  132. off_t fs_lseek(fsdir_t *, int fd, off_t, int whence);
  133. char *fs_gets(char *, size_t, fsdir_t*, int);
  134. int init_fs();
  135. #endif /* _VIRTUAL_FS_H */