00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _EGG_MOD_FILESYS_FILEDB3_H
00030 #define _EGG_MOD_FILESYS_FILEDB3_H
00031
00032
00033
00034
00035 #ifdef HAVE_CONFIG_H
00036 # include "config.h"
00037 #endif
00038
00039
00040 #ifdef TIME_WITH_SYS_TIME
00041 # include <sys/time.h>
00042 # include <time.h>
00043 #else
00044 # ifdef HAVE_SYS_TIME_H
00045 # include <sys/time.h>
00046 # else
00047 # include <time.h>
00048 # endif
00049 #endif
00050
00051
00052 typedef struct {
00053 char version;
00054 time_t timestamp;
00055 } filedb_top;
00056
00057
00058 typedef struct {
00059 time_t uploaded;
00060 unsigned int size;
00061 unsigned short int stat;
00062 unsigned short int gots;
00063 unsigned short int filename_len;
00064 unsigned short int desc_len;
00065 unsigned short int chan_len;
00066 unsigned short int uploader_len;
00067 unsigned short int flags_req_len;
00068 unsigned short int buffer_len;
00069 } filedb_header;
00070
00071
00072
00073
00074 typedef struct {
00075 time_t uploaded;
00076 unsigned int size;
00077 unsigned short int stat;
00078 unsigned short int gots;
00079 unsigned short int _type;
00080
00081
00082
00083
00084
00085 long pos;
00086 unsigned short int dyn_len;
00087 unsigned short int buf_len;
00088
00089 char *filename;
00090 char *desc;
00091 char *chan;
00092 char *uploader;
00093 char *flags_req;
00094 } filedb_entry;
00095
00096
00097
00098
00099
00100
00101
00102 #define filedb_tot_dynspace(fdh) ((fdh).filename_len + (fdh).desc_len + \
00103 (fdh).chan_len + (fdh).uploader_len + (fdh).flags_req_len)
00104
00105 #define filedb_zero_dynspace(fdh) { \
00106 (fdh).filename_len = 0; \
00107 (fdh).desc_len = 0; \
00108 (fdh).chan_len = 0; \
00109 (fdh).uploader_len = 0; \
00110 (fdh).flags_req_len = 0; \
00111 }
00112
00113
00114 #define malloc_fdbe() _malloc_fdbe(__FILE__, __LINE__)
00115 #define filedb_getfile(fdb, pos, get) _filedb_getfile(fdb, pos, get, __FILE__, __LINE__)
00116 #define filedb_matchfile(fdb, pos, match) _filedb_matchfile(fdb, pos, match, __FILE__, __LINE__)
00117 #define filedb_updatefile(fdb, pos, fdbe, update) _filedb_updatefile(fdb, pos, fdbe, update, __FILE__, __LINE__)
00118 #define filedb_addfile(fdb, fdbe) _filedb_addfile(fdb, fdbe, __FILE__, __LINE__)
00119 #define filedb_movefile(fdb, pos, fdbe) _filedb_movefile(fdb, pos, fdbe, __FILE__, __LINE__)
00120
00121
00122 #define FILEMATCH (match+sofar)
00123 #define FILEQUOTE '\\'
00124 #define FILEWILDS '*'
00125 #define FILEWILDQ '?'
00126
00127
00128
00129
00130
00131 #define FILEDB_VERSION1 0x0001
00132 #define FILEDB_VERSION2 0x0002
00133 #define FILEDB_VERSION3 0x0003
00134 #define FILEDB_NEWEST_VER FILEDB_VERSION3
00135
00136 #define POS_NEW 0
00137
00138
00139 #define FILE_UNUSED 0x0001
00140 #define FILE_DIR 0x0002
00141 #define FILE_HIDDEN 0x0004
00142
00143 #define FILEDB_ESTDYN 50
00144
00145 enum {
00146 GET_HEADER,
00147 GET_FILENAME,
00148 GET_FULL,
00149
00150 UPDATE_HEADER,
00151 UPDATE_SIZE,
00152 UPDATE_ALL,
00153
00154 TYPE_NEW,
00155 TYPE_EXIST
00156 };
00157
00158
00159
00160
00161
00162
00163 static void free_fdbe(filedb_entry **);
00164 static filedb_entry *_malloc_fdbe(char *, int);
00165 static int filedb_readtop(FILE *, filedb_top *);
00166 static int filedb_writetop(FILE *, filedb_top *);
00167 static int filedb_delfile(FILE *, long);
00168 static filedb_entry *filedb_findempty(FILE *, int);
00169 static int _filedb_updatefile(FILE *, long, filedb_entry *, int, char *, int);
00170 static int _filedb_movefile(FILE *, long, filedb_entry *, char *, int);
00171 static int _filedb_addfile(FILE *, filedb_entry *, char *, int);
00172 static filedb_entry *_filedb_getfile(FILE *, long, int, char *, int);
00173 static filedb_entry *_filedb_matchfile(FILE *, long, char *, char *, int);
00174 static filedb_entry *filedb_getentry(char *, char *);
00175
00176 #endif