3e44e1def1 2019-05-02 1: #ifndef XVFS_CORE_H_1B4B28D60EBAA11D5FF85642FA7CA22C29E8E817
3e44e1def1 2019-05-02 2: #define XVFS_CORE_H_1B4B28D60EBAA11D5FF85642FA7CA22C29E8E817 1
f74a2e47ab 2019-05-02 3:
f74a2e47ab 2019-05-02 4: #include <tcl.h>
1ecab39ce5 2019-05-02 5:
1ecab39ce5 2019-05-02 6: #define XVFS_PROTOCOL_VERSION 1
9bcf758fef 2019-05-08 7: #define XVFS_PROTOCOL_SERVER_MAGIC "\xD4\xF3\x05\x96\x25\xCF\xAF\xFE"
9bcf758fef 2019-05-08 8: #define XVFS_PROTOCOL_SERVER_MAGIC_LEN 8
32b55a907b 2019-05-02 9:
32b55a907b 2019-05-02 10: typedef const char **(*xvfs_proc_getChildren_t)(const char *path, Tcl_WideInt *count);
32b55a907b 2019-05-02 11: typedef const unsigned char *(*xvfs_proc_getData_t)(const char *path, Tcl_WideInt start, Tcl_WideInt *length);
daf25f5222 2019-05-03 12: typedef int (*xvfs_proc_getStat_t)(const char *path, Tcl_StatBuf *statBuf);
e5b6962adf 2019-05-02 13:
e5b6962adf 2019-05-02 14: struct Xvfs_FSInfo {
e5b6962adf 2019-05-02 15: int protocolVersion;
d121970301 2019-05-02 16: const char *name;
e5b6962adf 2019-05-02 17: xvfs_proc_getChildren_t getChildrenProc;
e5b6962adf 2019-05-02 18: xvfs_proc_getData_t getDataProc;
daf25f5222 2019-05-03 19: xvfs_proc_getStat_t getStatProc;
e5b6962adf 2019-05-02 20: };
e5b6962adf 2019-05-02 21:
3e44e1def1 2019-05-02 22: #define XVFS_REGISTER_INTERFACE(name) int name(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo);
3e44e1def1 2019-05-02 23:
3e44e1def1 2019-05-02 24: #if defined(XVFS_MODE_STANDALONE)
3e44e1def1 2019-05-02 25: /*
3e44e1def1 2019-05-02 26: * In standalone mode, we just redefine calls to
3e44e1def1 2019-05-02 27: * Xvfs_Register() to go to the xvfs_standalone_register()
3e44e1def1 2019-05-02 28: * function
3e44e1def1 2019-05-02 29: */
3e44e1def1 2019-05-02 30: # define Xvfs_Register xvfs_standalone_register
3e44e1def1 2019-05-02 31: XVFS_REGISTER_INTERFACE(Xvfs_Register)
3e44e1def1 2019-05-02 32:
3e44e1def1 2019-05-02 33: #elif defined(XVFS_MODE_FLEXIBLE)
3e44e1def1 2019-05-02 34: /*
3e44e1def1 2019-05-02 35: * In flexible mode we declare an external symbol named
3e44e1def1 2019-05-02 36: * Xvfs_Register(), as well as an internal symbol called
3e44e1def1 2019-05-02 37: * xvfs_flexible_register(), which we redefine future
3e44e1def1 2019-05-02 38: * calls to Xvfs_Register() to invoke
3e44e1def1 2019-05-02 39: */
3e44e1def1 2019-05-02 40: extern XVFS_REGISTER_INTERFACE(Xvfs_Register)
3e44e1def1 2019-05-02 41: # define Xvfs_Register xvfs_flexible_register
3e44e1def1 2019-05-02 42: XVFS_REGISTER_INTERFACE(Xvfs_Register)
3e44e1def1 2019-05-02 43:
3e44e1def1 2019-05-02 44: #elif defined(XVFS_MODE_CLIENT)
3e44e1def1 2019-05-02 45: /*
3e44e1def1 2019-05-02 46: * In client mode we declare an external symbol named
3e44e1def1 2019-05-02 47: * Xvfs_Register() that must be provided by the environment
3e44e1def1 2019-05-02 48: * we are loaded into
3e44e1def1 2019-05-02 49: */
3e44e1def1 2019-05-02 50: extern XVFS_REGISTER_INTERFACE(Xvfs_Register)
3e44e1def1 2019-05-02 51:
3e44e1def1 2019-05-02 52: #elif defined(XVFS_MODE_SERVER)
3e44e1def1 2019-05-02 53: /*
3e44e1def1 2019-05-02 54: * In server mode we are going to implementing Xvfs_Register()
3e44e1def1 2019-05-02 55: * for flexible/client modes, just forward declare it
3e44e1def1 2019-05-02 56: */
3e44e1def1 2019-05-02 57: XVFS_REGISTER_INTERFACE(Xvfs_Register)
3e44e1def1 2019-05-02 58:
3e44e1def1 2019-05-02 59: #else
3e44e1def1 2019-05-02 60: # error Unsupported XVFS_MODE
acfc5037c6 2019-05-02 61: #endif
acfc5037c6 2019-05-02 62:
1ecab39ce5 2019-05-02 63:
1ecab39ce5 2019-05-02 64: #endif