예제 #1
0
파일: UniLogger.cpp 프로젝트: adri87/Q-A
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);        
    }
}
예제 #3
0
파일: FilePackIo.cpp 프로젝트: adri87/Q-A
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;
}
예제 #4
0
파일: UniLogger.cpp 프로젝트: adri87/Q-A
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;
}
예제 #5
0
파일: UniLogger.cpp 프로젝트: adri87/Q-A
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",&current_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;
}