00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef LC_FS_MODULE_H
00015 #define LC_FS_MODULE_H
00016
00017
00018 #include <gwenhywfar/misc.h>
00019 #include <gwenhywfar/inherit.h>
00020 #include <gwenhywfar/stringlist2.h>
00021 #include <gwenhywfar/buffer.h>
00022
00023 #include <chipcard2/chipcard2.h>
00024
00025
00026 enum LC_FS_ERROR {
00027 LC_FS_ErrorNone=0,
00028 LC_FS_ErrorGeneric,
00029 LC_FS_ErrorNotSupported,
00030 LC_FS_ErrorNotFound,
00031 LC_FS_ErrorNotFile,
00032 LC_FS_ErrorNotDir,
00033 LC_FS_ErrorExists,
00034 LC_FS_ErrorFull,
00035 LC_FS_ErrorInvalid,
00036 LC_FS_ErrorBrokenPipe,
00037 LC_FS_ErrorMissingArgs,
00038 LC_FS_ErrorNotEmpty,
00039 };
00040
00041
00042
00043 typedef struct LC_FS_MODULE LC_FS_MODULE;
00044
00045 GWEN_INHERIT_FUNCTION_LIB_DEFS(LC_FS_MODULE, CHIPCARD_API)
00046
00047
00048 #include <chipcard2-client/fs/fsnode.h>
00049 #include <chipcard2-client/fs/fs.h>
00050
00051
00052 LC_FS_MODULE *LC_FSModule_new();
00053 void LC_FSModule_free(LC_FS_MODULE *fs);
00054 void LC_FSModule_Attach(LC_FS_MODULE *fs);
00055
00056
00057
00058 typedef int (*LC_FS_MODULE_MOUNT_FN)(LC_FS_MODULE *fs,
00059 LC_FS_NODE **nPtr);
00060 typedef int (*LC_FS_MODULE_UNMOUNT_FN)(LC_FS_MODULE *fs,
00061 LC_FS_NODE *node);
00062
00063
00064 typedef int (*LC_FS_MODULE_OPENDIR_FN)(LC_FS_MODULE *fs,
00065 LC_FS_NODE *node,
00066 const char *name,
00067 LC_FS_NODE **nPtr);
00068
00069 typedef int (*LC_FS_MODULE_MKDIR_FN)(LC_FS_MODULE *fs,
00070 LC_FS_NODE *node,
00071 const char *name,
00072 GWEN_TYPE_UINT32 flags,
00073 LC_FS_NODE **nPtr);
00074
00075
00076 typedef int (*LC_FS_MODULE_READDIR_FN)(LC_FS_MODULE *fs,
00077 LC_FS_NODE *node,
00078 GWEN_STRINGLIST2 *sl);
00079
00080 typedef int (*LC_FS_MODULE_CLOSEDIR_FN)(LC_FS_MODULE *fs,
00081 LC_FS_NODE *node);
00082
00083
00084 typedef int (*LC_FS_MODULE_OPENFILE_FN)(LC_FS_MODULE *fs,
00085 LC_FS_NODE *node,
00086 const char *name,
00087 LC_FS_NODE **nPtr);
00088
00089 typedef int (*LC_FS_MODULE_CREATEFILE_FN)(LC_FS_MODULE *fs,
00090 LC_FS_NODE *node,
00091 const char *name,
00092 GWEN_TYPE_UINT32 flags,
00093 LC_FS_NODE **nPtr);
00094
00095 typedef int (*LC_FS_MODULE_CLOSEFILE_FN)(LC_FS_MODULE *fs,
00096 LC_FS_NODE *node);
00097
00098
00099 typedef int (*LC_FS_MODULE_READFILE_FN)(LC_FS_MODULE *fs,
00100 LC_FS_NODE *node,
00101 GWEN_TYPE_UINT32 mode,
00102 GWEN_TYPE_UINT32 offset,
00103 GWEN_TYPE_UINT32 len,
00104 GWEN_BUFFER *buf);
00105
00106 typedef int (*LC_FS_MODULE_WRITEFILE_FN)(LC_FS_MODULE *fs,
00107 LC_FS_NODE *node,
00108 GWEN_TYPE_UINT32 mode,
00109 GWEN_TYPE_UINT32 offset,
00110 GWEN_BUFFER *buf);
00111
00112 typedef int (*LC_FS_MODULE_LOOKUP_FN)(LC_FS_MODULE *fs,
00113 LC_FS_NODE *node,
00114 const char *name,
00115 LC_FS_NODE **nPtr);
00116
00117 typedef int (*LC_FS_MODULE_UNLINK_FN)(LC_FS_MODULE *fs,
00118 LC_FS_NODE *node,
00119 const char *name);
00120
00121
00122 typedef int (*LC_FS_MODULE_DUMP_FN)(LC_FS_MODULE *fs,
00123 LC_FS_NODE *node,
00124 FILE *f,
00125 int indent);
00126
00127
00128
00129 void LC_FSModule_SetMountFn(LC_FS_MODULE *fs, LC_FS_MODULE_MOUNT_FN f);
00130 LC_FS_MODULE_MOUNT_FN LC_FSModule_GetMountFn(const LC_FS_MODULE *fs);
00131
00132 void LC_FSModule_SetUnmountFn(LC_FS_MODULE *fs, LC_FS_MODULE_UNMOUNT_FN f);
00133 LC_FS_MODULE_UNMOUNT_FN LC_FSModule_GetUnmountFn(const LC_FS_MODULE *fs);
00134
00135 void LC_FSModule_SetOpenDirFn(LC_FS_MODULE *fs, LC_FS_MODULE_OPENDIR_FN f);
00136 LC_FS_MODULE_OPENDIR_FN LC_FSModule_GetOpenDirFn(const LC_FS_MODULE *fs);
00137
00138 void LC_FSModule_SetMkDirFn(LC_FS_MODULE *fs, LC_FS_MODULE_MKDIR_FN f);
00139 LC_FS_MODULE_MKDIR_FN LC_FSModule_GetMkDirFn(const LC_FS_MODULE *fs);
00140
00141 void LC_FSModule_SetReadDirFn(LC_FS_MODULE *fs, LC_FS_MODULE_READDIR_FN f);
00142 LC_FS_MODULE_READDIR_FN LC_FSModule_GetReadDirFn(const LC_FS_MODULE *fs);
00143
00144 void LC_FSModule_SetCloseDirFn(LC_FS_MODULE *fs, LC_FS_MODULE_CLOSEDIR_FN f);
00145 LC_FS_MODULE_CLOSEDIR_FN LC_FSModule_GetCloseDirFn(const LC_FS_MODULE *fs);
00146
00147 void LC_FSModule_SetOpenFileFn(LC_FS_MODULE *fs, LC_FS_MODULE_OPENFILE_FN f);
00148 LC_FS_MODULE_OPENFILE_FN LC_FSModule_GetOpenFileFn(const LC_FS_MODULE *fs);
00149
00150 void LC_FSModule_SetCreateFileFn(LC_FS_MODULE *fs,
00151 LC_FS_MODULE_CREATEFILE_FN f);
00152 LC_FS_MODULE_CREATEFILE_FN LC_FSModule_GetCreateFileFn(const LC_FS_MODULE *fs);
00153
00154 void LC_FSModule_SetCloseFileFn(LC_FS_MODULE *fs,
00155 LC_FS_MODULE_CLOSEFILE_FN f);
00156 LC_FS_MODULE_CLOSEFILE_FN LC_FSModule_GetCloseFileFn(const LC_FS_MODULE *fs);
00157
00158
00159 void LC_FSModule_SetReadFileFn(LC_FS_MODULE *fs, LC_FS_MODULE_READFILE_FN f);
00160 LC_FS_MODULE_READFILE_FN LC_FSModule_GetReadFileFn(const LC_FS_MODULE *fs);
00161
00162 void LC_FSModule_SetWriteFileFileFn(LC_FS_MODULE *fs,
00163 LC_FS_MODULE_WRITEFILE_FN f);
00164 LC_FS_MODULE_WRITEFILE_FN
00165 LC_FSModule_GetWriteFileFileFn(const LC_FS_MODULE *fs);
00166
00167
00168 void LC_FSModule_SetLookupFn(LC_FS_MODULE *fs, LC_FS_MODULE_LOOKUP_FN f);
00169 LC_FS_MODULE_LOOKUP_FN LC_FSModule_GetLookupFn(const LC_FS_MODULE *fs);
00170
00171 void LC_FSModule_SetUnlinkFn(LC_FS_MODULE *fs, LC_FS_MODULE_UNLINK_FN f);
00172 LC_FS_MODULE_UNLINK_FN LC_FSModule_GetUnlinkFn(const LC_FS_MODULE *fs);
00173
00174 void LC_FSModule_SetDumpFn(LC_FS_MODULE *fs, LC_FS_MODULE_DUMP_FN f);
00175 LC_FS_MODULE_DUMP_FN LC_FSModule_GetDumpFn(const LC_FS_MODULE *fs);
00176
00177
00178
00179 GWEN_TYPE_UINT32 LC_FSModule_GetMountFlags(const LC_FS_MODULE *fs);
00180 void LC_FSModule_SetMountFlags(LC_FS_MODULE *fs, GWEN_TYPE_UINT32 fl);
00181 void LC_FSModule_AddMountFlags(LC_FS_MODULE *fs, GWEN_TYPE_UINT32 fl);
00182 void LC_FSModule_SubMountFlags(LC_FS_MODULE *fs, GWEN_TYPE_UINT32 fl);
00183
00184 GWEN_TYPE_UINT32 LC_FSModule_GetActiveNodes(const LC_FS_MODULE *fs);
00185 void LC_FSModule_IncActiveNodes(LC_FS_MODULE *fs);
00186 void LC_FSModule_DecActiveNodes(LC_FS_MODULE *fs);
00187
00188
00189 int LC_FSModule_Dump(LC_FS_MODULE *fs,
00190 LC_FS_NODE *node,
00191 FILE *f,
00192 int indent);
00193
00194
00195 #endif