/external/rk-pcba-test/et_cc_linux_arm.c
https://gitlab.com/brian0218/rk3188_r-box_android4.2.2_sdk · C · 2663 lines · 2188 code · 466 blank · 9 comment · 736 complexity · 0541fafa395e7b48d21510be0c6ba5d3 MD5 · raw file
- #define _FILE_OFFSET_BITS 64
- #define _LARGEFILE_SOURCE
- #define _LARGEFILE64_SOURCE
-
- #ifndef __USE_FILE_OFFSET64
- #define __USE_FILE_OFFSET64
- #endif
-
- #ifndef __USE_LARGEFILE64
- #define __USE_LARGEFILE64
- #endif
-
- #ifndef _LARGEFILE64_SOURCE
- #define _LARGEFILE64_SOURCE
- #endif
-
- //#define O_LARGEFILE 32768
-
- #include "et_cc_linux_arm.h"
-
- #include <stdio.h>
-
- /////////////////////////////////////////////////////////////////
-
- int et_fn_cmp_sz_default(const char* szLeft, const char* szRight){
- return et_strcmp(szLeft,szRight);
- }
-
- int et_fn_cmp_int_default(INT64 iLeft, INT64 iRight){
- if(iLeft > iRight){
- return 1;
- }else if(iLeft < iRight){
- return -1;
- }else{
- return 0;
- }
- }
-
- ////////////////////////////////////////////////////////////////
-
- char* et_sz_by_char(char *szDest, char chSrc){
- if(szDest == null){
- return null;
- }
- szDest[0] = chSrc;
- szDest[1] = 0;
- return szDest;
- }
-
- char et_sz_to_char(const char* szSrc){
- if(szSrc == null){
- return 0;
- }
- return szSrc[0];
- }
-
- char* et_sz_by_int(char* szDest, int iNum){
- return et_sz_by_long(szDest,iNum);
- }
-
- int et_sz_to_int(const char* szSrc){
- return (int)et_sz_to_long(szSrc);
- }
-
- char* et_sz_by_long(char* szDest, INT64 iNum){
- INT64 iTemp = 0;
- INT64 iQuotient = 0;
- INT64 iRemain = 0;
- int iSize = 0;
- bool bNegative = false;
-
- if(szDest == null){
- return null;
- }
-
- szDest[0] = 0;
-
- if(iNum == 0){
- szDest[0] = '0';
- szDest[1] = 0;
- return szDest;
- }
-
- iTemp = iNum;
-
- if(iTemp < 0){
- iTemp *= -1;
- bNegative = true;
- }
-
- while(iTemp > 0){
- iRemain = iTemp % 10;
- iQuotient = iTemp / 10;
- iTemp = iQuotient;
- szDest[iSize++] = et_char_by_int(iRemain);
- }
-
- if(bNegative){
- szDest[iSize++] = '-';
- }
-
- szDest[iSize++] = 0;
- et_sz_reverse(szDest);
-
- return szDest;
- }
-
- INT64 et_sz_to_long(const char* szSrc){
- INT64 iResult = 0;
- int iSize = 0;
- char chTemp = 0;
- INT64 iTemp = 0;
- bool bNegative = false;
- int i = 0;
- INT64 iZeroCount = 1;
-
-
-
- if(szSrc == null){
- return 0;
- }
-
- iSize = et_strlen(szSrc);
- if(iSize == 0 || iSize > 20){
- return 0;
- }
-
- for(i = iSize - 1; i >= 0; i--){
- chTemp = szSrc[i];
- if(i == 0 && (chTemp == '-' || chTemp == '+')){
- if(chTemp == '-'){
- bNegative = true;
- }
- break;
- }
-
- if(!et_char_is_num(chTemp)){
- return 0;
- }
-
- iTemp =et_char_to_int(chTemp);
- if(i == iSize - 1){
- iResult = iTemp;
- }else{
- iZeroCount *= 10;
- iTemp *= iZeroCount;
- iResult += iTemp;
- }
- }
-
-
- if(bNegative){
- iResult *= -1;
- }
-
- return iResult;
- }
-
- char* et_sz_by_float(char *szDest, double fNum, int iAfterPoint){
- INT64 iIntValue = 0;
- char szKeep[255] = "";
- char szKeep2[255] = "";
- int iSizeInt = 0;
- int iSizeDiff = 0;
- int iSizeStr = 0;
- bool bNegative = false;
- int i = 0;
-
- if(szDest == null){
- return null;
- }
-
- if(iAfterPoint <= 0){
- return et_sz_by_long(szDest,et_math_round(fNum));
- }
-
- if(fNum == 0){
- szDest[0] = '0';
- szDest[1] = '.';
- szDest[2] = 0;
- et_sz_add_chars(szDest,'0',iAfterPoint);
- return szDest;
- }
-
- if(fNum < 0){
- bNegative = true;
- fNum *= -1;
- }
-
- fNum *= et_math_power(10,iAfterPoint);
- iIntValue = et_math_round(fNum);
- if(iIntValue == 0){
- szDest[0] = '0';
- szDest[1] = 0;
- return szDest;
- }
-
- et_sz_by_long(szKeep,iIntValue);
-
- iSizeInt = et_strlen(szKeep);
- iSizeDiff = iAfterPoint - iSizeInt;
- if(iSizeDiff >= 0){
- szKeep2[0] = '0';
- szKeep2[1] = '.';
- iSizeStr = 2;
- for(i = 0; i < iSizeDiff; i++){
- szKeep2[iSizeStr++] = '0';
- }
- szKeep2[iSizeStr++] = 0;
- et_strcat(szKeep2,szKeep);
-
- }else{
- for(i = 0; i < iSizeInt; i++){
- if(iSizeInt - i == iAfterPoint){
- szKeep2[iSizeStr++] = '.';
- }
- szKeep2[iSizeStr++] = szKeep[i];
- }
- szKeep2[iSizeStr++] = 0;
- }
-
- if(bNegative){
- szDest[0] = '-';
- szDest[1] = 0;
- et_strcpy(szDest + 1,szKeep2);
- }else{
- et_strcpy(szDest,szKeep2);
- }
-
- return szDest;
- }
-
- int et_sz_find_char(const char *szSrc, char chFind, UINT iFromPos){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return -1;
- }
- iSrcLen = et_strlen(szSrc);
-
- if(iFromPos >= (UINT)iSrcLen){
- return -1;
- }
-
- for(i = iFromPos; i < iSrcLen; i++){
- if(szSrc[i] == chFind){
- return i;
- }
- }
-
- return -1;
- }
-
- int et_sz_find_not_char(const char* szSrc, char chFind, UINT iFromPos){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return -1;
- }
- iSrcLen = et_strlen(szSrc);
-
- if(iFromPos >= (UINT)iSrcLen){
- return -1;
- }
-
- for(i = iFromPos; i < iSrcLen; i++){
- if(szSrc[i] != chFind){
- return i;
- }
- }
-
- return -1;
- }
-
- int et_sz_find_from(const char *szSrc, const char *szFind, UINT iFromPos){
- int bMatch = 0;
- UINT iSrcLen = 0;
- UINT iFindLen = 0;
- UINT i = 0;
- int iTempPos = 0;
- UINT iMatchCount = 0;
-
- if(szSrc == null || szFind == null){
- return -1;
- }
-
- iSrcLen = et_strlen(szSrc);
- iFindLen = et_strlen(szFind);
-
- if(iSrcLen - iFromPos < iFindLen
- || iFromPos < 0
- || iFromPos >= iSrcLen
- || iFromPos < 0)
- {
- return -1;
- }
-
- for(i = iFromPos; i < iSrcLen; i++){
- if(!bMatch){
- if(szSrc[i] == szFind[0]){
- bMatch = 1;
- iMatchCount = 1;
- iTempPos = i;
- }else{
- continue;
- }
- }else{
- if(szSrc[i] == szFind[iMatchCount]){
- iMatchCount++;
- }else{
- bMatch = 0;
- iMatchCount = 0;
- }
- }
-
- if(iMatchCount == iFindLen){
- return iTempPos;
- }
- }
- return -1;
- }
-
- int et_sz_find(const char *szSrc, const char *szFind){
- return et_sz_find_from(szSrc,szFind,0);
- }
-
- int et_sz_find_reverse(const char* szSrc, const char* szFind){
- int iFromPos = 0;
- int bMatch = 0;
- int iSrcLen = 0;
- int iFindLen = 0;
- int i = 0;
- int iTempPos = 0;
- int iMatchCount = 0;
- iFromPos = iSrcLen - 1;
-
- if(szSrc == null || szFind == null){
- return 0;
- }
-
- iSrcLen = et_strlen(szSrc);
- iFindLen = et_strlen(szFind);
- iFromPos = iSrcLen - 1;
-
- if(iSrcLen < iFindLen){
- return -1;
- }
-
- for(i = iFromPos; i >= 0; i--){
- if(!bMatch){
- if(szSrc[i] == szFind[iFindLen - 1]){
- bMatch = 1;
- iMatchCount = 1;
- iTempPos = i;
- }else{
- continue;
- }
- }else{
- if(szSrc[i] == szFind[iFindLen - iMatchCount - 1]){
- iMatchCount++;
- }else{
- bMatch = 0;
- iMatchCount = 0;
- }
- }
-
- if(iMatchCount == iFindLen){
- return i;
- }
- }
- return -1;
- }
-
- int et_sz_find_safe(const char* szSrc, const char* szFind, UINT iLimit){
- UINT i = 0;
- bool bCheck = false;
- int iCheckPos = 0;
- char chTemp = 0;
-
- if(szSrc == null || szFind == null){
- return -1;
- }
-
- if(szSrc == null || szFind == null){
- return -1;
- }
-
- for(i = 0; i < iLimit; i++){
- chTemp = szSrc[i];
- if(bCheck){
- if(chTemp == szFind[iCheckPos + 1]){
- iCheckPos++;
- }else{
- bCheck = false;
- iCheckPos = 0;
- }
- }else{
- if(chTemp == szFind[0]){
- bCheck = true;
- iCheckPos = 0;
- }
- }
-
- if(bCheck && (UINT)(iCheckPos + 1) == et_strlen(szFind)){
- return i - iCheckPos;
- }
- }
- return -1;
- }
-
- int et_sz_is_end_with(const char* szSrc, const char* szFind){
- int iSrcLen = 0;
- int iFindLen = 0;
- int iStartPos = 0;
-
- if(szSrc == null){
- return false;
- }
-
- if(szSrc == szFind){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- iFindLen = et_strlen(szFind);
- if(iFindLen > iSrcLen){
- return false;
- }
-
- iStartPos = iSrcLen - iFindLen;
-
- if(et_sz_find_from(szSrc,szFind,iStartPos) >= 0){
- return true;
- }
-
- return false;
-
-
- }
- char* et_sz_repeat(char *szDest, const char* szSrc, int iCount ){
- int i = 0;
- int iLen = 0;
- int iResultLen = 0;
-
- if(szDest != null){
- szDest[0] = 0;
- }
- if(szSrc == null){
- return szDest;
- }
-
- iLen = et_strlen(szSrc);
- iResultLen = iLen * iCount;
- for(i = 0; i < iCount; i++){
- et_memcpy(szDest + (i * iLen),szSrc,iLen * sizeof(char));
- }
- szDest[iResultLen] = 0;
- return szDest;
- }
-
- char* et_sz_add_chars(char* szDest, char chAdd, UINT iAddCount){
- UINT i = 0;
- int iSrcLen = 0;
-
- if(szDest == null){
- return null;
- }
-
- if(iAddCount == 0){
- return szDest;
- }
-
- iSrcLen = et_strlen(szDest);
- for(i = 0; i < iAddCount; i++){
- szDest[iSrcLen + i] = chAdd;
- }
- szDest[iSrcLen + iAddCount] = 0;
-
- return szDest;
- }
-
- char* et_sz_reverse( char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
- char chTemp = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen <= 1){
- return szSrc;
- }
-
- for(i = 0; i < iSrcLen / 2; i++){
- chTemp = szSrc[i];
- szSrc[i] = szSrc[iSrcLen - i - 1];
- szSrc[iSrcLen - i - 1] = chTemp;
- }
-
- return szSrc;
- }
-
- char* et_sz_lower( char* szSrc ){
- char *pMove = null;
- if(szSrc == null){
- return null;
- }
- pMove = szSrc;
- while(*pMove != 0){
- *pMove = et_char_lower(*pMove);
- pMove++;
- }
- return szSrc;
- }
-
- char* et_sz_upper( char* szSrc ){
- char *pMove = null;
- if(szSrc == null){
- return null;
- }
- pMove = szSrc;
- while(*pMove != 0){
- *pMove = et_char_upper(*pMove);
- pMove++;
- }
- return szSrc;
- }
-
- bool et_sz_equal( const char* szLeft, const char* szRight ){
- if(szLeft == null && szRight == null){
- return true;
- }else if( szLeft == null || szRight == null ){
- return false;
- }
-
- if(et_strcmp(szLeft,szRight) != 0){
- return false;
- }
-
- return true;
- }
-
- bool et_sz_equal_no_case( const char* szLeft, const char* szRight ){
- int iLeftLen = 0;
- int iRightLen = 0;
- int i = 0;
-
- if(szLeft == null && szRight == null){
- return true;
- }else if( szLeft == null || szRight == null ){
- return false;
- }
-
- iLeftLen = et_strlen(szLeft);
- iRightLen = et_strlen(szRight);
- if(iLeftLen != iRightLen){
- return false;
- }
-
- for(i = 0; i < iLeftLen; i++){
- if( !et_char_equal_no_case( szLeft[i], szRight[i])){
- return false;
- }
- }
-
- return true;
- }
-
- int et_sz_count_char( const char* szSrc, char chFind ){
- int iRetCount = 0;
-
- if(szSrc == null){
- return 0;
- }
-
- while(*szSrc != 0){
- if(*szSrc == chFind){
- iRetCount++;
- }
- szSrc++;
- }
- return iRetCount;
- }
-
- int et_sz_count_sz( const char* szSrc, const char* szFind ){
- UINT iRetCount = 0;
- bool bMatch = 0;
- int iFromPos = 0;
- UINT iSrcLen = 0;
- UINT iFindLen = 0;
- UINT i = 0;
- UINT iMatchCharCount = 0;
-
- if(szSrc == null || szFind == null){
- return 0;
- }
-
- iSrcLen = et_strlen(szSrc);
- iFindLen = et_strlen(szFind);
-
- for(i = iFromPos; i < iSrcLen; i++){
- if(!bMatch){
- if(szSrc[i] == szFind[0]){
- bMatch = true;
- iMatchCharCount = 1;
- }else{
- continue;
- }
- }else{
- if(szSrc[i] == szFind[iMatchCharCount]){
- iMatchCharCount++;
- }else{
- bMatch = false;
- iMatchCharCount = 0;
- }
- }
-
- if(iMatchCharCount == iFindLen){
- iRetCount++;
- iMatchCharCount = 0;
- bMatch = false;
- }
- }
- return iRetCount;
- }
-
- char* et_sz_prefix(char* szSrc, const char* szPrefix ){
- int iSrcLen = 0;
- int iPreLen = 0;
- int iResultLen = 0;
-
- if(szSrc == null){
- return null;
- }
-
- if(szPrefix == null){
- return szSrc;
- }
-
- iSrcLen = et_strlen(szSrc);
- iPreLen = et_strlen(szPrefix);
- iResultLen = iSrcLen + iPreLen;
-
- if(iPreLen == 0){
- return szSrc;
- }
-
- et_memmove(szSrc + iPreLen,szSrc,iSrcLen * sizeof(char));
- et_memcpy(szSrc,szPrefix,iPreLen * sizeof(char));
- szSrc[iResultLen] = 0;
- return szSrc;
- }
-
- char* et_sz_pad_left(char* szSrc, char chPad, int iTotalLen){
- int iSrcLen = 0;
- int iPadLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- iPadLen = iTotalLen - iSrcLen;
-
- if(iSrcLen >= iTotalLen){
- return szSrc;
- }
-
- et_memmove(szSrc + iPadLen,szSrc,iSrcLen * sizeof(char));
-
- for(i = 0; i < iPadLen; i++){
- szSrc[i] = chPad;
- }
-
- szSrc[iTotalLen] = 0;
-
- return szSrc;
- }
-
- char* et_sz_pad_right( char* szSrc, char chPad, int iTotalLen ){
- int iSrcLen = 0;
- int iPadLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- iPadLen = iTotalLen - iSrcLen;
-
- if(iSrcLen >= iTotalLen){
- return szSrc;
- }
-
- for(i = 0; i < iPadLen; i++){
- szSrc[i + iSrcLen] = chPad;
- }
-
- szSrc[iTotalLen] = 0;
- return szSrc;
- }
-
- char* et_sz_substr(char *szDest, const char *szSrc, UINT iStart, int iSubLen){
- UINT iSrcLen = 0;
-
- if(szSrc == null || szDest == null){
- return 0;
- }
-
- szDest[0] = 0;
- iSrcLen = et_strlen(szSrc);
-
- if(iSubLen == -1){
- iSubLen = iSrcLen - iStart;
- }
-
- if(iStart + iSubLen > iSrcLen){
- return null;
- }
-
- et_memcpy(szDest, szSrc + iStart, iSubLen * sizeof(char));
- szDest[iSubLen] = 0;
- return szDest;
- }
-
- char* et_sz_add_slashes( char* szSrc, char chFind ){
- int iSrcLen = 0;
- char *szCopy = null;
- int i = 0;
- int iPos = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- szCopy = (char*)et_alloc((iSrcLen * 2 + 1) * sizeof(char));
- if(szCopy == null){
- return null;
- }
-
- for(i = 0; i < iSrcLen; i++){
- if(szSrc[i] == chFind
- || szSrc[i] == '\\')
- {
- szCopy[iPos++] = '\\';
- szCopy[iPos++] = szSrc[i];
- }else{
- szCopy[iPos++] = szSrc[i];
- }
- }
- szCopy[iPos++] = 0;
- et_strcpy(szSrc,szCopy);
- et_free(szCopy);
- return szSrc;
- }
-
- char* et_sz_strip_slashes( char* szSrc ){
- int iSrcLen = 0;
- char *szCopy = null;
- int i = 0;
- int iPos = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- szCopy = (char*)et_alloc((iSrcLen + 1) * sizeof(char));
-
- if(szCopy == null){
- return null;
- }
-
- for(i = 0; i < iSrcLen - 1; i++){
- if(szSrc[i] == '\\'){
- if(i == iSrcLen - 1){
- break;
- }else{
- i++;
- szCopy[iPos++] = szSrc[i];
- }
- }else{
- szCopy[iPos++] = szSrc[i];
- }
- }
-
- szCopy[iPos++] = 0;
- et_strcpy(szSrc,szCopy);
- et_free(szCopy);
- return szSrc;
- }
-
- char* et_sz_trim_left( char* szSrc ){
- int iSrcLen = 0;
- int iDestLen = 0;
- int iSpaceLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen == 0){
- return szSrc;
- }
-
- for(i = 0; i < iSrcLen; i++){
- if(et_char_is_space(szSrc[i])){
- iSpaceLen++;
- continue;
- }else{
- break;
- }
- }
-
- if(iSpaceLen == 0){
- return szSrc;
- }
-
- iDestLen = iSrcLen - iSpaceLen;
- et_memmove(szSrc,szSrc + iSpaceLen,iSrcLen - iSpaceLen + 1);
- szSrc[iDestLen] = 0;
- return szSrc;
- }
-
- char* et_sz_trim_right( char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- return szSrc;
- }
-
- for(i = iSrcLen - 1; i >= 0; i--){
- if( et_char_is_space(szSrc[i]) ){
- szSrc[i] = 0;
- }else{
- break;
- }
- }
-
- return szSrc;
- }
-
- char* et_sz_trim( char* szSrc ){
- if(szSrc == null){
- return null;
- }
-
- et_sz_trim_left(szSrc);
- et_sz_trim_right(szSrc);
- return szSrc;
- }
-
- char* et_sz_trim_chars_left(char* szSrc, char chFind){
- int iSrcLen = 0;
- int iDestLen = 0;
- int iSpaceLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen == 0){
- return szSrc;
- }
-
- for(i = 0; i < iSrcLen; i++){
- if(szSrc[i] == chFind){
- iSpaceLen++;
- continue;
- }else{
- break;
- }
- }
-
- if(iSpaceLen == 0){
- return szSrc;
- }
-
- iDestLen = iSrcLen - iSpaceLen;
- et_memmove(szSrc,szSrc + iSpaceLen,iSrcLen - iSpaceLen + 1);
- szSrc[iDestLen] = 0;
- return szSrc;
- }
-
- char* et_sz_trim_chars_right( char* szSrc, char chFind){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- return szSrc;
- }
-
-
- for(i = iSrcLen - 1; i >= 0; i--){
- if( szSrc[i] == chFind){
- szSrc[i] = 0;
- }else{
- break;
- }
- }
-
- return szSrc;
- }
-
- char* et_sz_replace( char* szSrc, const char* szFind, const char* szReplace ){
- int iSrcLen = 0;
- int iFindLen = 0;
- int iReplaceLen = 0;
- int iTotalLen = 0;
- int iFindPos = 0;
- int iDiffLen = 0;
-
- if(szSrc == null){
- return null;
- }
- if(szFind == null){
- return szSrc;
- }
- if(szReplace == null){
- szReplace = ET_SZ_EMPTY;
- }
-
- iSrcLen = et_strlen(szSrc);
- iFindLen = et_strlen(szFind);
- iReplaceLen = et_strlen(szReplace);
- iTotalLen = iSrcLen;
- iDiffLen = iReplaceLen - iFindLen;
-
- while(1){
- iFindPos = et_sz_find_from(szSrc,szFind,iFindPos);
- if(iFindPos == -1){
- break;
- }else{
- et_sz_splice(szSrc,szReplace,iFindPos,iFindLen);
- iFindPos += iReplaceLen;
- iTotalLen += iDiffLen;
- }
- }
-
- szSrc[iTotalLen] = 0;
- return szSrc;
- }
-
- char* et_sz_cut(char* szSrc, UINT nStart, UINT nLen ){
- UINT iSrcLen = 0;
- UINT i = 0;
- UINT iDestLen = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- iDestLen = iSrcLen - nLen;
- if(nStart + nLen > iSrcLen){
- return szSrc;
- }
-
- for(i = nStart; i < iDestLen; i++){
- szSrc[i] = szSrc[i + nLen];
- }
- szSrc[iDestLen] = 0;
- return szSrc;
- }
-
- char* et_sz_insert( char* szSrc, const char* szInsert, UINT nStart ){
- UINT iSrcLen = 0;
- UINT iAppendLen = 0;
- UINT iDestLen = 0;
- UINT iRange = 0;
- UINT i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- if(szInsert == null){
- szInsert = ET_SZ_EMPTY;
- }
-
- iSrcLen = et_strlen(szSrc);
- iAppendLen = et_strlen(szInsert);
- iDestLen = iSrcLen + iAppendLen;
- iRange = iSrcLen - nStart;
-
- if(nStart > iSrcLen){
- return szSrc;
- }
-
- for(i = 1; i <= iRange; i++){
- szSrc[iDestLen - i] = szSrc[iDestLen - i - iAppendLen];
- }
-
- for(i = 0; i < iAppendLen; i++){
- szSrc[nStart + i] = szInsert[i];
- }
-
- szSrc[iDestLen] = 0;
- return szSrc;
- }
-
- char* et_sz_splice( char* szSrc, const char* szInsert, UINT nStart, UINT nLen ){
- UINT iSrcLen = 0;
- if(szSrc == null){
- return null;
- }
-
- if(szInsert == null){
- szInsert = ET_SZ_EMPTY;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(nStart < 0
- || nLen < 0
- || nStart + nLen > iSrcLen)
- {
- return szSrc;
- }
- et_sz_cut(szSrc,nStart,nLen);
- et_sz_insert(szSrc,szInsert,nStart);
- return szSrc;
- }
-
- bool et_sz_is_int( const char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen == 0){
- return false;
- }
-
- if(szSrc[0] != '-' && szSrc[0] != '+' && !et_char_is_num(szSrc[0])){
- return false;
- }
-
- for(i = 1; i < iSrcLen; i++){
- if(!et_char_is_num(szSrc[i])){
- return false;
- }
- }
- return true;
- }
-
- bool et_sz_is_hex( const char* szSrc ){
- const char *szValid = "abcdefABCDEF0123456789";
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null || et_strlen(szSrc) == 0){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- return false;
- }
-
- if( et_strcmp(szSrc,"0x")==0
- || et_strcmp(szSrc,"0X") == 0){
- return false;
- }
-
- for(i = 0; i < iSrcLen; i++){
- if(et_sz_find_char(szValid,szSrc[i],0) == -1){
- if(i == 1 && (szSrc[i] == 'x' || szSrc[i] == 'X')){
- continue;
- }
- return false;
- }
- }
-
- return true;
- }
-
- bool et_sz_is_num( const char* szSrc ){
- UINT iSrcLen = et_strlen(szSrc);
- UINT i = 0;
- char chTemp = 0;
- int iDotCount = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen == 0){
- return false;
- }else if(iSrcLen > 1){
- for(i = 1; i < iSrcLen; i++){
- chTemp = *(szSrc + i);
- if(chTemp == '.'){
- iDotCount++;
- if(iDotCount > 1){
- return false;
- }
- }
- if( !et_char_is_num(chTemp) && chTemp != '.'){
- return false;
- }
- }
-
- if(chTemp == '.'){
- return false;
- }
-
- chTemp = *szSrc;
- if( !et_char_is_num(chTemp) ){
- if(chTemp != '-' && chTemp != '+'){
- return false;
- }
- }
- }else if(iSrcLen == 1){
- chTemp = *szSrc;
- if( !et_char_is_num(chTemp) ){
- return false;
- }
- }
- return true;
- }
-
- bool et_sz_is_domain( const char* szSrc ){
- int iSrcLen = et_strlen(szSrc);
- int i = 0;
- char chTemp = 0;
- int iDotPos = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen < 4
- || iSrcLen > 50){
- return false;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chTemp = szSrc[i];
- if(et_char_is_num(chTemp)
- || et_char_is_letter(chTemp)
- || chTemp == '-'
- || chTemp == '.'
- )
- {
- continue;
- }else{
- return false;
- }
- }
-
- if(et_sz_count_sz(szSrc,".") == 0){
- return false;
- }
-
- iDotPos = et_sz_find(szSrc,".");
-
- if(iDotPos == -1){
- return false;
- }
-
- if(szSrc[iSrcLen - 1] == '.'
- || szSrc[0] == '.')
- {
- return false;
- }
-
- return true;
- }
-
- bool et_sz_is_email( const char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
- char chTemp = 0;
- int iAtPos = 0;
- int iDotPos = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen < 6
- || iSrcLen > 50){
- return false;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chTemp = szSrc[i];
- if(et_char_is_num(chTemp)
- || et_char_is_letter(chTemp)
- || chTemp == '-'
- || chTemp == '_'
- || chTemp == '@'
- || chTemp == '.'
- )
- {
- continue;
- }else{
- return false;
- }
- }
-
- if(et_sz_count_sz(szSrc,"@") != 1){
- return false;
- }
-
- iAtPos = et_sz_find(szSrc,"@");
-
- if(iAtPos == 0
- || iAtPos > iSrcLen - 5){
- return false;
- }
-
- if(et_sz_count_sz(szSrc,".") == 0){
- return false;
- }
-
- iDotPos = et_sz_find(szSrc,".");
-
- if(iDotPos == -1){
- return false;
- }
-
- if(szSrc[iSrcLen - 1] == '.'
- || szSrc[0] == '.')
- {
- return false;
- }
-
- return true;
- }
-
- bool et_sz_is_ip( const char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
- char chTemp = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen < 7
- || iSrcLen > 15){
- return false;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chTemp = szSrc[i];
- if(et_char_is_num(chTemp)
- || chTemp == '.')
- {
- continue;
- }else{
- return false;
- }
- }
-
-
- if(et_sz_count_sz(szSrc,".") != 3){
- return false;
- }
-
- if(szSrc[iSrcLen - 1] == '.'
- || szSrc[0] == '.'){
- return false;
- }
-
- return true;
- }
-
- bool et_sz_is_url( const char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
- char chTemp = 0;
- int iDotPos = 0;
- int iProtocolPos = 0;
- const char* szValid = "~!#$%^&()_-+={[}]|:;,./\"'";
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen < 10
- || iSrcLen > 255){
- return false;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chTemp = szSrc[i];
- if(et_char_is_num(chTemp)
- || et_char_is_letter(chTemp)
- || et_sz_find_char(szValid,chTemp,0) != -1
- )
- {
- continue;
- }else{
- return false;
- }
- }
-
- if(et_sz_count_sz(szSrc,".") == 0){
- return false;
- }
-
- iDotPos = et_sz_find(szSrc,".");
-
- if(iDotPos == -1){
- return false;
- }
-
- if(szSrc[iSrcLen - 1] == '.'
- || szSrc[0] == '.'){
- return false;
- }
-
- iProtocolPos = et_sz_find(szSrc,"://");
-
- if(iProtocolPos == -1
- || iProtocolPos < 3
- || iProtocolPos > 10)
- {
- return false;
- }
-
- return true;
- }
-
- bool et_sz_is_ascii( const char* szSrc ){
- int iSrcLen = 0;
- int i = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- for(i = 0; i < iSrcLen; i++){
- if( !et_char_is_ascii( (BYTE)szSrc[i] )){
- return false;
- }
- }
- return true;
- }
-
- bool et_sz_is_limited_in( const char* szSrc, const char* szLimited ){
- int iSrcLen = 0;
- char chTemp = 0;
- int i = 0;
-
- if(szSrc == null){
- return false;
- }
- if(szLimited == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
- for(i = 0; i < iSrcLen; i++){
- chTemp = szSrc[i];
- if(et_sz_find_char(szLimited,chTemp,0) == -1){
- return false;
- }
- }
- return true;
- }
-
- bool et_sz_is_datetime( const char* szSrc ){
- int iSrcLen = 0;
-
- if(szSrc == null){
- return false;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen != 19){
- return false;
- }
- if(szSrc[4] != '-'){
- return false;
- }
- if(szSrc[7] != '-'){
- return false;
- }
- if(szSrc[10] != ' '){
- return false;
- }
- if(szSrc[13] != ':'){
- return false;
- }
- if(szSrc[16] != ':'){
- return false;
- }
- if( !et_char_is_num(szSrc[0])
- || !et_char_is_num(szSrc[18]) ){
- return false;
- }
-
- return true;
- }
-
- char* et_sz_dec2bin(char* szSrc){
- char szTemp[255] = "";
- INT64 iNum = 0;
- INT64 iTempQuotient = 0;
- INT64 iTempRemainder = 0;
- int iPos = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iNum = et_sz_to_long(szSrc);
- iTempQuotient = iNum;
-
- if(iNum == 0){
- szSrc[0] = '0';
- szSrc[1] = 0;
- return szSrc;
- }
-
- while(iTempQuotient >> 1 != 0){
- iTempRemainder = iTempQuotient & 1;
- iTempQuotient = iTempQuotient >> 1;
-
- if(iTempRemainder == 0){
- szTemp[iPos++] = '0';
- }else{
- szTemp[iPos++] = '1';
- }
- }
- if(iTempQuotient > 0){
- szTemp[iPos++] = '1';
- }
- szTemp[iPos++] = 0;
- et_sz_reverse(szTemp);
- et_strcpy(szSrc,szTemp);
- return szSrc;
- }
-
- char* et_sz_bin2dec(char* szSrc){
- int iSrcLen = 0;
- int i = 0;
- INT64 iSum = 0;
- int iPow = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen <= 0){
- return szSrc;
- }
-
- for(i = iSrcLen - 1; i >= 0; i--){
- if(szSrc[i] == '1'){
- iSum += et_math_power(2,iPow);
- }else if(szSrc[i] != '0'){
- szSrc[0] = '0';
- szSrc[1] = 0;
- return szSrc;
- }
- iPow++;
-
- }
- et_sz_by_long(szSrc,iSum);
-
- return szSrc;
- }
-
- char* et_sz_hex2dec(char* szSrc){
- int iSrcLen = 0;
- int i = 0;
- INT64 iSum = 0;
- int iPow = 0;
- int iDigit = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- for(i = iSrcLen - 1; i >= 0; i--){
- if( et_sz_find_char(szSrc,szSrc[i],0) == -1 ){
- szSrc[0] = '0';
- szSrc[1] = 0;
- return szSrc;
- }
-
- iDigit = et_char_hex_to_int(szSrc[i]);
- if(szSrc[i] != '0'){
- iSum += ( iDigit * et_math_power(16,iPow) );
- }
- iPow++;
- }
- et_sz_by_long(szSrc,iSum);
- return szSrc;
- }
-
- char* et_sz_dec2hex(char* szSrc){
- char szTemp[255] = "";
- INT64 iNum = 0;
- INT64 iTempQuotient = 0;
- INT64 iTempRemainder = 0;
- int iPos = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iNum = et_sz_to_long(szSrc);
- iTempQuotient = iNum;
-
- if(iNum == 0){
- szSrc[0] = '0';
- szSrc[1] = 0;
- return szSrc;
- }
-
- while(iTempQuotient >> 4 != 0){
- iTempRemainder = iTempQuotient & 0xF;
- iTempQuotient = iTempQuotient >> 4;
-
- if(iTempRemainder == 0){
- szTemp[iPos++] = '0';
- }else{
- szTemp[iPos++] = et_char_int_to_hex(iTempRemainder);
- }
- }
- if(iTempQuotient > 0){
- szTemp[iPos++] = et_char_int_to_hex(iTempQuotient);
- }
- szTemp[iPos++] = 0;
- et_sz_reverse(szTemp);
- et_strcpy(szSrc,szTemp);
- return szSrc;
- }
-
- char* et_sz_bin2hex(char* szSrc){
- if(szSrc == null){
- return null;
- }
- et_sz_bin2dec(szSrc);
- et_sz_dec2hex(szSrc);
- return szSrc;
- }
-
- char* et_sz_hex2bin( char* szSrc )
- {
- if(szSrc == null){
- return null;
- }
- et_sz_hex2dec(szSrc);
- et_sz_dec2bin(szSrc);
- return szSrc;
- }
-
- char* et_sz_format_num( char* szSrc, UINT nLenAfterPoint){
- char chNext = '0';
- int iSrcLen = 0;
- int iDotPos = 0;
- UINT iSrcDecLen = 0;
- int iNewInt = 0;
- int iNextNum = 0;
- char szDest[255] = "";
- char szPlusZeros[255] = "";
- char szIntPart[255] = "";
- char szDecPart[255] = "";
- char szNewInt[255] = "";
- char szNewDec[255] = "";
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- return szSrc;
- }
-
- iDotPos = et_sz_find(szSrc,".");
-
- if(iDotPos == -1){
- et_sz_repeat(szPlusZeros,"0",nLenAfterPoint);
- et_strcpy(szDest,szSrc);
- et_strcat(szDest,".");
- et_strcat(szDest,szPlusZeros);
- }else{
- et_sz_substr(szIntPart,szSrc,0,iDotPos);
- et_sz_substr(szDecPart,szSrc,iDotPos + 1,iSrcLen - 1 - iDotPos);
- iSrcDecLen = et_strlen(szDecPart);
- if(iSrcDecLen == nLenAfterPoint){
- et_strcpy(szDest,szSrc);
- }else if(iSrcDecLen < nLenAfterPoint){
- et_sz_repeat(szPlusZeros,"0",nLenAfterPoint - iSrcDecLen);
- et_strcpy(szDest,szSrc);
- et_strcat(szDest,szPlusZeros);
- }else{
- et_strcpy(szNewInt,szIntPart);
- et_strncat(szNewInt,szDecPart,nLenAfterPoint);
- iNewInt = et_sz_to_int(szNewInt);
- chNext = szDecPart[nLenAfterPoint];
- iNextNum = et_char_to_int(chNext);
-
- if(iNextNum >= 5){
- iNewInt++;
- }
-
- et_sz_by_int(szNewInt,iNewInt);
-
- if(nLenAfterPoint == 0){
- et_strcpy(szDest,szNewInt);
- }else{
- if(et_strlen(szNewInt) <= nLenAfterPoint){
- et_sz_repeat(szPlusZeros,"0",nLenAfterPoint - et_strlen(szNewInt) + 1);
- et_sz_prefix(szPlusZeros,szNewInt);
- }
-
- et_sz_substr(szNewDec,szNewInt,et_strlen(szNewInt) - nLenAfterPoint,nLenAfterPoint);
- et_strncpy(szDest,szNewInt,et_strlen(szNewInt) - nLenAfterPoint);
- et_strcat(szDest,".");
- et_strcat(szDest,szNewDec);
- }
- }
- }
-
- et_strcpy(szSrc,szDest);
- return szSrc;
- }
-
- void et_sz_alloc_array( char ***szArr, int iRow, int iCol ){
- int i = 0;
- *szArr = (char**)et_alloc(sizeof(char*) * iRow);
- for(i = 0; i < iRow; i++){
- (*szArr)[i] = (char*)et_alloc(sizeof(char) * iCol);
- et_memset((*szArr)[i], 0, iCol);
- }
- }
-
- void et_sz_et_free_array( char ***szArr, int iRow ){
- int i = 0;
- if(*szArr == null){
- return;
- }
- for(i = 0; i < iRow; i++){
- if((*szArr)[i] == null){
- continue;
- }
- et_free((*szArr)[i] );
- }
- et_free(*szArr);
- }
-
- INT64 et_sz_ip_text2num( const char* szIpText ){
- INT64 iTotal = 0;
- int iPointPos0 = -1;
- int iPointPos1 = 0;
- int iPointPos2 = 0;
- int iPointPos3 = 0;
- char szPart0[5] = "";
- char szPart1[5] = "";
- char szPart2[5] = "";
- char szPart3[5] = "";
-
- INT64 iPart0 = 0;
- INT64 iPart1 = 0;
- INT64 iPart2 = 0;
- INT64 iPart3 = 0;
-
- if(szIpText == null){
- return 0;
- }
-
- if(!et_sz_is_ip(szIpText)){
- return 0;
- }
-
- iPointPos1 = et_sz_find_from(szIpText,".",0);
- if(iPointPos1 == -1){
- return 0;
- }
-
- iPointPos2 = et_sz_find_from(szIpText,".",iPointPos1 + 1);
- if(iPointPos2 == -1){
- return 0;
- }
-
- iPointPos3 = et_sz_find_from(szIpText,".",iPointPos2 + 1);
- if(iPointPos3 == -1){
- return 0;
- }
-
- et_sz_substr(szPart0, szIpText,iPointPos0 + 1,iPointPos1 - iPointPos0 - 1);
- et_sz_substr(szPart1, szIpText,iPointPos1 + 1,iPointPos2 - iPointPos1 - 1);
- et_sz_substr(szPart2, szIpText,iPointPos2 + 1,iPointPos3 - iPointPos2 - 1);
- et_sz_substr(szPart3, szIpText,iPointPos3 + 1, -1);
-
- iPart0 = et_sz_to_long(szPart0);
- iPart1 = et_sz_to_long(szPart1);
- iPart2 = et_sz_to_long(szPart2);
- iPart3 = et_sz_to_long(szPart3);
-
- iTotal += (iPart0 << 24);
- iTotal += (iPart1 << 16);
- iTotal += (iPart2 << 8);
- iTotal += iPart3;
-
- return iTotal;
- }
-
- char* et_sz_ip_num2text( char *szDest, INT64 iIpNum ){
- char szPart0[5] = "";
- char szPart1[5] = "";
- char szPart2[5] = "";
- char szPart3[5] = "";
-
- INT64 iTotal = 0;
- INT64 iPart0 = 0;
- INT64 iPart1 = 0;
- INT64 iPart2 = 0;
- INT64 iPart3 = 0;
-
- if(szDest != null){
- szDest[0] = 0;
- }
-
- if(szDest == null){
- return null;
- }
-
- iTotal = iIpNum;
- iPart0 = (iTotal >> 24);
- iPart1 = (iTotal >> 16) & 0x00FF;
- iPart2 = (iTotal >> 8) & 0x0000FF;
- iPart3 = (iTotal >> 0) & 0x000000FF;
-
- szDest[0] = 0;
-
- et_sz_by_long(szPart0,iPart0);
- et_sz_by_long(szPart1,iPart1);
- et_sz_by_long(szPart2,iPart2);
- et_sz_by_long(szPart3,iPart3);
-
- et_strcat(szDest,szPart0);
- et_strcat(szDest,".");
- et_strcat(szDest,szPart1);
- et_strcat(szDest,".");
- et_strcat(szDest,szPart2);
- et_strcat(szDest,".");
- et_strcat(szDest,szPart3);
-
- return szDest;
- }
-
- char* et_sz_file_dir( char* szDest, const char* szSrc ){
- int nSlashPos = 0;
- int iLen = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- et_strcpy(szDest,szSrc);
- et_sz_replace(szDest,"\\","/");
- iLen = et_strlen(szDest);
- if(szDest[iLen - 1] == '/'){
- szDest[iLen - 1] = 0;
- }
- nSlashPos = et_sz_find_reverse(szDest,"/");
- if(nSlashPos == -1){
- szDest[0] = 0;
- return szDest;
- }
- iLen = et_strlen(szDest);
- et_sz_cut(szDest,nSlashPos + 1,iLen - nSlashPos - 1);
- return szDest;
- }
-
- char* et_sz_file_name( char* szDest, const char* szSrc ){
- int nSlashPos = 0;
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
- et_strcpy(szDest,szSrc);
- et_sz_replace(szDest,"\\","/");
- nSlashPos = et_sz_find_reverse(szDest,"/");
- if(nSlashPos == -1){
- return szDest;
- }
- et_sz_cut(szDest,0,nSlashPos + 1);
- return szDest;
- }
-
- char* et_sz_file_end( char* szDest, const char* szSrc ){
- int nSlashPos = 0;
- int iLen = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
- et_strcpy(szDest,szSrc);
- et_sz_replace(szDest,"\\","/");
- iLen = et_strlen(szDest);
- if(szDest[iLen - 1] == '/'){
- szDest[iLen - 1] = 0;
- }
- nSlashPos = et_sz_find_reverse(szDest,"/");
- if(nSlashPos == -1){
- return szDest;
- }
- et_sz_cut(szDest,0,nSlashPos + 1);
- return szDest;
- }
-
- char* et_sz_file_title( char* szDest, const char* szSrc ){
- int nDotPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- et_sz_file_name(szDest,szSrc);
- nDotPos = et_sz_find_reverse(szDest,".");
- if(nDotPos == -1){
- //no prefix
- return szDest;
- }else if(nDotPos == 0){
- //like ".config"
- return szDest;
- }
- et_sz_cut(szDest,nDotPos,et_strlen(szDest) - nDotPos);
- return szDest;
- }
-
- char* et_sz_file_ext( char* szDest, const char* szSrc ){
- int nDotPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- et_strcpy(szDest,szSrc);
- nDotPos = et_sz_find_reverse(szDest,".");
- if(nDotPos == -1){
- return szDest;
- }
- et_sz_cut(szDest,0,nDotPos);
- return szDest;
- }
-
- char* et_sz_file_fix_dir( char* szDest, const char* szSrc ){
- int iLen = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
-
- iLen = et_strlen(szSrc);
- if(iLen == 0){
- return szDest;
- }
- et_strcpy(szDest,szSrc);
- et_sz_replace(szDest,"\\","/");
- iLen = et_strlen(szDest);
- if(iLen == 1){
- return szDest;
- }
- if(szDest[iLen - 1] == '/'){
- szDest[iLen - 1] = 0;
- }
-
- return szDest;
- }
-
- char* et_sz_url_protocol( char *szDest, const char* szSrc ){
- int iColonPos = 0;
- int iSrcLen = 0;
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen < 3){
- return szDest;
- }
- iColonPos = et_sz_find(szSrc,":/");
- if(iColonPos == -1){
- return szDest;
- }
- et_sz_substr(szDest,szSrc,0,iColonPos);
-
- return szDest;
- }
-
- char* et_sz_url_host( char *szDest, const char* szSrc ){
- int iBegin = 0;
- int iEnd = 0;
- int iFindPos = 0;
- int iSrcLen = 0;
- int iPortColonPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen < 3){
- return szDest;
- }
-
- iFindPos = et_sz_find(szSrc,":/");
- if(iFindPos == -1){
- iBegin = 0;
- }else{
- iBegin = iFindPos + 2;
- if(szSrc[iBegin] == '/'){
- iBegin++;
- }
- }
-
- iFindPos = et_sz_find_from(szSrc,"/",iBegin + 1);
- if(iFindPos == -1){
- iEnd = iSrcLen - 1;
- }else{
- iEnd = iFindPos - 1;
- }
-
- et_sz_substr(szDest,szSrc,iBegin,iEnd - iBegin + 1);
- iPortColonPos = et_sz_find(szDest,":");
- if(iPortColonPos != -1){
- szDest[iPortColonPos] = 0;
- }
- return szDest;
- }
-
- USHORT et_sz_url_port( const char* szSrc ){
- USHORT iRetPort = 0;
- int iBegin = 0;
- int iEnd = 0;
- int iFindPos = 0;
- int iSrcLen = 0;
- char szTemp[20] = "";
-
- if(szSrc == null){
- return 0;
- }
-
- iSrcLen = et_strlen(szSrc);
-
- if(iSrcLen < 3){
- return 0;
- }
-
- iFindPos = et_sz_find(szSrc,":/");
- if(iFindPos == -1){
- iFindPos = et_sz_find(szSrc,":");
- }else{
- iFindPos = et_sz_find_from(szSrc,":",iFindPos + 1);
- }
-
- if(iFindPos == -1){
- return 80;
- }else{
- iBegin = iFindPos + 1;
- }
-
- iFindPos = et_sz_find_from(szSrc,"/",iBegin + 1);
- if(iFindPos == -1){
- iEnd = iSrcLen - 1;
- }else{
- iEnd = iFindPos - 1;
- }
-
- if(iEnd > iBegin)
- {
- et_sz_substr(szTemp,szSrc,iBegin,iEnd - iBegin + 1);
- iRetPort = et_sz_to_int(szTemp);
- }else{
- iRetPort = 80;
- }
-
- return iRetPort;
- }
-
- char* et_sz_url_path( char *szDest, const char* szSrc ){
- int iSrcLen = 0;
- int iFindPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
- szDest[0] = 0;
-
- iSrcLen = et_strlen(szSrc);
-
- iFindPos = et_sz_find_from(szSrc,":/",0);
- if(iFindPos != -1){
- iFindPos += 3;
- if(szSrc[iFindPos] == '/'){
- iFindPos++;
- }
- }
- iFindPos = et_sz_find_from(szSrc,"/",iFindPos);
- if(iFindPos == -1){
- et_strcpy(szDest,"/");
- }else{
- et_sz_substr(szDest,szSrc,iFindPos,-1);
- }
-
- iFindPos = et_sz_find(szDest,"?");
- if(iFindPos != -1){
- szDest[iFindPos] = 0;
- }
-
- return szDest;
- }
-
- char* et_sz_url_param( char *szDest, const char* szSrc ){
- int iSrcLen = et_strlen(szSrc);
- int iFindPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- iSrcLen = et_strlen(szSrc);
- iFindPos = et_sz_find_from(szSrc,"?",0);
- if(iFindPos == -1){
- return szDest;
- }
- et_sz_substr(szDest,szSrc,iFindPos + 1,-1);
-
- return szDest;
- }
-
- char* et_sz_url_path_with_param( char *szDest, const char* szSrc ){
- int iSrcLen = 0;
- int iFindPos = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- iSrcLen = et_strlen(szSrc);
- iFindPos = et_sz_find_from(szSrc,":/",0);
- if(iFindPos != -1){
- iFindPos += 3;
- if(szSrc[iFindPos] == '/'){
- iFindPos++;
- }
- }else{
- iFindPos = 0;
- }
-
- iFindPos = et_sz_find_from(szSrc,"/",iFindPos);
- if(iFindPos == -1){
- return szDest;
- }
-
- et_sz_substr(szDest,szSrc,iFindPos,-1);
-
- return szDest;
- }
-
- char* et_sz_hex_increase( char *szSrc ){
- int iSrcLen = 0;
- int iDestLen = 0;
- int iDecimal = 0;
- char szTemp[50] = "";
-
- if(!et_sz_is_hex(szSrc)){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- et_strcpy(szTemp,szSrc);
- et_sz_trim_chars_left(szTemp,'0');
- et_sz_hex2dec(szTemp);
- iDecimal = et_sz_to_long(szTemp);
- iDecimal++;
- et_sz_by_long(szTemp,iDecimal);
- et_sz_dec2hex(szTemp);
- iDestLen = et_strlen(szTemp);
- if(iDestLen > iSrcLen){
- et_sz_repeat(szSrc,"0",iSrcLen);
- return szSrc;
- }
- et_sz_pad_left(szTemp,'0',iSrcLen);
- et_strcpy(szSrc,szTemp);
- return szSrc;
- }
-
- int et_sz_hex_to_bytes( BYTE* pByte, const char* szStr ){
- int iStrLen = 0;
- char szTemp[3] = "";
- char szDec[50] = "";
- int iTempDec = 0;
- int iByteCount = 0;
- int i = 0;
-
- if(szStr == null || pByte == null){
- return 0;
- }
-
- iStrLen = et_strlen(szStr);
-
- for(i = 0; i < iStrLen; i++){
- if(i == iStrLen - 1){
- break;
- }
- et_memset(szTemp,0,3 * sizeof(char));
- et_memset(szDec,0,50 * sizeof(char));
- et_strncpy(szTemp,szStr + i,2);
- et_strcpy(szDec,szTemp);
- et_sz_hex2dec(szDec);
- iTempDec = et_sz_to_int(szDec);
- pByte[iByteCount++] = (BYTE)iTempDec;
- i++;
- }
- return iByteCount;
- }
-
- char* et_sz_hex_from_bytes( char* szHex, const BYTE* pBytes, int iByteCount ){
- char szTemp[10] = "";
- int iTempInt = 0;
- int i = 0;
-
- if(szHex == null || pBytes == null){
- return null;
- }
-
- szHex[0] = 0;
- for(i = 0; i < iByteCount; i++){
- iTempInt = pBytes[i];
- et_memset(szTemp,0,10 * sizeof(char));
- et_sz_by_int(szTemp,iTempInt);
- et_sz_dec2hex(szTemp);
- et_sz_pad_left(szTemp,'0',2);
- et_strcat(szHex,szTemp);
- }
- return szHex;
- }
-
- char* et_sz_delimit( char* szSrc, int iUnitLen, char chDeimiter ){
- int iSrcLen = 0;
- char *szCopy = null;
- int iPos = 0;
- int i = 0;
-
- if(szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- return szSrc;
- }
-
- szCopy = (char*)et_alloc( (iSrcLen * 2 + 1) * sizeof(char) );
- et_memset(szCopy,0,(iSrcLen * 2 + 1) * sizeof(char));
- et_strcpy(szCopy,szSrc);
-
- for(i = 0; i < iSrcLen / iUnitLen; i++){
- if(i != 0){
- szCopy[iPos++] = chDeimiter;
- }
- szCopy[iPos++] = szSrc[i*2];
- szCopy[iPos++] = szSrc[i*2+1];
- }
- et_strcpy(szSrc,szCopy);
- et_free(szCopy);
- return szSrc;
- }
-
- char* et_sz_fix_time(char* szDest, const char* szSrc){
- int iSrcLen = 0;
-
- if(szSrc == null || szDest == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- et_strcpy(szDest,szSrc);
- if(iSrcLen == 4){
- et_strcat(szDest,"-00-00 00:00:00");
- }else if(iSrcLen == 7){
- et_strcat(szDest,"-00 00:00:00");
- }else if(iSrcLen == 10){
- et_strcat(szDest," 00:00:00");
- }else if(iSrcLen == 13){
- et_strcat(szDest,":00:00");
- }else if(iSrcLen == 16){
- et_strcat(szDest,":00");
- }
-
- return szDest;
- }
-
- char* et_sz_html_enc(char* szDest, const char* szSrc){
- if(szDest == null || szSrc == null){
- return 0;
- }
-
- et_strcpy(szDest,szSrc);
-
- et_sz_replace(szDest,"<","<");
- et_sz_replace(szDest,">",">");
- et_sz_replace(szDest,"&","&");
- et_sz_replace(szDest,"\"",""");
- et_sz_replace(szDest," "," ");
- et_sz_replace(szDest,"<","<");
-
- return szDest;
- }
- char* et_sz_html_dec(char* szDest, const char* szSrc){
- if(szDest == null || szSrc == null){
- return 0;
- }
-
- et_strcpy(szDest,szSrc);
-
- et_sz_replace(szDest,"<","<");
- et_sz_replace(szDest,">",">");
- et_sz_replace(szDest,"&","&");
- et_sz_replace(szDest,""","\"");
- et_sz_replace(szDest," "," ");
- et_sz_replace(szDest,"<","<");
-
- return null;
- }
-
- int et_sz_split(EtLists* pList, const char* szSrc, const char* szDelimiter){
- int iResult = 0;
- int iSrcLen = 0;
- int nStart = 0;
- int nCount = 0;
- int nPos = 0;
- int nDelimiterLen = 0;
- char szTemp[40960] = {0};
-
- if(pList == null || szSrc == null || szDelimiter == NULL){
- return ET_ERR_MEM_NULL;
- }
-
- et_lists_clear(pList);
- nDelimiterLen = et_strlen(szDelimiter);
-
- while(true){
- nPos = et_sz_find_from(szSrc,szDelimiter,nStart);
- if(nPos == -1){
- break;
- }
- nCount++;
- et_sz_substr(szTemp,szSrc,nStart,nPos - nStart);
- et_lists_add(pList,szTemp);
- nStart = nPos + nDelimiterLen;
- }
- nCount++;
- et_sz_substr(szTemp,szSrc,nStart,-1);
- et_lists_add(pList,szTemp);
- return nCount;
- }
-
-
- char* et_sz_join(EtLists* pList, char* szDest, const char* szDelimiter){
- char szTemp[40960] = {0};
- int iListSize = 0;
- int i = 0;
-
- if(szDelimiter == null || szDest == null || pList == null){
- return null;
- }
-
- szDest[0] = 0;
-
- iListSize = et_lists_size(pList);
-
- for(i = 0; i < iListSize; i++){
- if(i != 0){
- et_strcat(szDest,szDelimiter);
- }
- et_lists_get(pList,i,szTemp);
- et_strcat(szDest,szTemp);
- }
-
- return szDest;
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- #define ET_URLENCODE_CHARS "!#$%&'()*+,./:;=?"
-
- static char et_url_2_to_1(const char * szCode) {
- unsigned char chDest = 0;
- int iLeft = 0;
- int iRight = 0;
-
- if(szCode == null){
- return -1;
- }
-
- iLeft = et_char_hex_to_int(szCode[0]);
- iRight = et_char_hex_to_int(szCode[1]);
- if(iLeft == -1 || iRight == -1){
- return -1;
- }
-
- chDest = (iLeft << 4) + iRight;
-
- return chDest;
- }
-
- char* et_url_encode(char *szDest, const char *szSrc, bool bEncodeAll){
- int i = 0;
- int j = 0;
- unsigned char chSrcTemp;
- int iSrcLen = 0;
-
- if(szDest == null || szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- szDest[0] = 0;
- return szDest;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chSrcTemp = szSrc[i];
- if(et_sz_find_char(ET_URLENCODE_CHARS, chSrcTemp, 0) != -1){
- if(bEncodeAll){
- szDest[j++] = '%';
- szDest[j++] = et_char_int_to_hex( (chSrcTemp >> 4) & 0x0F );
- szDest[j++] = et_char_int_to_hex( chSrcTemp & 0x0F );
- }else{
- szDest[j++] = chSrcTemp;
- }
- }else if (chSrcTemp == ' '){
- szDest[j++] = '+';
- }else if (et_char_is_num(chSrcTemp) || et_char_is_letter(chSrcTemp) ){
- szDest[j++] = chSrcTemp;
- }else{
- szDest[j++] = '%';
- szDest[j++] = et_char_int_to_hex( (chSrcTemp >> 4) & 0x0F );
- szDest[j++] = et_char_int_to_hex( chSrcTemp & 0x0F );
- }
- }
-
- szDest[j] = 0;
- return szDest;
- }
-
- char* et_url_decode(char *szDest, const char *szSrc){
- int i = 0;
- int j = 0;
- unsigned char chSrcTemp;
- char chDestTemp;
- int iSrcLen = 0;
-
- if(szDest == null || szSrc == null){
- return null;
- }
-
- iSrcLen = et_strlen(szSrc);
- if(iSrcLen == 0){
- szDest[0] = 0;
- return szDest;
- }
-
- for(i = 0; i < iSrcLen; i++){
- chSrcTemp = szSrc[i];
- if(chSrcTemp == '+'){
- szDest[j++] = ' ';
- }else if(chSrcTemp == '%'){
- if(iSrcLen - i <= 2){
- break;
- }
-
- chDestTemp = et_url_2_to_1(szSrc + i + 1);
- if(chDestTemp < 0){
- szDest[j++] = '?';
- }else{
- szDest[j++] = chDestTemp;
- }
-
- i += 2;
- }else{
- szDest[j++] = chSrcTemp;
- }
- }
-
- szDest[j] = 0;
- return szDest;
- }
-
-
- //////////////////////////////////////////////////////////////
-
-
- #ifdef ET_IN_KERNEL
- #else
- #include <stdlib.h>
- #endif //#ifdef ET_IN_KERNEL
-
- INT64 et_limit_between(INT64 iNum, INT64 iMin, INT64 iMax){
- if(iNum < iMin){
- return iMin;
- }else if(iNum > iMax){
- return iMax;
- }else{
- return iNum;
- }
- }
-
- void* et_alloc(unsigned int iSize){
- #ifdef ET_IN_KERNEL
- return kalloc(iSize);
- #else
- return malloc(iSize);
- #endif
- }
-
- void et_free(void* pPtr){
- #ifdef ET_IN_KERNEL
- return kfree(pPtr);
- #else
- return free(pPtr);
- #endif
- }
-
- //////////////////////////////////////////////////////////////////////
-
- static const char *et_base64_s_sz_char_table =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
- static const BYTE et_base64_s_arr_map_table[256] ={
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,
- 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,
- 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255
- };
-
- char* et_base64_encode(char *szDest, const char *szSrc){
- int i = 0;
- int iSrcLen = 0;
- int iLoop = 0;
- BYTE *pLoop = (BYTE *)szDest;
- BYTE *pIn = (BYTE *)szSrc;
- BYTE chA = 0;
- BYTE chB = 0;
- BYTE chC = 0;
-
- if(szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- if(szSrc == null){
- return szDest;
- }
-
- iSrcLen = et_strlen(szSrc);
- iLoop = 3 * (iSrcLen / 3);
-
- for(i = 0; i < iLoop; i += 3){
- *pLoop++ = et_base64_s_sz_char_table[pIn[0] >> 2];
- *pLoop++ = et_base64_s_sz_char_table[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];
- *pLoop++ = et_base64_s_sz_char_table[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];
- *pLoop++ = et_base64_s_sz_char_table[pIn[2] & 0x3f];
- pIn += 3;
- }
-
- if (i < iSrcLen){
- chA = pIn[0];
- chB = ((i + 1) < iSrcLen) ? pIn[1] : 0;
- chC = 0;
-
- *pLoop++ = et_base64_s_sz_char_table[chA >> 2];
- *pLoop++ = et_base64_s_sz_char_table[((chA & 3) << 4) + (chB >> 4)];
- *pLoop++ = ((i + 1) < iSrcLen) ? et_base64_s_sz_char_table[((chB & 0xf) << 2) + (chC >> 6)] : '=';
- *pLoop++ = '=';
- }
-
- *pLoop = 0;
- return szDest;
- }
-
- char* et_base64_decode(char *szDest, const char *szSrc){
- int iSrcLen = 0;
- int iMiddle = 0;
- int iSrcIndex = 0;
- int iCheck4 = 0;
- int iNewIndex = 0;
- int iMode3 = 3;
- BYTE bySrcTemp = 0;
- BYTE *pIn = (BYTE*)szSrc;
- BYTE *pOut = (BYTE*)szDest;
-
- if(szDest == null){
- return null;
- }
-
- szDest[0] = 0;
- if(szSrc == null){
- return szDest;
- }
-
- iSrcLen = et_strlen((const char*)szSrc);
-
- for(iSrcIndex = 0; iSrcIndex < iSrcLen; iSrcIndex++){
- bySrcTemp = et_base64_s_arr_map_table[pIn[iSrcIndex]];
- if(bySrcTemp == 255){
- continue;
- }
-
- if(bySrcTemp == 254){
- bySrcTemp = 0;
- iMode3--;
- }
-
- iMiddle = (iMiddle << 6) | bySrcTemp;
- if(++iCheck4 == 4){
- pOut[iNewIndex++] = (BYTE)((iMiddle >> 16) & 255);
- if(iMode3 > 1){
- pOut[iNewIndex++] = (BYTE)((iMiddle >> 8) & 255);
- }
- if(iMode3 > 2){
- pOut[iNewIndex++] = (BYTE)(iMiddle & 255);
- }
- iCheck4 = iMiddle = 0;
- }
- }
- pOut[iNewIndex++] = 0;
- return szDest;
- }
-
- ///////////////////////////////////////////////////////////////
-
- int et_char_to_int( char chSrc ){
- if(!et_char_is_num(chSrc)){
- return 0;
- }
- return (int)chSrc - 0x30;
- }
-
- char et_char_by_int(int iSrc){
- if(iSrc > 10 || iSrc < 0)
- {
- return '0';
- }
- return iSrc + 0x30;
- }
-
- int et_char_hex_to_int(char chHex){
- const char *szHex = ET_SZ_HEX_UP;
- int i = 0;
-
- char chUpper = et_char_upper(chHex);
-
- for(i = 0; i < 16; i++){
- if(chUpper == szHex[i]){
- return i;
- }
- }
-
- return -1;
- }
-
- char et_char_int_to_hex(int iNum){
- const char *szHex = ET_SZ_HEX_UP;
- if(iNum < 16 && iNum >= 0){
- return szHex[iNum];
- }
- return -1;
- }
-
- bool et_char_equal_no_case(char chLeft, char chRight){
- if(chLeft == chRight){
- return true;
- }else if(et_char_upper(chLeft) == et_char_upper(chRight)){
- return true;
- }
-
- return false;
- }
-
- bool et_char_is_space(unsigned char chSrc){
- if(chSrc > 128){
- return false;
- }
-
- if(chSrc == ET_CH_SPACE){
- return true;
- }else if(chSrc == ET_CH_TAB){
- return true;
- }else if(chSrc == ET_CH_R){
- return true;
- }else