00001
00023 #ifndef _LIBCOMPREX_FSNODE_H_
00024 #define _LIBCOMPREX_FSNODE_H_
00025
00026 #include <sys/types.h>
00027 #include <time.h>
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033 typedef struct _CxFsNode CxFsNode;
00034 typedef enum _CxFsNodeType CxFsNodeType;
00036 #include <libcomprex/archive.h>
00037 #include <libcomprex/directory.h>
00038 #include <libcomprex/file.h>
00039 #include <libcomprex/types.h>
00040
00044 enum _CxFsNodeType
00045 {
00046 CX_FSNODETYPE_UNKNOWN = 0,
00047 CX_FSNODETYPE_FILE,
00048 CX_FSNODETYPE_DIRECTORY,
00049 };
00050
00057 struct _CxFsNode
00058 {
00059 CxArchive *archive;
00060 CxDirectory *parentDir;
00062 char *name;
00064 CxFsNodeType type;
00070 char *path;
00071
00072 mode_t mode;
00073 uid_t uid;
00074 gid_t gid;
00076 time_t date;
00078 char isLocal;
00083 union
00084 {
00085 CxFileData *file;
00086 CxDirectoryData *dir;
00088 } u;
00089
00090 void *moduleData;
00092 unsigned int refCount;
00094 CxFsNode *prev;
00095 CxFsNode *next;
00096 };
00097
00098
00100
00110 CxFsNode *cxNewFsNode(void);
00111
00119 void cxDestroyFsNode(CxFsNode *node);
00120
00123
00125
00138 void cxSetFsNodeArchive(CxFsNode *node, CxArchive *archive);
00139
00148 void cxSetFsNodeParent(CxFsNode *node, CxDirectory *parent);
00149
00158 void cxSetFsNodeName(CxFsNode *node, const char *name);
00159
00168 void cxSetFsNodeType(CxFsNode *node, CxFsNodeType type);
00169
00178 void cxSetFsNodeMode(CxFsNode *node, mode_t mode);
00179
00188 void cxSetFsNodeUid(CxFsNode *node, uid_t uid);
00189
00198 void cxSetFsNodeGid(CxFsNode *node, gid_t gid);
00199
00208 void cxSetFsNodeDate(CxFsNode *node, time_t date);
00209
00221 void cxSetFsNodeLocal(CxFsNode *node, char isLocal);
00222
00225
00227
00239 CxArchive *cxGetFsNodeArchive(CxFsNode *node);
00240
00250 CxDirectory *cxGetFsNodeParent(CxFsNode *node);
00251
00261 const char *cxGetFsNodeName(CxFsNode *node);
00262
00273 const char *cxGetFsNodePath(CxFsNode *node);
00274
00284 CxFsNodeType cxGetFsNodeType(CxFsNode *node);
00285
00295 mode_t cxGetFsNodeMode(CxFsNode *node);
00296
00306 uid_t cxGetFsNodeUid(CxFsNode *node);
00307
00317 gid_t cxGetFsNodeGid(CxFsNode *node);
00318
00328 time_t cxGetFsNodeDate(CxFsNode *node);
00329
00342 char cxIsFsNodeLocal(CxFsNode *node);
00343
00346
00348
00360 CxFsNode *cxGetNextFsNode(CxFsNode *node);
00361
00371 CxFsNode *cxGetPreviousFsNode(CxFsNode *node);
00372
00375
00377
00387 #define CX_IS_DIRECTORY(node) \
00388 (cxGetFsNodeType(node) == CX_FSNODETYPE_DIRECTORY)
00389
00392 #ifdef __cplusplus
00393 }
00394 #endif
00395
00396 #endif
00397