ftpfs.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. typedef struct File File;
  2. typedef struct Node Node;
  3. typedef struct OS OS;
  4. #pragma incomplete File
  5. enum
  6. {
  7. Maxpath= 512,
  8. };
  9. /* a tree for file path's - this mirrors the directory structure */
  10. struct Node
  11. {
  12. String *remname;
  13. Dir *d;
  14. Node *parent;
  15. Node *sibs;
  16. Node *children;
  17. File *fp;
  18. short depth;
  19. char chdirunknown; /* true if QTDIR bit of files in this dir is unknown */
  20. int opens;
  21. };
  22. /* OS types */
  23. enum
  24. {
  25. Unix= 1,
  26. Tops= 2,
  27. Plan9= 3,
  28. VM= 4,
  29. VMS= 5,
  30. MVS= 6,
  31. NetWare= 7,
  32. OS½= 8,
  33. TSO= 9,
  34. NT= 10,
  35. Unknown= 11,
  36. };
  37. struct OS
  38. {
  39. int os;
  40. char *name;
  41. };
  42. extern OS oslist[];
  43. /* temporary files */
  44. void filefree(Node*);
  45. int fileread(Node*, char*, long, int);
  46. int filewrite(Node*, char*, long, int);
  47. void filedirty(Node*);
  48. void fileclean(Node*);
  49. int fileisdirty(Node*);
  50. /* ftp protocol */
  51. void hello(char*);
  52. void quit(void);
  53. void preamble(char*);
  54. void rlogin(char *, char *);
  55. void clogin(char *, char *);
  56. void nop(void);
  57. int readdir(Node*);
  58. int createdir(Node*);
  59. int readfile(Node*);
  60. int createfile(Node*);
  61. int changedir(Node*);
  62. int removefile(Node*);
  63. int removedir(Node*);
  64. /* misc */
  65. void* safecpy(void*, void*, int);
  66. void fatal(char*, ...);
  67. int seterr(char*, ...);
  68. Node* extendpath(Node*, String*);
  69. Node* newnode(Node*, String*);
  70. void uncache(Node*);
  71. void invalidate(Node*);
  72. void uncachedir(Node*, Node*);
  73. Node* newtopsdir(char*);
  74. void fixsymbolic(Node*);
  75. Dir* reallocdir(Dir *d, int dofree);
  76. Dir* dir_change_name(Dir *d, char *name);
  77. Dir* dir_change_uid(Dir *d, char *name);
  78. Dir* dir_change_gid(Dir *d, char *name);
  79. Dir* dir_change_muid(Dir *d, char *name);
  80. extern Node *remdir; /* current directory on remote side */
  81. extern Node *remroot; /* root on remote side */
  82. extern int os; /* remote os */
  83. extern int debug; /* non-zero triggers debugging output */
  84. extern int usenlst;
  85. extern char *nosuchfile;
  86. extern char *ext; /* add to names of non-dir files */
  87. extern int defos;
  88. extern int quiet;
  89. extern char *user;
  90. #define ISCACHED(x) ((x)->d->type)
  91. #define UNCACHED(x) (x)->d->type = 0
  92. #define CACHED(x) { (x)->d->type = 1; (x)->d->atime = time(0); }
  93. #define ISOLD(x) (x)->d->atime + TIMEOUT < time(0)
  94. #define ISVALID(x) ((x)->d->dev)
  95. #define INVALID(x) (x)->d->dev = 0
  96. #define VALID(x) (x)->d->dev = 1
  97. #define TIMEOUT 5*60
  98. #define DMSYML 0x10000000
  99. #define MAXFDATA 8192
  100. extern char net[]; /* network for connections */