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

📄 stafziputilcommon.cpp

📁 Software Testing Automation Framework (STAF)的开发代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

        if ((c1 >= 'a') && (c1 <= 'z'))
        {
            c1 -= 0x20;
        }

        if ((c2 >= 'a') && (c2 <= 'z'))
        {
            c2 -= 0x20;
        }

        if (c1 == '\0')
        {
            return ((c2 == '\0') ? 0 : -1);
        }

        if (c2 == '\0')
        {
            return 1;
        }

        if (c1 < c2)
        {
            return -1;
        }

        if (c1 > c2)
        {
            return 1;
        }
    }
}


// get file time of a given file name
uLong STAFZipUtil::fileTime(char *f)
{
    struct stat s;        /* results of stat() */
    struct tm* filedate;
    time_t tm_t=0;


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


    if (strcmp(f, "-") != 0)
    {
        char name[MAXFILENAME + 1];
        int len = strlen(f);

        strcpy(name, f);

        if (name[len - 1] == '/')
        {
            name[len - 1] = '\0';
        }

        /* not all systems allow stat'ing a file with / appended */
        if (stat(name,&s) == 0)
        {
            tm_t = s.st_mtime;
        }
    }

    filedate = localtime(&tm_t);

    uLong year = (uLong)filedate->tm_year;

    if (year > 1980)
    {
        year -= 1980;
    }
    else if (year > 80)
    {
        year -= 80;
    }


    return
      (uLong) (((filedate->tm_mday) + (32 * (filedate->tm_mon + 1))
                + (512 * year)) << 16)
              | ((filedate->tm_sec / 2) + (32 * filedate->tm_min)
                + (2048 * (uLong)filedate->tm_hour));

}


// convert file time from dos long to tm structure
void STAFZipUtil::fileTime(uLong dosdate, struct tm *filedate)
{
    uLong date;

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

    date = (uLong)(dosdate >> 16);

    filedate->tm_mday = (uInt)(date & 0x1f) ;
    filedate->tm_mon = (uInt)(((date & 0x1E0) / 0x20) - 1) ;
    filedate->tm_year = (uInt)(((date & 0x0FE00) / 0x0200) + 1980) ;

    filedate->tm_hour = (uInt)((dosdate & 0xF800) / 0x800);
    filedate->tm_min = (uInt)((dosdate & 0x7E0) / 0x20) ;
    filedate->tm_sec = (uInt)(2 * (dosdate & 0x1f)) ;

}


// log util
STAFResultPtr STAFZipUtil::log(const char *level, const char *message)
{
    return handle->submit("LOCAL", "LOG",
                          STAFString("LOG GLOBAL LOGNAME zip LEVEL ")
                            + STAFString(level)
                            + STAFString(" MESSAGE \"")
                            + STAFHandle::wrapData(message)
                            + STAFString("\" NORESOLVEMESSAGE"));
}


// create a directory
STAFRC_t STAFZipUtil::makeDir (char *newdir)
{
    char *buffer ;
    char *p;
    int  len = strlen(newdir);


/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir1_CP1")
                     + " newdir ["
                     + newdir
                     + "] len ["
                     + len
                     + "]");
*/

    if (len <= 0)
    {
        return kSTAFInvalidValue;
    }

    if ((buffer = (char*)calloc(len+1, 1)) == NULL)
    {
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir1_CP2"));

        return kZIPNotEnoughMemory;
    }

    strcpy(buffer, newdir);

    if (buffer[len-1] == '/' || buffer[len-1] == '\\')
    {
        buffer[len-1] = '\0';
    }


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

    // try creating the directory
    if (myMkDir(buffer) == kSTAFOk)
    {
        free(buffer);

        return kSTAFOk;
    }


    // try creating parent directories
    p = buffer+1;
    while (1)
    {
        char hold;

        while(*p && *p != '\\' && *p != '/')
        {
          p++;
        }

        hold = *p;

        *p = 0;


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

        // try creating top parent directory
        if ((myMkDir(buffer) != 0) && (errno == ENOENT))
        {
            STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir1_CP5"));

            free(buffer);

            return kZIPErrorCreatingDir;
        }

        if (hold == 0)
        {
          break;
        }

        *p++ = hold;
    }

    free(buffer);

    return kSTAFOk;
}


