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