⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stafziputilcommon.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************/
/* Software Testing Automation Framework (STAF)                              */
/* (C) Copyright IBM Corp. 2004                                              */
/*                                                                           */
/* This software is licensed under the Common Public License (CPL) V1.0.     */
/*****************************************************************************/

#include "STAF.h"
#include "STAFString.h"
#include "STAFTrace.h"

#include "zlib.h"

#include <time.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <vector>
#include <map>
#include <errno.h>     // For ENOENT

#include "STAFZip.h"
#include "STAFZipFileAttribute.h"
#include "STAFZipCentralDirExtension.h"
#include "STAFZipUtil.h"


// constructor
STAFZipUtil::STAFZipUtil(STAFHandlePtr h)
{
    handle = h;
}

// constructor
STAFZipUtil::STAFZipUtil()
{
}

// convert STAFString to C string
void STAFZipUtil::convertSTAFString(STAFString stafStr, const char* cStr)
{
    unsigned int length = 0;
    const char *temp;
    char *p = (char*)cStr;

    temp = stafStr.buffer(&length);

    memcpy((void*)cStr, (void*)temp, length);

    p[length] = '\0';
}


// copy STAFString buffer to string buffer
void STAFZipUtil::convertSTAFStringBuffer(STAFStringBuffer* stafStrBuf, const char* cStr)
{
    unsigned int length = 0;
    const char *temp;
    char *p = (char*)cStr;

    length = stafStrBuf->length();

    temp = stafStrBuf->buffer();

    memcpy((void*)cStr, (void*)temp, length);

    p[length] = '\0';
}


// save nbByte of data to file
STAFRC_t STAFZipUtil::putValue (FILE *f, uLong x, int nbByte)
{
    unsigned char buf[4];
    int n;

/*    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::putValue_CP1")
                     + " x ["
                     + x
                     + "] nbByte ["
                     + nbByte
                     + "]");
*/

    for (n = 0; n < nbByte; n++)
    {
        buf[n] = (unsigned char)(x & 0xff);

        x >>= 8;
    }

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::putValue_CP2")
                     + "] buf ["
                     + (char*)buf
                     + "]");
*/

    if (fwrite(buf, nbByte, 1, f) != 1)
    {
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::putValue_CP3"));

        return kSTAFFileWriteError;
    }
    else
    {
        return kSTAFOk;
    }

}


// get a byte from file and put it into *pi
STAFRC_t STAFZipUtil::getByte(FILE *fin, int *pi)
{
    unsigned char c;


    int err = fread(&c, 1, 1, fin);

    if (err == 1)
    {
        *pi = (int)c;

/*
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getByte_CP1")
                     + " *pi ["
                     + *pi
                     + "]");
*/

        return kSTAFOk;
    }
    else
    {
/*
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getByte_CP2")
                     + " err ["
                     + err
                     + "]");
*/

        if (ferror(fin))
        {
            STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getByte_CP3")
                     + " err ["
                     + err
                     + "]");

            return kSTAFFileReadError;
        }
        else
        {
/*
            STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getByte_CP4")
                     + " err ["
                     + err
                     + "]");
*/

            return kSTAFOk;
        }
    }
}


// get 2 bytes data from file and put it into *pX
STAFRC_t STAFZipUtil::getShort (FILE *fin, uLong *pX)
{
    uLong x ;
    int i;
    STAFRC_t rc;

    rc = getByte(fin, &i);

    x = (uLong)i;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getShort_CP1")
                     + " rc ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/

    if (rc == kSTAFOk)
    {
        if ((rc = getByte(fin, &i)) == kSTAFOk)
        {
            x += ((uLong)i) << 8;
        }
    }

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getShort_CP2")
                     + " err ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/

    if (rc == kSTAFOk)
    {
        *pX = x;
    }
    else
    {
        *pX = 0;
    }

    return rc;
}


// get 4 bytes data from file and put it into *pX
STAFRC_t STAFZipUtil::getLong (FILE *fin, uLong *pX)
{
    uLong x ;
    int i;
    STAFRC_t rc;

    rc = getByte(fin, &i);
    x = (uLong)i;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getLong_CP1")
                     + " rc ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/

    if (rc == kSTAFOk)
    {
        rc = getByte(fin, &i);
    }

    x += ((uLong)i) << 8;


/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getLong_CP2")
                     + " rc ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/


    if (rc == kSTAFOk)
    {
        rc = getByte(fin, &i);
    }

    x += ((uLong)i) << 16;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getLong_CP3")
                     + " rc ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/

    if (rc == kSTAFOk)
    {
        rc = getByte(fin, &i);
    }

    x += ((uLong)i) << 24;


/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::getLong_CP4")
                     + " rc ["
                     + rc
                     + "] x ["
                     + x
                     + "] i ["
                     + i
                     + "]");
*/

    if (rc == kSTAFOk)
    {
        *pX = x;
    }
    else
    {
        *pX = 0;
    }

    return rc;
}


// copy source file to dest file
STAFRC_t STAFZipUtil::copyFile(char *source, const char *dest)
{

    FILE *sf, *df;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::copyFile_CP1")
                     + " source ["
                     + source
                     + "] dest ["
                     + dest
                     + "]");
*/

    if ((sf = fopen(source, "rb")) == NULL)
    {
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::copyFile_CP2"));

        return kSTAFFileOpenError;
    }

    if ((df = fopen(dest, "wb")) == NULL)
    {
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::copyFile_CP3"));

        return kSTAFFileWriteError;
    }


    int c;

    while ((c = fgetc(sf))!= EOF)
    {
        fputc(c, df);
    }

    fclose(sf);

    fclose(df);

    return kSTAFOk;

}


// compare two strings
int STAFZipUtil::myStrCmp(const char *fileName1, const char *fileName2)
{

    char f1[MAXFILENAME] = "";
    char f2[MAXFILENAME] = "";
    char *p, *p1, *p2;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::myStrCmp_CP1")
                     + " fileName1 ["
                     + fileName1
                     + "] fileName2 ["
                     + fileName2
                     + "]");
*/

    strcpy(f1, fileName1);
    strcpy(f2, fileName2);

    p = f1;

    while (*p != '\0')
    {
        if (*p == '\\')
        {
            *p = '/';
        }

        p++;
    }

    p = f2;

    while (*p != '\0')
    {
        if (*p == '\\')
        {
            *p = '/';
        }

        p++;
    }

    int iCaseSensitivity = CASESENSITIVITYDEFAULTVALUE;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::myStrCmp_CP2")
                     + " f1 ["
                     + f1
                     + "] f2 ["
                     + f2
                     + "] iCaseSensitivity ["
                     + iCaseSensitivity
                     + "]");
*/

    // if case sensitive
    if (iCaseSensitivity == 1)
    {
        return strcmp(f1, f2);
    }


    // if case insensitive
    p1 = f1;
    p2 = f2;

    for (;;)
    {
        char c1 = *(p1++);
        char c2 = *(p2++);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -