int ComputeFileCrc(const char* filename,unsigned int*size_done,unsigned long*crc) { size_t size_buf=0x10000; char*buf; int ret=1; if (size_done != NULL) *size_done =0; if (crc != NULL) *crc=0; if (filename==NULL) return 0; if ((*filename)==0) return 0; buf = (char*)malloc(size_buf); ABSTRACTFILE*fin; int err; size_t size_read; fin = af_fopen_unlogged(filename,"rb"); if (fin==NULL) { err=ZIP_ERRNO; free(buf); return 0; } if ((crc != NULL) || (size_done != NULL)) { do { size_read = af_fread(buf,1,size_buf,fin); if (size_read < size_buf) if (af_feof(fin)==0) { /* printf("error in reading %s\n",filenameinzip); */ ret = 0; } if (size_read>0) { if (size_done != NULL) *size_done += (unsigned int)size_read; if (crc != NULL) *crc = crc32(*crc,buf,size_read); } } while ((size_read>0)); } af_fclose_unlogged(fin); free(buf); return ret; }
void InstallLogger::LoadParamFile(const char* parameter_filename) { init_done = 0; ABSTRACTFILE *af_fin = af_fopen_unlogged((parameter_filename != NULL) ? parameter_filename : "unitex_logging_parameters.txt","rb"); if (af_fin!=NULL) { size_t size_param=0; if (af_fseek(af_fin, 0, SEEK_END) == 0) { size_param = af_ftell(af_fin); af_fseek(af_fin, 0, SEEK_SET); } char* param=(char*)malloc(size_param+1); *(param+size_param)=0; if (af_fread(param,1,size_param,af_fin) == size_param) { int write_file_out=0; char*szPath = (char*)malloc(size_param+1); *szPath=0; sscanf(param,"%s\n%u",szPath,&write_file_out); write_file_out+=0; if ((*szPath) != 0) { ClearUniLoggerSpaceStruct(0); ule.szPathLog = szPath; ule.szNameLog = NULL; ule.store_file_out_content = write_file_out; if (AddActivityLogger(&ule) != 0) init_done = 1; else { ClearUniLoggerSpaceStruct(1); } } else free(szPath); } af_fclose(af_fin); free(param); } }
voidpf ZCALLBACK afopen_file_func ( voidpf opaque, const char* filename, int mode) { ABSTRACTFILE* file = NULL; const char* mode_fopen = NULL; (void)opaque; if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) mode_fopen = "rb"; else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) mode_fopen = "r+b"; else if (mode & ZLIB_FILEFUNC_MODE_CREATE) mode_fopen = "wb"; if ((filename!=NULL) && (mode_fopen != NULL)) file = af_fopen_unlogged(filename, mode_fopen); return file; }
int DumpFileToPack(struct ExecutionLogging* pEL,const char* filename,const char* prefix,unsigned int*size_done,unsigned long*crc) { char* name_to_store; size_t size_buf=0x10000; char*buf; *size_done =0; *crc=0; if (filename==NULL) return 0; if ((*filename)==0) return 0; buf = (char*)malloc(size_buf+ strlen(filename)+ ((prefix == NULL) ? 0 : strlen(prefix))+0x10); name_to_store = buf +size_buf; if (prefix != NULL) strcpy(name_to_store,prefix); else *name_to_store=0; const char* filenamecpy=GetFileNameRemovePrefixIfFound(filename,pEL->portion_ignore_pathname); filenamecpy = ExtractUsablePortionOfFileNameForPack(filenamecpy); strcat(name_to_store,filenamecpy); char* name_to_store_browse=name_to_store; while ((*name_to_store_browse)!=0) { if ((*name_to_store_browse)=='\\') (*name_to_store_browse)='/'; name_to_store_browse++; } zip_fileinfo zi; zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; zi.dosDate = 0; zi.internal_fa = 0; zi.external_fa = 0; zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = 9; zi.tmz_date.tm_year = 2009; zi.tmz_date.tm_mon--; ABSTRACTFILE*fin; int err; fin = af_fopen_unlogged(filename,"rb"); if (fin==NULL) { err=ZIP_ERRNO; free(buf); return 0; } err = zipOpenNewFileInZip(pEL->zf,name_to_store,&zi,NULL,0,NULL,0,NULL /* param_list */, 0,0); if (err==0) { size_t size_read; if (err == ZIP_OK) do { err = ZIP_OK; size_read = af_fread(buf,1,size_buf,fin); if (size_read < size_buf) if (af_feof(fin)==0) { /* printf("error in reading %s\n",filenameinzip); */ err = ZIP_ERRNO; } if (size_read>0) { err = zipWriteInFileInZip (pEL->zf,buf,(unsigned int)size_read); if (err<0) { /* printf("error in writing %s in the zipfile\n", filenameinzip);*/ } else { *size_done += (unsigned int)size_read; *crc = crc32(*crc,buf,size_read); } } } while ((err == ZIP_OK) && (size_read>0)); if (err<0) { err=ZIP_ERRNO; zipCloseFileInZip(pEL->zf); } else { err = zipCloseFileInZip(pEL->zf); /* if (err!=ZIP_OK) printf("error in closing %s in the zipfile\n", filenameinzip); */ } } af_fclose_unlogged(fin); free(buf); return 1; }
static struct ExecutionLogging* BuildAllocInitExecutionLoggingForIncrementedNumber(void* privateLoggerPtr) { struct ExecutionLogging* pEL = NULL; struct UniLoggerSpace * pULS=(struct UniLoggerSpace *)privateLoggerPtr; struct ActivityLoggerPrivateData* pALPD = (struct ActivityLoggerPrivateData*) pULS->privateUnloggerData; char szNumFileSuffix[256]; if (pULS -> auto_increment_logfilename == 0) { return NULL; } /* we take a mutex, to be sure two thread don't increment and use same number at same time */ SyncGetMutex(pALPD->pMutexLog); if (pULS->szNameLog == NULL) { unsigned int current_number = 0; const char* szNumFile = buildDupFileNameWithPrefixDir(pULS->szPathLog,"unitex_logging_parameters_count.txt"); /* here : we will need protect with a mutex */ ABSTRACTFILE *af_fin = af_fopen_unlogged(szNumFile,"rb"); if (af_fin!=NULL) { size_t size_num_file=0; if (af_fseek(af_fin, 0, SEEK_END) == 0) { size_num_file = af_ftell(af_fin); af_fseek(af_fin, 0, SEEK_SET); } char* buf_num_file=(char*)malloc(size_num_file+1); *(buf_num_file+size_num_file)=0; if (af_fread(buf_num_file,1,size_num_file,af_fin) == size_num_file) { sscanf(buf_num_file,"%u",¤t_number); } af_fclose(af_fin); free(buf_num_file); } current_number++; ABSTRACTFILE *af_fout = af_fopen_unlogged(szNumFile,"wb"); if (af_fout!=NULL) { char szNumOut[32]; sprintf(szNumOut,"%010u",current_number); af_fwrite(szNumOut,1,strlen(szNumOut),af_fout); af_fclose(af_fout); } free((void*)szNumFile); sprintf(szNumFileSuffix,"unitex_log_%08u.ulp",current_number); } else { sprintf(szNumFileSuffix,"%s",pULS->szNameLog); } SyncReleaseMutex(pALPD->pMutexLog); const char* szLogFileName = buildDupFileNameWithPrefixDir(pULS->szPathLog,szNumFileSuffix); pEL=BuildAllocInitExecutionLogging(privateLoggerPtr,szLogFileName); free((void*)szLogFileName); return pEL; }