Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifdef HAVE_CONFIG_H
00009 # include <config.h>
00010 #endif
00011
00012 #include "gwen_sar_fileheader_p.h"
00013
00014 #include <gwenhywfar/misc.h>
00015 #include <gwenhywfar/debug.h>
00016
00017
00018
00019
00020 GWEN_LIST_FUNCTIONS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader)
00021 GWEN_LIST2_FUNCTIONS(GWEN_SAR_FILEHEADER, GWEN_SarFileHeader)
00022
00023
00024 GWEN_SAR_FILEHEADER_FTYPE GWEN_SarFileHeader_FType_fromString(const char *p_s) {
00025 if (p_s && *p_s) {
00026 if (strcasecmp(p_s, "none") == 0)
00027 return GWEN_SarFileHeader_FType_None;
00028 else if (strcasecmp(p_s, "file") == 0)
00029 return GWEN_SarFileHeader_FType_File;
00030 else if (strcasecmp(p_s, "dir") == 0)
00031 return GWEN_SarFileHeader_FType_Dir;
00032 else if (strcasecmp(p_s, "symLink") == 0)
00033 return GWEN_SarFileHeader_FType_SymLink;
00034 }
00035 return GWEN_SarFileHeader_FType_Unknown;
00036 }
00037
00038 GWEN_SAR_FILEHEADER_STATUS GWEN_SarFileHeader_Status_fromString(const char *p_s) {
00039 if (p_s && *p_s) {
00040 if (strcasecmp(p_s, "active") == 0)
00041 return GWEN_SarFileHeader_Status_Active;
00042 else if (strcasecmp(p_s, "deleted") == 0)
00043 return GWEN_SarFileHeader_Status_Deleted;
00044 }
00045 return GWEN_SarFileHeader_Status_Unknown;
00046 }
00047
00048 const char *GWEN_SarFileHeader_FType_toString(GWEN_SAR_FILEHEADER_FTYPE p_i) {
00049 switch(p_i) {
00050 case GWEN_SarFileHeader_FType_None:
00051 return "none";
00052 case GWEN_SarFileHeader_FType_File:
00053 return "file";
00054 case GWEN_SarFileHeader_FType_Dir:
00055 return "dir";
00056 case GWEN_SarFileHeader_FType_SymLink:
00057 return "symLink";
00058 default:
00059 return "unknown";
00060 }
00061 }
00062
00063 const char *GWEN_SarFileHeader_Status_toString(GWEN_SAR_FILEHEADER_STATUS p_i) {
00064 switch(p_i) {
00065 case GWEN_SarFileHeader_Status_Active:
00066 return "active";
00067 case GWEN_SarFileHeader_Status_Deleted:
00068 return "deleted";
00069 default:
00070 return "unknown";
00071 }
00072 }
00073
00074 GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_new(void) {
00075 GWEN_SAR_FILEHEADER *p_struct;
00076
00077 GWEN_NEW_OBJECT(GWEN_SAR_FILEHEADER, p_struct)
00078 p_struct->_refCount = 1;
00079 GWEN_LIST_INIT(GWEN_SAR_FILEHEADER, p_struct)
00080
00081 p_struct->status = 0;
00082 p_struct->flags = 0;
00083 p_struct->path = NULL;
00084 p_struct->fileType = 0;
00085 p_struct->permissions = 0;
00086 p_struct->atime = NULL;
00087 p_struct->mtime = NULL;
00088 p_struct->ctime = NULL;
00089 p_struct->fileSize = 0;
00090 p_struct->headerStartPos = 0;
00091 p_struct->headerSize = 0;
00092 p_struct->dataPos = 0;
00093 p_struct->dataSize = 0;
00094 p_struct->hashPos = 0;
00095
00096 return p_struct;
00097 }
00098
00099 void GWEN_SarFileHeader_free(GWEN_SAR_FILEHEADER *p_struct) {
00100 if (p_struct) {
00101 assert(p_struct->_refCount);
00102 if (p_struct->_refCount == 1) {
00103 GWEN_LIST_FINI(GWEN_SAR_FILEHEADER, p_struct)
00104
00105 free(p_struct->path);
00106 GWEN_Time_free(p_struct->atime);
00107 GWEN_Time_free(p_struct->mtime);
00108 GWEN_Time_free(p_struct->ctime);
00109 p_struct->_refCount = 0;
00110 GWEN_FREE_OBJECT(p_struct);
00111 } else
00112 p_struct->_refCount--;
00113 }
00114 }
00115
00116 void GWEN_SarFileHeader_Attach(GWEN_SAR_FILEHEADER *p_struct) {
00117 assert(p_struct);
00118 assert(p_struct->_refCount);
00119 p_struct->_refCount++;
00120 }
00121
00122 GWEN_SAR_FILEHEADER *GWEN_SarFileHeader_dup(const GWEN_SAR_FILEHEADER *p_src) {
00123 GWEN_SAR_FILEHEADER *p_struct;
00124
00125 assert(p_src);
00126 p_struct = GWEN_SarFileHeader_new();
00127
00128 p_struct->status = p_src->status;
00129
00130
00131 p_struct->flags = p_src->flags;
00132
00133
00134 if (p_struct->path) {
00135 free(p_struct->path);
00136 p_struct->path = NULL;
00137 }
00138 if (p_src->path) {
00139 p_struct->path = strdup(p_src->path);
00140 }
00141
00142
00143 p_struct->fileType = p_src->fileType;
00144
00145
00146 p_struct->permissions = p_src->permissions;
00147
00148
00149 if (p_struct->atime) {
00150 GWEN_Time_free(p_struct->atime);
00151 p_struct->atime = NULL;
00152 }
00153 if (p_src->atime) {
00154 p_struct->atime = GWEN_Time_dup(p_src->atime);
00155 }
00156
00157
00158 if (p_struct->mtime) {
00159 GWEN_Time_free(p_struct->mtime);
00160 p_struct->mtime = NULL;
00161 }
00162 if (p_src->mtime) {
00163 p_struct->mtime = GWEN_Time_dup(p_src->mtime);
00164 }
00165
00166
00167 if (p_struct->ctime) {
00168 GWEN_Time_free(p_struct->ctime);
00169 p_struct->ctime = NULL;
00170 }
00171 if (p_src->ctime) {
00172 p_struct->ctime = GWEN_Time_dup(p_src->ctime);
00173 }
00174
00175
00176 p_struct->fileSize = p_src->fileSize;
00177
00178
00179 p_struct->headerStartPos = p_src->headerStartPos;
00180
00181
00182 p_struct->headerSize = p_src->headerSize;
00183
00184
00185 p_struct->dataPos = p_src->dataPos;
00186
00187
00188 p_struct->dataSize = p_src->dataSize;
00189
00190
00191 p_struct->hashPos = p_src->hashPos;
00192
00193 return p_struct;
00194 }
00195
00196 int GWEN_SarFileHeader_GetStatus(const GWEN_SAR_FILEHEADER *p_struct) {
00197 assert(p_struct);
00198 return p_struct->status;
00199 }
00200
00201 uint32_t GWEN_SarFileHeader_GetFlags(const GWEN_SAR_FILEHEADER *p_struct) {
00202 assert(p_struct);
00203 return p_struct->flags;
00204 }
00205
00206 const char *GWEN_SarFileHeader_GetPath(const GWEN_SAR_FILEHEADER *p_struct) {
00207 assert(p_struct);
00208 return p_struct->path;
00209 }
00210
00211 int GWEN_SarFileHeader_GetFileType(const GWEN_SAR_FILEHEADER *p_struct) {
00212 assert(p_struct);
00213 return p_struct->fileType;
00214 }
00215
00216 uint32_t GWEN_SarFileHeader_GetPermissions(const GWEN_SAR_FILEHEADER *p_struct) {
00217 assert(p_struct);
00218 return p_struct->permissions;
00219 }
00220
00221 const GWEN_TIME *GWEN_SarFileHeader_GetAtime(const GWEN_SAR_FILEHEADER *p_struct) {
00222 assert(p_struct);
00223 return p_struct->atime;
00224 }
00225
00226 const GWEN_TIME *GWEN_SarFileHeader_GetMtime(const GWEN_SAR_FILEHEADER *p_struct) {
00227 assert(p_struct);
00228 return p_struct->mtime;
00229 }
00230
00231 const GWEN_TIME *GWEN_SarFileHeader_GetCtime(const GWEN_SAR_FILEHEADER *p_struct) {
00232 assert(p_struct);
00233 return p_struct->ctime;
00234 }
00235
00236 uint64_t GWEN_SarFileHeader_GetFileSize(const GWEN_SAR_FILEHEADER *p_struct) {
00237 assert(p_struct);
00238 return p_struct->fileSize;
00239 }
00240
00241 uint64_t GWEN_SarFileHeader_GetHeaderStartPos(const GWEN_SAR_FILEHEADER *p_struct) {
00242 assert(p_struct);
00243 return p_struct->headerStartPos;
00244 }
00245
00246 uint64_t GWEN_SarFileHeader_GetHeaderSize(const GWEN_SAR_FILEHEADER *p_struct) {
00247 assert(p_struct);
00248 return p_struct->headerSize;
00249 }
00250
00251 uint64_t GWEN_SarFileHeader_GetDataPos(const GWEN_SAR_FILEHEADER *p_struct) {
00252 assert(p_struct);
00253 return p_struct->dataPos;
00254 }
00255
00256 uint64_t GWEN_SarFileHeader_GetDataSize(const GWEN_SAR_FILEHEADER *p_struct) {
00257 assert(p_struct);
00258 return p_struct->dataSize;
00259 }
00260
00261 uint64_t GWEN_SarFileHeader_GetHashPos(const GWEN_SAR_FILEHEADER *p_struct) {
00262 assert(p_struct);
00263 return p_struct->hashPos;
00264 }
00265
00266 void GWEN_SarFileHeader_SetStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) {
00267 assert(p_struct);
00268 p_struct->status = p_src;
00269 }
00270
00271 void GWEN_SarFileHeader_AddStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) {
00272 assert(p_struct);
00273 p_struct->status |= p_src;
00274 }
00275
00276 void GWEN_SarFileHeader_SubStatus(GWEN_SAR_FILEHEADER *p_struct, int p_src) {
00277 assert(p_struct);
00278 p_struct->status &= ~p_src;
00279 }
00280
00281 void GWEN_SarFileHeader_SetFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00282 assert(p_struct);
00283 p_struct->flags = p_src;
00284 }
00285
00286 void GWEN_SarFileHeader_AddFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00287 assert(p_struct);
00288 p_struct->flags |= p_src;
00289 }
00290
00291 void GWEN_SarFileHeader_SubFlags(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00292 assert(p_struct);
00293 p_struct->flags &= ~p_src;
00294 }
00295
00296 void GWEN_SarFileHeader_SetPath(GWEN_SAR_FILEHEADER *p_struct, const char *p_src) {
00297 assert(p_struct);
00298 if (p_struct->path) {
00299 free(p_struct->path);
00300 }
00301 if (p_src) {
00302 p_struct->path = strdup(p_src);
00303 } else {
00304 p_struct->path = NULL;
00305 }
00306 }
00307
00308 void GWEN_SarFileHeader_SetFileType(GWEN_SAR_FILEHEADER *p_struct, int p_src) {
00309 assert(p_struct);
00310 p_struct->fileType = p_src;
00311 }
00312
00313 void GWEN_SarFileHeader_SetPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00314 assert(p_struct);
00315 p_struct->permissions = p_src;
00316 }
00317
00318 void GWEN_SarFileHeader_AddPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00319 assert(p_struct);
00320 p_struct->permissions |= p_src;
00321 }
00322
00323 void GWEN_SarFileHeader_SubPermissions(GWEN_SAR_FILEHEADER *p_struct, uint32_t p_src) {
00324 assert(p_struct);
00325 p_struct->permissions &= ~p_src;
00326 }
00327
00328 void GWEN_SarFileHeader_SetAtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) {
00329 assert(p_struct);
00330 if (p_struct->atime) {
00331 GWEN_Time_free(p_struct->atime);
00332 }
00333 p_struct->atime = p_src;
00334 }
00335
00336 void GWEN_SarFileHeader_SetMtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) {
00337 assert(p_struct);
00338 if (p_struct->mtime) {
00339 GWEN_Time_free(p_struct->mtime);
00340 }
00341 p_struct->mtime = p_src;
00342 }
00343
00344 void GWEN_SarFileHeader_SetCtime(GWEN_SAR_FILEHEADER *p_struct, GWEN_TIME *p_src) {
00345 assert(p_struct);
00346 if (p_struct->ctime) {
00347 GWEN_Time_free(p_struct->ctime);
00348 }
00349 p_struct->ctime = p_src;
00350 }
00351
00352 void GWEN_SarFileHeader_SetFileSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00353 assert(p_struct);
00354 p_struct->fileSize = p_src;
00355 }
00356
00357 void GWEN_SarFileHeader_SetHeaderStartPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00358 assert(p_struct);
00359 p_struct->headerStartPos = p_src;
00360 }
00361
00362 void GWEN_SarFileHeader_SetHeaderSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00363 assert(p_struct);
00364 p_struct->headerSize = p_src;
00365 }
00366
00367 void GWEN_SarFileHeader_SetDataPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00368 assert(p_struct);
00369 p_struct->dataPos = p_src;
00370 }
00371
00372 void GWEN_SarFileHeader_SetDataSize(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00373 assert(p_struct);
00374 p_struct->dataSize = p_src;
00375 }
00376
00377 void GWEN_SarFileHeader_SetHashPos(GWEN_SAR_FILEHEADER *p_struct, uint64_t p_src) {
00378 assert(p_struct);
00379 p_struct->hashPos = p_src;
00380 }
00381
00382 GWEN_SAR_FILEHEADER_LIST *GWEN_SarFileHeader_List_dup(const GWEN_SAR_FILEHEADER_LIST *p_src) {
00383 GWEN_SAR_FILEHEADER_LIST *p_dest;
00384 GWEN_SAR_FILEHEADER *p_elem;
00385
00386 assert(p_src);
00387 p_dest = GWEN_SarFileHeader_List_new();
00388 p_elem = GWEN_SarFileHeader_List_First(p_src);
00389 while(p_elem) {
00390 GWEN_SAR_FILEHEADER *p_cpy;
00391
00392 p_cpy = GWEN_SarFileHeader_dup(p_elem);
00393 GWEN_SarFileHeader_List_Add(p_cpy, p_dest);
00394 p_elem = GWEN_SarFileHeader_List_Next(p_elem);
00395 }
00396
00397 return p_dest;
00398 }
00399
00400
00401
00402