📄 stafziputilcommon.cpp
字号:
/*****************************************************************************/
/* 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 + -