ftpfs.h 2.3 KB

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