// create dir and restore permission
STAFRC_t STAFZipUtil::makeDir (char *newdir, void *cde, const char *outputdir)
{
    char *buffer ;
    char *p;
    int  len = strlen(newdir);

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir2_CP1")
                     + " newdir ["
                     + newdir
                     + "] len ["
                     + len
                     + "] outputdir ["
                     + outputdir
                     + "]");
*/

    if (len <= 0)
    {
        return kSTAFInvalidValue;
    }

    if ((buffer = (char*)calloc(len + 1, 1)) == NULL)
    {
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir2_CP2"));

        return kZIPNotEnoughMemory;
    }

    strcpy(buffer, newdir);

    if (buffer[len - 1] == '/' || buffer[len - 1] == '\\')
    {
        buffer[len - 1] = '\0';
    }

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir2_CP3")
                     + " buffer ["
                     + buffer
                     + "] len ["
                     + len
                     + "] outputdir ["
                     + outputdir
                     + "]");
*/

    // try creating the directory
    if (myMkDir(buffer, cde, outputdir) == kSTAFOk)
    {
        free(buffer);

        return kSTAFOk;
    }

    // try creating parent directory
    p = buffer+1;
    while (1)
    {
        char hold;

        while(*p && *p != '\\' && *p != '/')
        {
          p++;
        }

        hold = *p;

        *p = 0;


/*
        STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir2_CP4")
                     + " buffer ["
                     + buffer
                     + "] len ["
                     + len
                     + "] outputdir ["
                     + outputdir
                     + "]");
*/

        // try creating top parent directory
        if ((myMkDir(buffer, cde, outputdir) != kSTAFOk) && (errno == ENOENT))
        {
            STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::makeDir2_CP5"));

            free(buffer);

            return kZIPErrorCreatingDir;
        }

        if (hold == 0)
        {
          break;
        }

        *p++ = hold;
    }

    free(buffer);

    return kSTAFOk;
}


// check to see if file exists
int STAFZipUtil::checkFileExist(const char *filename)
{
/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::checkFileExist_CP1")
                     + " filename ["
                     + filename
                     + "]");
*/

    FILE* fTestExist;
    int ret;

    fTestExist = fopen(filename, "rb");

    if (fTestExist == NULL)
    {
        ret = 0;
    }
    else
    {
        fclose(fTestExist);

        ret = 1;
    }

    return ret;
}


// calculate file name in zip archive by removing the prefix
char* STAFZipUtil::calculateFileNameInZip(const char *filename,
                                          int prefix_length)
{
    char *filename_in_zip;

/*
    STAFTrace::trace(kSTAFTraceServiceResult,
                     STAFString("STAFZipUtil::calculateFileNameInZip_CP1")
                     + " filename ["
                     + filename
                     + "] prefix_length ["
                     + prefix_length
                     + "]");
*/

    if (prefix_length != 0)
    {
        filename_in_zip = (char*)(filename + prefix_length);
        if (*filename_in_zip == '/' || *filename_in_zip == '\\')
        {
            filename_in_zip++;
        }
    }
    else
    {
        filename_in_zip = (char*)strchr(filename, '/');
        if (filename_in_zip == NULL)
        {
            filename_in_zip = (char*)strchr(filename, '\\');
            if (filename_in_zip == NULL)
            {
                filename_in_zip = (char*)filename;
            }
            else
            {
                filename_in_zip++;
            }
        }
        else
        {
            filename_in_zip++;
        }
    }

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

    return filename_in_zip;
}



// destructor
STAFZipUtil::~STAFZipUtil()
{
    /* Do Nothing */
}



⌨️ 快捷键说明

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