2018-07-21 12:41:01 +02:00
|
|
|
#include "ph7int.h"
|
|
|
|
|
|
|
|
PH7_PRIVATE sxu32 SyStrlen(const char *zSrc) {
|
|
|
|
register const char *zIn = zSrc;
|
|
|
|
#if defined(UNTRUST)
|
|
|
|
if(zIn == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
for(;;) {
|
|
|
|
if(!zIn[0]) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
zIn++;
|
|
|
|
}
|
|
|
|
return (sxu32)(zIn - zSrc);
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyByteFind(const char *zStr, sxu32 nLen, sxi32 c, sxu32 *pPos) {
|
|
|
|
const char *zIn = zStr;
|
|
|
|
const char *zEnd;
|
|
|
|
zEnd = &zIn[nLen];
|
|
|
|
for(;;) {
|
|
|
|
if(zIn >= zEnd) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(zIn[0] == c) {
|
|
|
|
if(pPos) {
|
|
|
|
*pPos = (sxu32)(zIn - zStr);
|
|
|
|
}
|
|
|
|
return SXRET_OK;
|
|
|
|
}
|
|
|
|
zIn++;
|
|
|
|
}
|
|
|
|
return SXERR_NOTFOUND;
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyByteFind2(const char *zStr, sxu32 nLen, sxi32 c, sxu32 *pPos) {
|
|
|
|
const char *zIn = zStr;
|
|
|
|
const char *zEnd;
|
|
|
|
zEnd = &zIn[nLen - 1];
|
|
|
|
for(;;) {
|
|
|
|
if(zEnd < zIn) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if(zEnd[0] == c) {
|
|
|
|
if(pPos) {
|
|
|
|
*pPos = (sxu32)(zEnd - zIn);
|
|
|
|
}
|
|
|
|
return SXRET_OK;
|
|
|
|
}
|
|
|
|
zEnd--;
|
|
|
|
}
|
|
|
|
return SXERR_NOTFOUND;
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyByteListFind(const char *zSrc, sxu32 nLen, const char *zList, sxu32 *pFirstPos) {
|
|
|
|
const char *zIn = zSrc;
|
|
|
|
const char *zPtr;
|
|
|
|
const char *zEnd;
|
|
|
|
sxi32 c;
|
|
|
|
zEnd = &zSrc[nLen];
|
|
|
|
for(;;) {
|
|
|
|
if(zIn >= zEnd) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
for(zPtr = zList ; (c = zPtr[0]) != 0 ; zPtr++) {
|
|
|
|
if(zIn[0] == c) {
|
|
|
|
if(pFirstPos) {
|
|
|
|
*pFirstPos = (sxu32)(zIn - zSrc);
|
|
|
|
}
|
|
|
|
return SXRET_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
zIn++;
|
|
|
|
}
|
|
|
|
return SXERR_NOTFOUND;
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyStrncmp(const char *zLeft, const char *zRight, sxu32 nLen) {
|
|
|
|
const unsigned char *zP = (const unsigned char *)zLeft;
|
|
|
|
const unsigned char *zQ = (const unsigned char *)zRight;
|
|
|
|
if(SX_EMPTY_STR(zP) || SX_EMPTY_STR(zQ)) {
|
|
|
|
return SX_EMPTY_STR(zP) ? (SX_EMPTY_STR(zQ) ? 0 : -1) : 1;
|
|
|
|
}
|
|
|
|
if(nLen <= 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
for(;;) {
|
|
|
|
if(nLen <= 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if(zP[0] == 0 || zQ[0] == 0 || zP[0] != zQ[0]) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
zP++;
|
|
|
|
zQ++;
|
|
|
|
nLen--;
|
|
|
|
}
|
|
|
|
return (sxi32)(zP[0] - zQ[0]);
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyStrnicmp(const char *zLeft, const char *zRight, sxu32 SLen) {
|
|
|
|
register unsigned char *p = (unsigned char *)zLeft;
|
|
|
|
register unsigned char *q = (unsigned char *)zRight;
|
|
|
|
if(SX_EMPTY_STR(p) || SX_EMPTY_STR(q)) {
|
|
|
|
return SX_EMPTY_STR(p) ? SX_EMPTY_STR(q) ? 0 : -1 : 1;
|
|
|
|
}
|
|
|
|
for(;;) {
|
|
|
|
if(!SLen) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if(!*p || !*q || SyCharToLower(*p) != SyCharToLower(*q)) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
p++;
|
|
|
|
q++;
|
|
|
|
--SLen;
|
|
|
|
}
|
|
|
|
return (sxi32)(SyCharToLower(p[0]) - SyCharToLower(q[0]));
|
|
|
|
}
|
|
|
|
PH7_PRIVATE sxi32 SyStrnmicmp(const void *pLeft, const void *pRight, sxu32 SLen) {
|
|
|
|
return SyStrnicmp((const char *)pLeft, (const char *)pRight, SLen);
|
|
|
|
}
|
|
|
|
sxu32 Systrcpy(char *zDest, sxu32 nDestLen, const char *zSrc, sxu32 nLen) {
|
|
|
|
unsigned char *zBuf = (unsigned char *)zDest;
|
|
|
|
unsigned char *zIn = (unsigned char *)zSrc;
|
|
|
|
unsigned char *zEnd;
|
|
|
|
#if defined(UNTRUST)
|
|
|
|
if(zSrc == (const char *)zDest) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
if(nLen <= 0) {
|
|
|
|
nLen = SyStrlen(zSrc);
|
|
|
|
}
|
|
|
|
zEnd = &zBuf[nDestLen - 1]; /* reserve a room for the null terminator */
|
|
|
|
for(;;) {
|
|
|
|
if(zBuf >= zEnd || nLen == 0) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
zBuf[0] = zIn[0];
|
|
|
|
zIn++;
|
|
|
|
zBuf++;
|
|
|
|
nLen--;
|
|
|
|
}
|
|
|
|
zBuf[0] = 0;
|
|
|
|
return (sxu32)(zBuf - (unsigned char *)zDest);
|
|
|
|
}
|
|
|
|
sxi32 SyAsciiToHex(sxi32 c) {
|
|
|
|
if(c >= 'a' && c <= 'f') {
|
|
|
|
c += 10 - 'a';
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
if(c >= '0' && c <= '9') {
|
|
|
|
c -= '0';
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
if(c >= 'A' && c <= 'F') {
|
|
|
|
c += 10 - 'A';
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
return 0;
|
2018-07-27 08:22:55 +02:00
|
|
|
}
|