/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

  1. #define _FILE_OFFSET_BITS 64
  2. #define _LARGEFILE_SOURCE
  3. #define _LARGEFILE64_SOURCE
  4. #ifndef __USE_FILE_OFFSET64
  5. #define __USE_FILE_OFFSET64
  6. #endif
  7. #ifndef __USE_LARGEFILE64
  8. #define __USE_LARGEFILE64
  9. #endif
  10. #ifndef _LARGEFILE64_SOURCE
  11. #define _LARGEFILE64_SOURCE
  12. #endif
  13. //#define O_LARGEFILE 32768
  14. #include "et_cc_linux_arm.h"
  15. #include <stdio.h>
  16. /////////////////////////////////////////////////////////////////
  17. int et_fn_cmp_sz_default(const char* szLeft, const char* szRight){
  18. return et_strcmp(szLeft,szRight);
  19. }
  20. int et_fn_cmp_int_default(INT64 iLeft, INT64 iRight){
  21. if(iLeft > iRight){
  22. return 1;
  23. }else if(iLeft < iRight){
  24. return -1;
  25. }else{
  26. return 0;
  27. }
  28. }
  29. ////////////////////////////////////////////////////////////////
  30. char* et_sz_by_char(char *szDest, char chSrc){
  31. if(szDest == null){
  32. return null;
  33. }
  34. szDest[0] = chSrc;
  35. szDest[1] = 0;
  36. return szDest;
  37. }
  38. char et_sz_to_char(const char* szSrc){
  39. if(szSrc == null){
  40. return 0;
  41. }
  42. return szSrc[0];
  43. }
  44. char* et_sz_by_int(char* szDest, int iNum){
  45. return et_sz_by_long(szDest,iNum);
  46. }
  47. int et_sz_to_int(const char* szSrc){
  48. return (int)et_sz_to_long(szSrc);
  49. }
  50. char* et_sz_by_long(char* szDest, INT64 iNum){
  51. INT64 iTemp = 0;
  52. INT64 iQuotient = 0;
  53. INT64 iRemain = 0;
  54. int iSize = 0;
  55. bool bNegative = false;
  56. if(szDest == null){
  57. return null;
  58. }
  59. szDest[0] = 0;
  60. if(iNum == 0){
  61. szDest[0] = '0';
  62. szDest[1] = 0;
  63. return szDest;
  64. }
  65. iTemp = iNum;
  66. if(iTemp < 0){
  67. iTemp *= -1;
  68. bNegative = true;
  69. }
  70. while(iTemp > 0){
  71. iRemain = iTemp % 10;
  72. iQuotient = iTemp / 10;
  73. iTemp = iQuotient;
  74. szDest[iSize++] = et_char_by_int(iRemain);
  75. }
  76. if(bNegative){
  77. szDest[iSize++] = '-';
  78. }
  79. szDest[iSize++] = 0;
  80. et_sz_reverse(szDest);
  81. return szDest;
  82. }
  83. INT64 et_sz_to_long(const char* szSrc){
  84. INT64 iResult = 0;
  85. int iSize = 0;
  86. char chTemp = 0;
  87. INT64 iTemp = 0;
  88. bool bNegative = false;
  89. int i = 0;
  90. INT64 iZeroCount = 1;
  91. if(szSrc == null){
  92. return 0;
  93. }
  94. iSize = et_strlen(szSrc);
  95. if(iSize == 0 || iSize > 20){
  96. return 0;
  97. }
  98. for(i = iSize - 1; i >= 0; i--){
  99. chTemp = szSrc[i];
  100. if(i == 0 && (chTemp == '-' || chTemp == '+')){
  101. if(chTemp == '-'){
  102. bNegative = true;
  103. }
  104. break;
  105. }
  106. if(!et_char_is_num(chTemp)){
  107. return 0;
  108. }
  109. iTemp =et_char_to_int(chTemp);
  110. if(i == iSize - 1){
  111. iResult = iTemp;
  112. }else{
  113. iZeroCount *= 10;
  114. iTemp *= iZeroCount;
  115. iResult += iTemp;
  116. }
  117. }
  118. if(bNegative){
  119. iResult *= -1;
  120. }
  121. return iResult;
  122. }
  123. char* et_sz_by_float(char *szDest, double fNum, int iAfterPoint){
  124. INT64 iIntValue = 0;
  125. char szKeep[255] = "";
  126. char szKeep2[255] = "";
  127. int iSizeInt = 0;
  128. int iSizeDiff = 0;
  129. int iSizeStr = 0;
  130. bool bNegative = false;
  131. int i = 0;
  132. if(szDest == null){
  133. return null;
  134. }
  135. if(iAfterPoint <= 0){
  136. return et_sz_by_long(szDest,et_math_round(fNum));
  137. }
  138. if(fNum == 0){
  139. szDest[0] = '0';
  140. szDest[1] = '.';
  141. szDest[2] = 0;
  142. et_sz_add_chars(szDest,'0',iAfterPoint);
  143. return szDest;
  144. }
  145. if(fNum < 0){
  146. bNegative = true;
  147. fNum *= -1;
  148. }
  149. fNum *= et_math_power(10,iAfterPoint);
  150. iIntValue = et_math_round(fNum);
  151. if(iIntValue == 0){
  152. szDest[0] = '0';
  153. szDest[1] = 0;
  154. return szDest;
  155. }
  156. et_sz_by_long(szKeep,iIntValue);
  157. iSizeInt = et_strlen(szKeep);
  158. iSizeDiff = iAfterPoint - iSizeInt;
  159. if(iSizeDiff >= 0){
  160. szKeep2[0] = '0';
  161. szKeep2[1] = '.';
  162. iSizeStr = 2;
  163. for(i = 0; i < iSizeDiff; i++){
  164. szKeep2[iSizeStr++] = '0';
  165. }
  166. szKeep2[iSizeStr++] = 0;
  167. et_strcat(szKeep2,szKeep);
  168. }else{
  169. for(i = 0; i < iSizeInt; i++){
  170. if(iSizeInt - i == iAfterPoint){
  171. szKeep2[iSizeStr++] = '.';
  172. }
  173. szKeep2[iSizeStr++] = szKeep[i];
  174. }
  175. szKeep2[iSizeStr++] = 0;
  176. }
  177. if(bNegative){
  178. szDest[0] = '-';
  179. szDest[1] = 0;
  180. et_strcpy(szDest + 1,szKeep2);
  181. }else{
  182. et_strcpy(szDest,szKeep2);
  183. }
  184. return szDest;
  185. }
  186. int et_sz_find_char(const char *szSrc, char chFind, UINT iFromPos){
  187. int iSrcLen = 0;
  188. int i = 0;
  189. if(szSrc == null){
  190. return -1;
  191. }
  192. iSrcLen = et_strlen(szSrc);
  193. if(iFromPos >= (UINT)iSrcLen){
  194. return -1;
  195. }
  196. for(i = iFromPos; i < iSrcLen; i++){
  197. if(szSrc[i] == chFind){
  198. return i;
  199. }
  200. }
  201. return -1;
  202. }
  203. int et_sz_find_not_char(const char* szSrc, char chFind, UINT iFromPos){
  204. int iSrcLen = 0;
  205. int i = 0;
  206. if(szSrc == null){
  207. return -1;
  208. }
  209. iSrcLen = et_strlen(szSrc);
  210. if(iFromPos >= (UINT)iSrcLen){
  211. return -1;
  212. }
  213. for(i = iFromPos; i < iSrcLen; i++){
  214. if(szSrc[i] != chFind){
  215. return i;
  216. }
  217. }
  218. return -1;
  219. }
  220. int et_sz_find_from(const char *szSrc, const char *szFind, UINT iFromPos){
  221. int bMatch = 0;
  222. UINT iSrcLen = 0;
  223. UINT iFindLen = 0;
  224. UINT i = 0;
  225. int iTempPos = 0;
  226. UINT iMatchCount = 0;
  227. if(szSrc == null || szFind == null){
  228. return -1;
  229. }
  230. iSrcLen = et_strlen(szSrc);
  231. iFindLen = et_strlen(szFind);
  232. if(iSrcLen - iFromPos < iFindLen
  233. || iFromPos < 0
  234. || iFromPos >= iSrcLen
  235. || iFromPos < 0)
  236. {
  237. return -1;
  238. }
  239. for(i = iFromPos; i < iSrcLen; i++){
  240. if(!bMatch){
  241. if(szSrc[i] == szFind[0]){
  242. bMatch = 1;
  243. iMatchCount = 1;
  244. iTempPos = i;
  245. }else{
  246. continue;
  247. }
  248. }else{
  249. if(szSrc[i] == szFind[iMatchCount]){
  250. iMatchCount++;
  251. }else{
  252. bMatch = 0;
  253. iMatchCount = 0;
  254. }
  255. }
  256. if(iMatchCount == iFindLen){
  257. return iTempPos;
  258. }
  259. }
  260. return -1;
  261. }
  262. int et_sz_find(const char *szSrc, const char *szFind){
  263. return et_sz_find_from(szSrc,szFind,0);
  264. }
  265. int et_sz_find_reverse(const char* szSrc, const char* szFind){
  266. int iFromPos = 0;
  267. int bMatch = 0;
  268. int iSrcLen = 0;
  269. int iFindLen = 0;
  270. int i = 0;
  271. int iTempPos = 0;
  272. int iMatchCount = 0;
  273. iFromPos = iSrcLen - 1;
  274. if(szSrc == null || szFind == null){
  275. return 0;
  276. }
  277. iSrcLen = et_strlen(szSrc);
  278. iFindLen = et_strlen(szFind);
  279. iFromPos = iSrcLen - 1;
  280. if(iSrcLen < iFindLen){
  281. return -1;
  282. }
  283. for(i = iFromPos; i >= 0; i--){
  284. if(!bMatch){
  285. if(szSrc[i] == szFind[iFindLen - 1]){
  286. bMatch = 1;
  287. iMatchCount = 1;
  288. iTempPos = i;
  289. }else{
  290. continue;
  291. }
  292. }else{
  293. if(szSrc[i] == szFind[iFindLen - iMatchCount - 1]){
  294. iMatchCount++;
  295. }else{
  296. bMatch = 0;
  297. iMatchCount = 0;
  298. }
  299. }
  300. if(iMatchCount == iFindLen){
  301. return i;
  302. }
  303. }
  304. return -1;
  305. }
  306. int et_sz_find_safe(const char* szSrc, const char* szFind, UINT iLimit){
  307. UINT i = 0;
  308. bool bCheck = false;
  309. int iCheckPos = 0;
  310. char chTemp = 0;
  311. if(szSrc == null || szFind == null){
  312. return -1;
  313. }
  314. if(szSrc == null || szFind == null){
  315. return -1;
  316. }
  317. for(i = 0; i < iLimit; i++){
  318. chTemp = szSrc[i];
  319. if(bCheck){
  320. if(chTemp == szFind[iCheckPos + 1]){
  321. iCheckPos++;
  322. }else{
  323. bCheck = false;
  324. iCheckPos = 0;
  325. }
  326. }else{
  327. if(chTemp == szFind[0]){
  328. bCheck = true;
  329. iCheckPos = 0;
  330. }
  331. }
  332. if(bCheck && (UINT)(iCheckPos + 1) == et_strlen(szFind)){
  333. return i - iCheckPos;
  334. }
  335. }
  336. return -1;
  337. }
  338. int et_sz_is_end_with(const char* szSrc, const char* szFind){
  339. int iSrcLen = 0;
  340. int iFindLen = 0;
  341. int iStartPos = 0;
  342. if(szSrc == null){
  343. return false;
  344. }
  345. if(szSrc == szFind){
  346. return false;
  347. }
  348. iSrcLen = et_strlen(szSrc);
  349. iFindLen = et_strlen(szFind);
  350. if(iFindLen > iSrcLen){
  351. return false;
  352. }
  353. iStartPos = iSrcLen - iFindLen;
  354. if(et_sz_find_from(szSrc,szFind,iStartPos) >= 0){
  355. return true;
  356. }
  357. return false;
  358. }
  359. char* et_sz_repeat(char *szDest, const char* szSrc, int iCount ){
  360. int i = 0;
  361. int iLen = 0;
  362. int iResultLen = 0;
  363. if(szDest != null){
  364. szDest[0] = 0;
  365. }
  366. if(szSrc == null){
  367. return szDest;
  368. }
  369. iLen = et_strlen(szSrc);
  370. iResultLen = iLen * iCount;
  371. for(i = 0; i < iCount; i++){
  372. et_memcpy(szDest + (i * iLen),szSrc,iLen * sizeof(char));
  373. }
  374. szDest[iResultLen] = 0;
  375. return szDest;
  376. }
  377. char* et_sz_add_chars(char* szDest, char chAdd, UINT iAddCount){
  378. UINT i = 0;
  379. int iSrcLen = 0;
  380. if(szDest == null){
  381. return null;
  382. }
  383. if(iAddCount == 0){
  384. return szDest;
  385. }
  386. iSrcLen = et_strlen(szDest);
  387. for(i = 0; i < iAddCount; i++){
  388. szDest[iSrcLen + i] = chAdd;
  389. }
  390. szDest[iSrcLen + iAddCount] = 0;
  391. return szDest;
  392. }
  393. char* et_sz_reverse( char* szSrc ){
  394. int iSrcLen = 0;
  395. int i = 0;
  396. char chTemp = 0;
  397. if(szSrc == null){
  398. return null;
  399. }
  400. iSrcLen = et_strlen(szSrc);
  401. if(iSrcLen <= 1){
  402. return szSrc;
  403. }
  404. for(i = 0; i < iSrcLen / 2; i++){
  405. chTemp = szSrc[i];
  406. szSrc[i] = szSrc[iSrcLen - i - 1];
  407. szSrc[iSrcLen - i - 1] = chTemp;
  408. }
  409. return szSrc;
  410. }
  411. char* et_sz_lower( char* szSrc ){
  412. char *pMove = null;
  413. if(szSrc == null){
  414. return null;
  415. }
  416. pMove = szSrc;
  417. while(*pMove != 0){
  418. *pMove = et_char_lower(*pMove);
  419. pMove++;
  420. }
  421. return szSrc;
  422. }
  423. char* et_sz_upper( char* szSrc ){
  424. char *pMove = null;
  425. if(szSrc == null){
  426. return null;
  427. }
  428. pMove = szSrc;
  429. while(*pMove != 0){
  430. *pMove = et_char_upper(*pMove);
  431. pMove++;
  432. }
  433. return szSrc;
  434. }
  435. bool et_sz_equal( const char* szLeft, const char* szRight ){
  436. if(szLeft == null && szRight == null){
  437. return true;
  438. }else if( szLeft == null || szRight == null ){
  439. return false;
  440. }
  441. if(et_strcmp(szLeft,szRight) != 0){
  442. return false;
  443. }
  444. return true;
  445. }
  446. bool et_sz_equal_no_case( const char* szLeft, const char* szRight ){
  447. int iLeftLen = 0;
  448. int iRightLen = 0;
  449. int i = 0;
  450. if(szLeft == null && szRight == null){
  451. return true;
  452. }else if( szLeft == null || szRight == null ){
  453. return false;
  454. }
  455. iLeftLen = et_strlen(szLeft);
  456. iRightLen = et_strlen(szRight);
  457. if(iLeftLen != iRightLen){
  458. return false;
  459. }
  460. for(i = 0; i < iLeftLen; i++){
  461. if( !et_char_equal_no_case( szLeft[i], szRight[i])){
  462. return false;
  463. }
  464. }
  465. return true;
  466. }
  467. int et_sz_count_char( const char* szSrc, char chFind ){
  468. int iRetCount = 0;
  469. if(szSrc == null){
  470. return 0;
  471. }
  472. while(*szSrc != 0){
  473. if(*szSrc == chFind){
  474. iRetCount++;
  475. }
  476. szSrc++;
  477. }
  478. return iRetCount;
  479. }
  480. int et_sz_count_sz( const char* szSrc, const char* szFind ){
  481. UINT iRetCount = 0;
  482. bool bMatch = 0;
  483. int iFromPos = 0;
  484. UINT iSrcLen = 0;
  485. UINT iFindLen = 0;
  486. UINT i = 0;
  487. UINT iMatchCharCount = 0;
  488. if(szSrc == null || szFind == null){
  489. return 0;
  490. }
  491. iSrcLen = et_strlen(szSrc);
  492. iFindLen = et_strlen(szFind);
  493. for(i = iFromPos; i < iSrcLen; i++){
  494. if(!bMatch){
  495. if(szSrc[i] == szFind[0]){
  496. bMatch = true;
  497. iMatchCharCount = 1;
  498. }else{
  499. continue;
  500. }
  501. }else{
  502. if(szSrc[i] == szFind[iMatchCharCount]){
  503. iMatchCharCount++;
  504. }else{
  505. bMatch = false;
  506. iMatchCharCount = 0;
  507. }
  508. }
  509. if(iMatchCharCount == iFindLen){
  510. iRetCount++;
  511. iMatchCharCount = 0;
  512. bMatch = false;
  513. }
  514. }
  515. return iRetCount;
  516. }
  517. char* et_sz_prefix(char* szSrc, const char* szPrefix ){
  518. int iSrcLen = 0;
  519. int iPreLen = 0;
  520. int iResultLen = 0;
  521. if(szSrc == null){
  522. return null;
  523. }
  524. if(szPrefix == null){
  525. return szSrc;
  526. }
  527. iSrcLen = et_strlen(szSrc);
  528. iPreLen = et_strlen(szPrefix);
  529. iResultLen = iSrcLen + iPreLen;
  530. if(iPreLen == 0){
  531. return szSrc;
  532. }
  533. et_memmove(szSrc + iPreLen,szSrc,iSrcLen * sizeof(char));
  534. et_memcpy(szSrc,szPrefix,iPreLen * sizeof(char));
  535. szSrc[iResultLen] = 0;
  536. return szSrc;
  537. }
  538. char* et_sz_pad_left(char* szSrc, char chPad, int iTotalLen){
  539. int iSrcLen = 0;
  540. int iPadLen = 0;
  541. int i = 0;
  542. if(szSrc == null){
  543. return null;
  544. }
  545. iSrcLen = et_strlen(szSrc);
  546. iPadLen = iTotalLen - iSrcLen;
  547. if(iSrcLen >= iTotalLen){
  548. return szSrc;
  549. }
  550. et_memmove(szSrc + iPadLen,szSrc,iSrcLen * sizeof(char));
  551. for(i = 0; i < iPadLen; i++){
  552. szSrc[i] = chPad;
  553. }
  554. szSrc[iTotalLen] = 0;
  555. return szSrc;
  556. }
  557. char* et_sz_pad_right( char* szSrc, char chPad, int iTotalLen ){
  558. int iSrcLen = 0;
  559. int iPadLen = 0;
  560. int i = 0;
  561. if(szSrc == null){
  562. return null;
  563. }
  564. iSrcLen = et_strlen(szSrc);
  565. iPadLen = iTotalLen - iSrcLen;
  566. if(iSrcLen >= iTotalLen){
  567. return szSrc;
  568. }
  569. for(i = 0; i < iPadLen; i++){
  570. szSrc[i + iSrcLen] = chPad;
  571. }
  572. szSrc[iTotalLen] = 0;
  573. return szSrc;
  574. }
  575. char* et_sz_substr(char *szDest, const char *szSrc, UINT iStart, int iSubLen){
  576. UINT iSrcLen = 0;
  577. if(szSrc == null || szDest == null){
  578. return 0;
  579. }
  580. szDest[0] = 0;
  581. iSrcLen = et_strlen(szSrc);
  582. if(iSubLen == -1){
  583. iSubLen = iSrcLen - iStart;
  584. }
  585. if(iStart + iSubLen > iSrcLen){
  586. return null;
  587. }
  588. et_memcpy(szDest, szSrc + iStart, iSubLen * sizeof(char));
  589. szDest[iSubLen] = 0;
  590. return szDest;
  591. }
  592. char* et_sz_add_slashes( char* szSrc, char chFind ){
  593. int iSrcLen = 0;
  594. char *szCopy = null;
  595. int i = 0;
  596. int iPos = 0;
  597. if(szSrc == null){
  598. return null;
  599. }
  600. iSrcLen = et_strlen(szSrc);
  601. szCopy = (char*)et_alloc((iSrcLen * 2 + 1) * sizeof(char));
  602. if(szCopy == null){
  603. return null;
  604. }
  605. for(i = 0; i < iSrcLen; i++){
  606. if(szSrc[i] == chFind
  607. || szSrc[i] == '\\')
  608. {
  609. szCopy[iPos++] = '\\';
  610. szCopy[iPos++] = szSrc[i];
  611. }else{
  612. szCopy[iPos++] = szSrc[i];
  613. }
  614. }
  615. szCopy[iPos++] = 0;
  616. et_strcpy(szSrc,szCopy);
  617. et_free(szCopy);
  618. return szSrc;
  619. }
  620. char* et_sz_strip_slashes( char* szSrc ){
  621. int iSrcLen = 0;
  622. char *szCopy = null;
  623. int i = 0;
  624. int iPos = 0;
  625. if(szSrc == null){
  626. return null;
  627. }
  628. iSrcLen = et_strlen(szSrc);
  629. szCopy = (char*)et_alloc((iSrcLen + 1) * sizeof(char));
  630. if(szCopy == null){
  631. return null;
  632. }
  633. for(i = 0; i < iSrcLen - 1; i++){
  634. if(szSrc[i] == '\\'){
  635. if(i == iSrcLen - 1){
  636. break;
  637. }else{
  638. i++;
  639. szCopy[iPos++] = szSrc[i];
  640. }
  641. }else{
  642. szCopy[iPos++] = szSrc[i];
  643. }
  644. }
  645. szCopy[iPos++] = 0;
  646. et_strcpy(szSrc,szCopy);
  647. et_free(szCopy);
  648. return szSrc;
  649. }
  650. char* et_sz_trim_left( char* szSrc ){
  651. int iSrcLen = 0;
  652. int iDestLen = 0;
  653. int iSpaceLen = 0;
  654. int i = 0;
  655. if(szSrc == null){
  656. return null;
  657. }
  658. iSrcLen = et_strlen(szSrc);
  659. if(iSrcLen == 0){
  660. return szSrc;
  661. }
  662. for(i = 0; i < iSrcLen; i++){
  663. if(et_char_is_space(szSrc[i])){
  664. iSpaceLen++;
  665. continue;
  666. }else{
  667. break;
  668. }
  669. }
  670. if(iSpaceLen == 0){
  671. return szSrc;
  672. }
  673. iDestLen = iSrcLen - iSpaceLen;
  674. et_memmove(szSrc,szSrc + iSpaceLen,iSrcLen - iSpaceLen + 1);
  675. szSrc[iDestLen] = 0;
  676. return szSrc;
  677. }
  678. char* et_sz_trim_right( char* szSrc ){
  679. int iSrcLen = 0;
  680. int i = 0;
  681. if(szSrc == null){
  682. return null;
  683. }
  684. iSrcLen = et_strlen(szSrc);
  685. if(iSrcLen == 0){
  686. return szSrc;
  687. }
  688. for(i = iSrcLen - 1; i >= 0; i--){
  689. if( et_char_is_space(szSrc[i]) ){
  690. szSrc[i] = 0;
  691. }else{
  692. break;
  693. }
  694. }
  695. return szSrc;
  696. }
  697. char* et_sz_trim( char* szSrc ){
  698. if(szSrc == null){
  699. return null;
  700. }
  701. et_sz_trim_left(szSrc);
  702. et_sz_trim_right(szSrc);
  703. return szSrc;
  704. }
  705. char* et_sz_trim_chars_left(char* szSrc, char chFind){
  706. int iSrcLen = 0;
  707. int iDestLen = 0;
  708. int iSpaceLen = 0;
  709. int i = 0;
  710. if(szSrc == null){
  711. return null;
  712. }
  713. iSrcLen = et_strlen(szSrc);
  714. if(iSrcLen == 0){
  715. return szSrc;
  716. }
  717. for(i = 0; i < iSrcLen; i++){
  718. if(szSrc[i] == chFind){
  719. iSpaceLen++;
  720. continue;
  721. }else{
  722. break;
  723. }
  724. }
  725. if(iSpaceLen == 0){
  726. return szSrc;
  727. }
  728. iDestLen = iSrcLen - iSpaceLen;
  729. et_memmove(szSrc,szSrc + iSpaceLen,iSrcLen - iSpaceLen + 1);
  730. szSrc[iDestLen] = 0;
  731. return szSrc;
  732. }
  733. char* et_sz_trim_chars_right( char* szSrc, char chFind){
  734. int iSrcLen = 0;
  735. int i = 0;
  736. if(szSrc == null){
  737. return null;
  738. }
  739. iSrcLen = et_strlen(szSrc);
  740. if(iSrcLen == 0){
  741. return szSrc;
  742. }
  743. for(i = iSrcLen - 1; i >= 0; i--){
  744. if( szSrc[i] == chFind){
  745. szSrc[i] = 0;
  746. }else{
  747. break;
  748. }
  749. }
  750. return szSrc;
  751. }
  752. char* et_sz_replace( char* szSrc, const char* szFind, const char* szReplace ){
  753. int iSrcLen = 0;
  754. int iFindLen = 0;
  755. int iReplaceLen = 0;
  756. int iTotalLen = 0;
  757. int iFindPos = 0;
  758. int iDiffLen = 0;
  759. if(szSrc == null){
  760. return null;
  761. }
  762. if(szFind == null){
  763. return szSrc;
  764. }
  765. if(szReplace == null){
  766. szReplace = ET_SZ_EMPTY;
  767. }
  768. iSrcLen = et_strlen(szSrc);
  769. iFindLen = et_strlen(szFind);
  770. iReplaceLen = et_strlen(szReplace);
  771. iTotalLen = iSrcLen;
  772. iDiffLen = iReplaceLen - iFindLen;
  773. while(1){
  774. iFindPos = et_sz_find_from(szSrc,szFind,iFindPos);
  775. if(iFindPos == -1){
  776. break;
  777. }else{
  778. et_sz_splice(szSrc,szReplace,iFindPos,iFindLen);
  779. iFindPos += iReplaceLen;
  780. iTotalLen += iDiffLen;
  781. }
  782. }
  783. szSrc[iTotalLen] = 0;
  784. return szSrc;
  785. }
  786. char* et_sz_cut(char* szSrc, UINT nStart, UINT nLen ){
  787. UINT iSrcLen = 0;
  788. UINT i = 0;
  789. UINT iDestLen = 0;
  790. if(szSrc == null){
  791. return null;
  792. }
  793. iSrcLen = et_strlen(szSrc);
  794. iDestLen = iSrcLen - nLen;
  795. if(nStart + nLen > iSrcLen){
  796. return szSrc;
  797. }
  798. for(i = nStart; i < iDestLen; i++){
  799. szSrc[i] = szSrc[i + nLen];
  800. }
  801. szSrc[iDestLen] = 0;
  802. return szSrc;
  803. }
  804. char* et_sz_insert( char* szSrc, const char* szInsert, UINT nStart ){
  805. UINT iSrcLen = 0;
  806. UINT iAppendLen = 0;
  807. UINT iDestLen = 0;
  808. UINT iRange = 0;
  809. UINT i = 0;
  810. if(szSrc == null){
  811. return null;
  812. }
  813. if(szInsert == null){
  814. szInsert = ET_SZ_EMPTY;
  815. }
  816. iSrcLen = et_strlen(szSrc);
  817. iAppendLen = et_strlen(szInsert);
  818. iDestLen = iSrcLen + iAppendLen;
  819. iRange = iSrcLen - nStart;
  820. if(nStart > iSrcLen){
  821. return szSrc;
  822. }
  823. for(i = 1; i <= iRange; i++){
  824. szSrc[iDestLen - i] = szSrc[iDestLen - i - iAppendLen];
  825. }
  826. for(i = 0; i < iAppendLen; i++){
  827. szSrc[nStart + i] = szInsert[i];
  828. }
  829. szSrc[iDestLen] = 0;
  830. return szSrc;
  831. }
  832. char* et_sz_splice( char* szSrc, const char* szInsert, UINT nStart, UINT nLen ){
  833. UINT iSrcLen = 0;
  834. if(szSrc == null){
  835. return null;
  836. }
  837. if(szInsert == null){
  838. szInsert = ET_SZ_EMPTY;
  839. }
  840. iSrcLen = et_strlen(szSrc);
  841. if(nStart < 0
  842. || nLen < 0
  843. || nStart + nLen > iSrcLen)
  844. {
  845. return szSrc;
  846. }
  847. et_sz_cut(szSrc,nStart,nLen);
  848. et_sz_insert(szSrc,szInsert,nStart);
  849. return szSrc;
  850. }
  851. bool et_sz_is_int( const char* szSrc ){
  852. int iSrcLen = 0;
  853. int i = 0;
  854. if(szSrc == null){
  855. return false;
  856. }
  857. iSrcLen = et_strlen(szSrc);
  858. if(iSrcLen == 0){
  859. return false;
  860. }
  861. if(szSrc[0] != '-' && szSrc[0] != '+' && !et_char_is_num(szSrc[0])){
  862. return false;
  863. }
  864. for(i = 1; i < iSrcLen; i++){
  865. if(!et_char_is_num(szSrc[i])){
  866. return false;
  867. }
  868. }
  869. return true;
  870. }
  871. bool et_sz_is_hex( const char* szSrc ){
  872. const char *szValid = "abcdefABCDEF0123456789";
  873. int iSrcLen = 0;
  874. int i = 0;
  875. if(szSrc == null || et_strlen(szSrc) == 0){
  876. return false;
  877. }
  878. iSrcLen = et_strlen(szSrc);
  879. if(iSrcLen == 0){
  880. return false;
  881. }
  882. if( et_strcmp(szSrc,"0x")==0
  883. || et_strcmp(szSrc,"0X") == 0){
  884. return false;
  885. }
  886. for(i = 0; i < iSrcLen; i++){
  887. if(et_sz_find_char(szValid,szSrc[i],0) == -1){
  888. if(i == 1 && (szSrc[i] == 'x' || szSrc[i] == 'X')){
  889. continue;
  890. }
  891. return false;
  892. }
  893. }
  894. return true;
  895. }
  896. bool et_sz_is_num( const char* szSrc ){
  897. UINT iSrcLen = et_strlen(szSrc);
  898. UINT i = 0;
  899. char chTemp = 0;
  900. int iDotCount = 0;
  901. if(szSrc == null){
  902. return false;
  903. }
  904. iSrcLen = et_strlen(szSrc);
  905. if(iSrcLen == 0){
  906. return false;
  907. }else if(iSrcLen > 1){
  908. for(i = 1; i < iSrcLen; i++){
  909. chTemp = *(szSrc + i);
  910. if(chTemp == '.'){
  911. iDotCount++;
  912. if(iDotCount > 1){
  913. return false;
  914. }
  915. }
  916. if( !et_char_is_num(chTemp) && chTemp != '.'){
  917. return false;
  918. }
  919. }
  920. if(chTemp == '.'){
  921. return false;
  922. }
  923. chTemp = *szSrc;
  924. if( !et_char_is_num(chTemp) ){
  925. if(chTemp != '-' && chTemp != '+'){
  926. return false;
  927. }
  928. }
  929. }else if(iSrcLen == 1){
  930. chTemp = *szSrc;
  931. if( !et_char_is_num(chTemp) ){
  932. return false;
  933. }
  934. }
  935. return true;
  936. }
  937. bool et_sz_is_domain( const char* szSrc ){
  938. int iSrcLen = et_strlen(szSrc);
  939. int i = 0;
  940. char chTemp = 0;
  941. int iDotPos = 0;
  942. if(szSrc == null){
  943. return false;
  944. }
  945. iSrcLen = et_strlen(szSrc);
  946. if(iSrcLen < 4
  947. || iSrcLen > 50){
  948. return false;
  949. }
  950. for(i = 0; i < iSrcLen; i++){
  951. chTemp = szSrc[i];
  952. if(et_char_is_num(chTemp)
  953. || et_char_is_letter(chTemp)
  954. || chTemp == '-'
  955. || chTemp == '.'
  956. )
  957. {
  958. continue;
  959. }else{
  960. return false;
  961. }
  962. }
  963. if(et_sz_count_sz(szSrc,".") == 0){
  964. return false;
  965. }
  966. iDotPos = et_sz_find(szSrc,".");
  967. if(iDotPos == -1){
  968. return false;
  969. }
  970. if(szSrc[iSrcLen - 1] == '.'
  971. || szSrc[0] == '.')
  972. {
  973. return false;
  974. }
  975. return true;
  976. }
  977. bool et_sz_is_email( const char* szSrc ){
  978. int iSrcLen = 0;
  979. int i = 0;
  980. char chTemp = 0;
  981. int iAtPos = 0;
  982. int iDotPos = 0;
  983. if(szSrc == null){
  984. return false;
  985. }
  986. iSrcLen = et_strlen(szSrc);
  987. if(iSrcLen < 6
  988. || iSrcLen > 50){
  989. return false;
  990. }
  991. for(i = 0; i < iSrcLen; i++){
  992. chTemp = szSrc[i];
  993. if(et_char_is_num(chTemp)
  994. || et_char_is_letter(chTemp)
  995. || chTemp == '-'
  996. || chTemp == '_'
  997. || chTemp == '@'
  998. || chTemp == '.'
  999. )
  1000. {
  1001. continue;
  1002. }else{
  1003. return false;
  1004. }
  1005. }
  1006. if(et_sz_count_sz(szSrc,"@") != 1){
  1007. return false;
  1008. }
  1009. iAtPos = et_sz_find(szSrc,"@");
  1010. if(iAtPos == 0
  1011. || iAtPos > iSrcLen - 5){
  1012. return false;
  1013. }
  1014. if(et_sz_count_sz(szSrc,".") == 0){
  1015. return false;
  1016. }
  1017. iDotPos = et_sz_find(szSrc,".");
  1018. if(iDotPos == -1){
  1019. return false;
  1020. }
  1021. if(szSrc[iSrcLen - 1] == '.'
  1022. || szSrc[0] == '.')
  1023. {
  1024. return false;
  1025. }
  1026. return true;
  1027. }
  1028. bool et_sz_is_ip( const char* szSrc ){
  1029. int iSrcLen = 0;
  1030. int i = 0;
  1031. char chTemp = 0;
  1032. if(szSrc == null){
  1033. return false;
  1034. }
  1035. iSrcLen = et_strlen(szSrc);
  1036. if(iSrcLen < 7
  1037. || iSrcLen > 15){
  1038. return false;
  1039. }
  1040. for(i = 0; i < iSrcLen; i++){
  1041. chTemp = szSrc[i];
  1042. if(et_char_is_num(chTemp)
  1043. || chTemp == '.')
  1044. {
  1045. continue;
  1046. }else{
  1047. return false;
  1048. }
  1049. }
  1050. if(et_sz_count_sz(szSrc,".") != 3){
  1051. return false;
  1052. }
  1053. if(szSrc[iSrcLen - 1] == '.'
  1054. || szSrc[0] == '.'){
  1055. return false;
  1056. }
  1057. return true;
  1058. }
  1059. bool et_sz_is_url( const char* szSrc ){
  1060. int iSrcLen = 0;
  1061. int i = 0;
  1062. char chTemp = 0;
  1063. int iDotPos = 0;
  1064. int iProtocolPos = 0;
  1065. const char* szValid = "~!#$%^&()_-+={[}]|:;,./\"'";
  1066. if(szSrc == null){
  1067. return false;
  1068. }
  1069. iSrcLen = et_strlen(szSrc);
  1070. if(iSrcLen < 10
  1071. || iSrcLen > 255){
  1072. return false;
  1073. }
  1074. for(i = 0; i < iSrcLen; i++){
  1075. chTemp = szSrc[i];
  1076. if(et_char_is_num(chTemp)
  1077. || et_char_is_letter(chTemp)
  1078. || et_sz_find_char(szValid,chTemp,0) != -1
  1079. )
  1080. {
  1081. continue;
  1082. }else{
  1083. return false;
  1084. }
  1085. }
  1086. if(et_sz_count_sz(szSrc,".") == 0){
  1087. return false;
  1088. }
  1089. iDotPos = et_sz_find(szSrc,".");
  1090. if(iDotPos == -1){
  1091. return false;
  1092. }
  1093. if(szSrc[iSrcLen - 1] == '.'
  1094. || szSrc[0] == '.'){
  1095. return false;
  1096. }
  1097. iProtocolPos = et_sz_find(szSrc,"://");
  1098. if(iProtocolPos == -1
  1099. || iProtocolPos < 3
  1100. || iProtocolPos > 10)
  1101. {
  1102. return false;
  1103. }
  1104. return true;
  1105. }
  1106. bool et_sz_is_ascii( const char* szSrc ){
  1107. int iSrcLen = 0;
  1108. int i = 0;
  1109. if(szSrc == null){
  1110. return false;
  1111. }
  1112. iSrcLen = et_strlen(szSrc);
  1113. for(i = 0; i < iSrcLen; i++){
  1114. if( !et_char_is_ascii( (BYTE)szSrc[i] )){
  1115. return false;
  1116. }
  1117. }
  1118. return true;
  1119. }
  1120. bool et_sz_is_limited_in( const char* szSrc, const char* szLimited ){
  1121. int iSrcLen = 0;
  1122. char chTemp = 0;
  1123. int i = 0;
  1124. if(szSrc == null){
  1125. return false;
  1126. }
  1127. if(szLimited == null){
  1128. return false;
  1129. }
  1130. iSrcLen = et_strlen(szSrc);
  1131. for(i = 0; i < iSrcLen; i++){
  1132. chTemp = szSrc[i];
  1133. if(et_sz_find_char(szLimited,chTemp,0) == -1){
  1134. return false;
  1135. }
  1136. }
  1137. return true;
  1138. }
  1139. bool et_sz_is_datetime( const char* szSrc ){
  1140. int iSrcLen = 0;
  1141. if(szSrc == null){
  1142. return false;
  1143. }
  1144. iSrcLen = et_strlen(szSrc);
  1145. if(iSrcLen != 19){
  1146. return false;
  1147. }
  1148. if(szSrc[4] != '-'){
  1149. return false;
  1150. }
  1151. if(szSrc[7] != '-'){
  1152. return false;
  1153. }
  1154. if(szSrc[10] != ' '){
  1155. return false;
  1156. }
  1157. if(szSrc[13] != ':'){
  1158. return false;
  1159. }
  1160. if(szSrc[16] != ':'){
  1161. return false;
  1162. }
  1163. if( !et_char_is_num(szSrc[0])
  1164. || !et_char_is_num(szSrc[18]) ){
  1165. return false;
  1166. }
  1167. return true;
  1168. }
  1169. char* et_sz_dec2bin(char* szSrc){
  1170. char szTemp[255] = "";
  1171. INT64 iNum = 0;
  1172. INT64 iTempQuotient = 0;
  1173. INT64 iTempRemainder = 0;
  1174. int iPos = 0;
  1175. if(szSrc == null){
  1176. return null;
  1177. }
  1178. iNum = et_sz_to_long(szSrc);
  1179. iTempQuotient = iNum;
  1180. if(iNum == 0){
  1181. szSrc[0] = '0';
  1182. szSrc[1] = 0;
  1183. return szSrc;
  1184. }
  1185. while(iTempQuotient >> 1 != 0){
  1186. iTempRemainder = iTempQuotient & 1;
  1187. iTempQuotient = iTempQuotient >> 1;
  1188. if(iTempRemainder == 0){
  1189. szTemp[iPos++] = '0';
  1190. }else{
  1191. szTemp[iPos++] = '1';
  1192. }
  1193. }
  1194. if(iTempQuotient > 0){
  1195. szTemp[iPos++] = '1';
  1196. }
  1197. szTemp[iPos++] = 0;
  1198. et_sz_reverse(szTemp);
  1199. et_strcpy(szSrc,szTemp);
  1200. return szSrc;
  1201. }
  1202. char* et_sz_bin2dec(char* szSrc){
  1203. int iSrcLen = 0;
  1204. int i = 0;
  1205. INT64 iSum = 0;
  1206. int iPow = 0;
  1207. if(szSrc == null){
  1208. return null;
  1209. }
  1210. iSrcLen = et_strlen(szSrc);
  1211. if(iSrcLen <= 0){
  1212. return szSrc;
  1213. }
  1214. for(i = iSrcLen - 1; i >= 0; i--){
  1215. if(szSrc[i] == '1'){
  1216. iSum += et_math_power(2,iPow);
  1217. }else if(szSrc[i] != '0'){
  1218. szSrc[0] = '0';
  1219. szSrc[1] = 0;
  1220. return szSrc;
  1221. }
  1222. iPow++;
  1223. }
  1224. et_sz_by_long(szSrc,iSum);
  1225. return szSrc;
  1226. }
  1227. char* et_sz_hex2dec(char* szSrc){
  1228. int iSrcLen = 0;
  1229. int i = 0;
  1230. INT64 iSum = 0;
  1231. int iPow = 0;
  1232. int iDigit = 0;
  1233. if(szSrc == null){
  1234. return null;
  1235. }
  1236. iSrcLen = et_strlen(szSrc);
  1237. for(i = iSrcLen - 1; i >= 0; i--){
  1238. if( et_sz_find_char(szSrc,szSrc[i],0) == -1 ){
  1239. szSrc[0] = '0';
  1240. szSrc[1] = 0;
  1241. return szSrc;
  1242. }
  1243. iDigit = et_char_hex_to_int(szSrc[i]);
  1244. if(szSrc[i] != '0'){
  1245. iSum += ( iDigit * et_math_power(16,iPow) );
  1246. }
  1247. iPow++;
  1248. }
  1249. et_sz_by_long(szSrc,iSum);
  1250. return szSrc;
  1251. }
  1252. char* et_sz_dec2hex(char* szSrc){
  1253. char szTemp[255] = "";
  1254. INT64 iNum = 0;
  1255. INT64 iTempQuotient = 0;
  1256. INT64 iTempRemainder = 0;
  1257. int iPos = 0;
  1258. if(szSrc == null){
  1259. return null;
  1260. }
  1261. iNum = et_sz_to_long(szSrc);
  1262. iTempQuotient = iNum;
  1263. if(iNum == 0){
  1264. szSrc[0] = '0';
  1265. szSrc[1] = 0;
  1266. return szSrc;
  1267. }
  1268. while(iTempQuotient >> 4 != 0){
  1269. iTempRemainder = iTempQuotient & 0xF;
  1270. iTempQuotient = iTempQuotient >> 4;
  1271. if(iTempRemainder == 0){
  1272. szTemp[iPos++] = '0';
  1273. }else{
  1274. szTemp[iPos++] = et_char_int_to_hex(iTempRemainder);
  1275. }
  1276. }
  1277. if(iTempQuotient > 0){
  1278. szTemp[iPos++] = et_char_int_to_hex(iTempQuotient);
  1279. }
  1280. szTemp[iPos++] = 0;
  1281. et_sz_reverse(szTemp);
  1282. et_strcpy(szSrc,szTemp);
  1283. return szSrc;
  1284. }
  1285. char* et_sz_bin2hex(char* szSrc){
  1286. if(szSrc == null){
  1287. return null;
  1288. }
  1289. et_sz_bin2dec(szSrc);
  1290. et_sz_dec2hex(szSrc);
  1291. return szSrc;
  1292. }
  1293. char* et_sz_hex2bin( char* szSrc )
  1294. {
  1295. if(szSrc == null){
  1296. return null;
  1297. }
  1298. et_sz_hex2dec(szSrc);
  1299. et_sz_dec2bin(szSrc);
  1300. return szSrc;
  1301. }
  1302. char* et_sz_format_num( char* szSrc, UINT nLenAfterPoint){
  1303. char chNext = '0';
  1304. int iSrcLen = 0;
  1305. int iDotPos = 0;
  1306. UINT iSrcDecLen = 0;
  1307. int iNewInt = 0;
  1308. int iNextNum = 0;
  1309. char szDest[255] = "";
  1310. char szPlusZeros[255] = "";
  1311. char szIntPart[255] = "";
  1312. char szDecPart[255] = "";
  1313. char szNewInt[255] = "";
  1314. char szNewDec[255] = "";
  1315. if(szSrc == null){
  1316. return null;
  1317. }
  1318. iSrcLen = et_strlen(szSrc);
  1319. if(iSrcLen == 0){
  1320. return szSrc;
  1321. }
  1322. iDotPos = et_sz_find(szSrc,".");
  1323. if(iDotPos == -1){
  1324. et_sz_repeat(szPlusZeros,"0",nLenAfterPoint);
  1325. et_strcpy(szDest,szSrc);
  1326. et_strcat(szDest,".");
  1327. et_strcat(szDest,szPlusZeros);
  1328. }else{
  1329. et_sz_substr(szIntPart,szSrc,0,iDotPos);
  1330. et_sz_substr(szDecPart,szSrc,iDotPos + 1,iSrcLen - 1 - iDotPos);
  1331. iSrcDecLen = et_strlen(szDecPart);
  1332. if(iSrcDecLen == nLenAfterPoint){
  1333. et_strcpy(szDest,szSrc);
  1334. }else if(iSrcDecLen < nLenAfterPoint){
  1335. et_sz_repeat(szPlusZeros,"0",nLenAfterPoint - iSrcDecLen);
  1336. et_strcpy(szDest,szSrc);
  1337. et_strcat(szDest,szPlusZeros);
  1338. }else{
  1339. et_strcpy(szNewInt,szIntPart);
  1340. et_strncat(szNewInt,szDecPart,nLenAfterPoint);
  1341. iNewInt = et_sz_to_int(szNewInt);
  1342. chNext = szDecPart[nLenAfterPoint];
  1343. iNextNum = et_char_to_int(chNext);
  1344. if(iNextNum >= 5){
  1345. iNewInt++;
  1346. }
  1347. et_sz_by_int(szNewInt,iNewInt);
  1348. if(nLenAfterPoint == 0){
  1349. et_strcpy(szDest,szNewInt);
  1350. }else{
  1351. if(et_strlen(szNewInt) <= nLenAfterPoint){
  1352. et_sz_repeat(szPlusZeros,"0",nLenAfterPoint - et_strlen(szNewInt) + 1);
  1353. et_sz_prefix(szPlusZeros,szNewInt);
  1354. }
  1355. et_sz_substr(szNewDec,szNewInt,et_strlen(szNewInt) - nLenAfterPoint,nLenAfterPoint);
  1356. et_strncpy(szDest,szNewInt,et_strlen(szNewInt) - nLenAfterPoint);
  1357. et_strcat(szDest,".");
  1358. et_strcat(szDest,szNewDec);
  1359. }
  1360. }
  1361. }
  1362. et_strcpy(szSrc,szDest);
  1363. return szSrc;
  1364. }
  1365. void et_sz_alloc_array( char ***szArr, int iRow, int iCol ){
  1366. int i = 0;
  1367. *szArr = (char**)et_alloc(sizeof(char*) * iRow);
  1368. for(i = 0; i < iRow; i++){
  1369. (*szArr)[i] = (char*)et_alloc(sizeof(char) * iCol);
  1370. et_memset((*szArr)[i], 0, iCol);
  1371. }
  1372. }
  1373. void et_sz_et_free_array( char ***szArr, int iRow ){
  1374. int i = 0;
  1375. if(*szArr == null){
  1376. return;
  1377. }
  1378. for(i = 0; i < iRow; i++){
  1379. if((*szArr)[i] == null){
  1380. continue;
  1381. }
  1382. et_free((*szArr)[i] );
  1383. }
  1384. et_free(*szArr);
  1385. }
  1386. INT64 et_sz_ip_text2num( const char* szIpText ){
  1387. INT64 iTotal = 0;
  1388. int iPointPos0 = -1;
  1389. int iPointPos1 = 0;
  1390. int iPointPos2 = 0;
  1391. int iPointPos3 = 0;
  1392. char szPart0[5] = "";
  1393. char szPart1[5] = "";
  1394. char szPart2[5] = "";
  1395. char szPart3[5] = "";
  1396. INT64 iPart0 = 0;
  1397. INT64 iPart1 = 0;
  1398. INT64 iPart2 = 0;
  1399. INT64 iPart3 = 0;
  1400. if(szIpText == null){
  1401. return 0;
  1402. }
  1403. if(!et_sz_is_ip(szIpText)){
  1404. return 0;
  1405. }
  1406. iPointPos1 = et_sz_find_from(szIpText,".",0);
  1407. if(iPointPos1 == -1){
  1408. return 0;
  1409. }
  1410. iPointPos2 = et_sz_find_from(szIpText,".",iPointPos1 + 1);
  1411. if(iPointPos2 == -1){
  1412. return 0;
  1413. }
  1414. iPointPos3 = et_sz_find_from(szIpText,".",iPointPos2 + 1);
  1415. if(iPointPos3 == -1){
  1416. return 0;
  1417. }
  1418. et_sz_substr(szPart0, szIpText,iPointPos0 + 1,iPointPos1 - iPointPos0 - 1);
  1419. et_sz_substr(szPart1, szIpText,iPointPos1 + 1,iPointPos2 - iPointPos1 - 1);
  1420. et_sz_substr(szPart2, szIpText,iPointPos2 + 1,iPointPos3 - iPointPos2 - 1);
  1421. et_sz_substr(szPart3, szIpText,iPointPos3 + 1, -1);
  1422. iPart0 = et_sz_to_long(szPart0);
  1423. iPart1 = et_sz_to_long(szPart1);
  1424. iPart2 = et_sz_to_long(szPart2);
  1425. iPart3 = et_sz_to_long(szPart3);
  1426. iTotal += (iPart0 << 24);
  1427. iTotal += (iPart1 << 16);
  1428. iTotal += (iPart2 << 8);
  1429. iTotal += iPart3;
  1430. return iTotal;
  1431. }
  1432. char* et_sz_ip_num2text( char *szDest, INT64 iIpNum ){
  1433. char szPart0[5] = "";
  1434. char szPart1[5] = "";
  1435. char szPart2[5] = "";
  1436. char szPart3[5] = "";
  1437. INT64 iTotal = 0;
  1438. INT64 iPart0 = 0;
  1439. INT64 iPart1 = 0;
  1440. INT64 iPart2 = 0;
  1441. INT64 iPart3 = 0;
  1442. if(szDest != null){
  1443. szDest[0] = 0;
  1444. }
  1445. if(szDest == null){
  1446. return null;
  1447. }
  1448. iTotal = iIpNum;
  1449. iPart0 = (iTotal >> 24);
  1450. iPart1 = (iTotal >> 16) & 0x00FF;
  1451. iPart2 = (iTotal >> 8) & 0x0000FF;
  1452. iPart3 = (iTotal >> 0) & 0x000000FF;
  1453. szDest[0] = 0;
  1454. et_sz_by_long(szPart0,iPart0);
  1455. et_sz_by_long(szPart1,iPart1);
  1456. et_sz_by_long(szPart2,iPart2);
  1457. et_sz_by_long(szPart3,iPart3);
  1458. et_strcat(szDest,szPart0);
  1459. et_strcat(szDest,".");
  1460. et_strcat(szDest,szPart1);
  1461. et_strcat(szDest,".");
  1462. et_strcat(szDest,szPart2);
  1463. et_strcat(szDest,".");
  1464. et_strcat(szDest,szPart3);
  1465. return szDest;
  1466. }
  1467. char* et_sz_file_dir( char* szDest, const char* szSrc ){
  1468. int nSlashPos = 0;
  1469. int iLen = 0;
  1470. if(szSrc == null || szDest == null){
  1471. return null;
  1472. }
  1473. szDest[0] = 0;
  1474. et_strcpy(szDest,szSrc);
  1475. et_sz_replace(szDest,"\\","/");
  1476. iLen = et_strlen(szDest);
  1477. if(szDest[iLen - 1] == '/'){
  1478. szDest[iLen - 1] = 0;
  1479. }
  1480. nSlashPos = et_sz_find_reverse(szDest,"/");
  1481. if(nSlashPos == -1){
  1482. szDest[0] = 0;
  1483. return szDest;
  1484. }
  1485. iLen = et_strlen(szDest);
  1486. et_sz_cut(szDest,nSlashPos + 1,iLen - nSlashPos - 1);
  1487. return szDest;
  1488. }
  1489. char* et_sz_file_name( char* szDest, const char* szSrc ){
  1490. int nSlashPos = 0;
  1491. if(szSrc == null || szDest == null){
  1492. return null;
  1493. }
  1494. szDest[0] = 0;
  1495. et_strcpy(szDest,szSrc);
  1496. et_sz_replace(szDest,"\\","/");
  1497. nSlashPos = et_sz_find_reverse(szDest,"/");
  1498. if(nSlashPos == -1){
  1499. return szDest;
  1500. }
  1501. et_sz_cut(szDest,0,nSlashPos + 1);
  1502. return szDest;
  1503. }
  1504. char* et_sz_file_end( char* szDest, const char* szSrc ){
  1505. int nSlashPos = 0;
  1506. int iLen = 0;
  1507. if(szSrc == null || szDest == null){
  1508. return null;
  1509. }
  1510. szDest[0] = 0;
  1511. et_strcpy(szDest,szSrc);
  1512. et_sz_replace(szDest,"\\","/");
  1513. iLen = et_strlen(szDest);
  1514. if(szDest[iLen - 1] == '/'){
  1515. szDest[iLen - 1] = 0;
  1516. }
  1517. nSlashPos = et_sz_find_reverse(szDest,"/");
  1518. if(nSlashPos == -1){
  1519. return szDest;
  1520. }
  1521. et_sz_cut(szDest,0,nSlashPos + 1);
  1522. return szDest;
  1523. }
  1524. char* et_sz_file_title( char* szDest, const char* szSrc ){
  1525. int nDotPos = 0;
  1526. if(szSrc == null || szDest == null){
  1527. return null;
  1528. }
  1529. szDest[0] = 0;
  1530. et_sz_file_name(szDest,szSrc);
  1531. nDotPos = et_sz_find_reverse(szDest,".");
  1532. if(nDotPos == -1){
  1533. //no prefix
  1534. return szDest;
  1535. }else if(nDotPos == 0){
  1536. //like ".config"
  1537. return szDest;
  1538. }
  1539. et_sz_cut(szDest,nDotPos,et_strlen(szDest) - nDotPos);
  1540. return szDest;
  1541. }
  1542. char* et_sz_file_ext( char* szDest, const char* szSrc ){
  1543. int nDotPos = 0;
  1544. if(szSrc == null || szDest == null){
  1545. return null;
  1546. }
  1547. szDest[0] = 0;
  1548. et_strcpy(szDest,szSrc);
  1549. nDotPos = et_sz_find_reverse(szDest,".");
  1550. if(nDotPos == -1){
  1551. return szDest;
  1552. }
  1553. et_sz_cut(szDest,0,nDotPos);
  1554. return szDest;
  1555. }
  1556. char* et_sz_file_fix_dir( char* szDest, const char* szSrc ){
  1557. int iLen = 0;
  1558. if(szSrc == null || szDest == null){
  1559. return null;
  1560. }
  1561. szDest[0] = 0;
  1562. iLen = et_strlen(szSrc);
  1563. if(iLen == 0){
  1564. return szDest;
  1565. }
  1566. et_strcpy(szDest,szSrc);
  1567. et_sz_replace(szDest,"\\","/");
  1568. iLen = et_strlen(szDest);
  1569. if(iLen == 1){
  1570. return szDest;
  1571. }
  1572. if(szDest[iLen - 1] == '/'){
  1573. szDest[iLen - 1] = 0;
  1574. }
  1575. return szDest;
  1576. }
  1577. char* et_sz_url_protocol( char *szDest, const char* szSrc ){
  1578. int iColonPos = 0;
  1579. int iSrcLen = 0;
  1580. if(szSrc == null || szDest == null){
  1581. return null;
  1582. }
  1583. szDest[0] = 0;
  1584. iSrcLen = et_strlen(szSrc);
  1585. if(iSrcLen < 3){
  1586. return szDest;
  1587. }
  1588. iColonPos = et_sz_find(szSrc,":/");
  1589. if(iColonPos == -1){
  1590. return szDest;
  1591. }
  1592. et_sz_substr(szDest,szSrc,0,iColonPos);
  1593. return szDest;
  1594. }
  1595. char* et_sz_url_host( char *szDest, const char* szSrc ){
  1596. int iBegin = 0;
  1597. int iEnd = 0;
  1598. int iFindPos = 0;
  1599. int iSrcLen = 0;
  1600. int iPortColonPos = 0;
  1601. if(szSrc == null || szDest == null){
  1602. return null;
  1603. }
  1604. szDest[0] = 0;
  1605. iSrcLen = et_strlen(szSrc);
  1606. if(iSrcLen < 3){
  1607. return szDest;
  1608. }
  1609. iFindPos = et_sz_find(szSrc,":/");
  1610. if(iFindPos == -1){
  1611. iBegin = 0;
  1612. }else{
  1613. iBegin = iFindPos + 2;
  1614. if(szSrc[iBegin] == '/'){
  1615. iBegin++;
  1616. }
  1617. }
  1618. iFindPos = et_sz_find_from(szSrc,"/",iBegin + 1);
  1619. if(iFindPos == -1){
  1620. iEnd = iSrcLen - 1;
  1621. }else{
  1622. iEnd = iFindPos - 1;
  1623. }
  1624. et_sz_substr(szDest,szSrc,iBegin,iEnd - iBegin + 1);
  1625. iPortColonPos = et_sz_find(szDest,":");
  1626. if(iPortColonPos != -1){
  1627. szDest[iPortColonPos] = 0;
  1628. }
  1629. return szDest;
  1630. }
  1631. USHORT et_sz_url_port( const char* szSrc ){
  1632. USHORT iRetPort = 0;
  1633. int iBegin = 0;
  1634. int iEnd = 0;
  1635. int iFindPos = 0;
  1636. int iSrcLen = 0;
  1637. char szTemp[20] = "";
  1638. if(szSrc == null){
  1639. return 0;
  1640. }
  1641. iSrcLen = et_strlen(szSrc);
  1642. if(iSrcLen < 3){
  1643. return 0;
  1644. }
  1645. iFindPos = et_sz_find(szSrc,":/");
  1646. if(iFindPos == -1){
  1647. iFindPos = et_sz_find(szSrc,":");
  1648. }else{
  1649. iFindPos = et_sz_find_from(szSrc,":",iFindPos + 1);
  1650. }
  1651. if(iFindPos == -1){
  1652. return 80;
  1653. }else{
  1654. iBegin = iFindPos + 1;
  1655. }
  1656. iFindPos = et_sz_find_from(szSrc,"/",iBegin + 1);
  1657. if(iFindPos == -1){
  1658. iEnd = iSrcLen - 1;
  1659. }else{
  1660. iEnd = iFindPos - 1;
  1661. }
  1662. if(iEnd > iBegin)
  1663. {
  1664. et_sz_substr(szTemp,szSrc,iBegin,iEnd - iBegin + 1);
  1665. iRetPort = et_sz_to_int(szTemp);
  1666. }else{
  1667. iRetPort = 80;
  1668. }
  1669. return iRetPort;
  1670. }
  1671. char* et_sz_url_path( char *szDest, const char* szSrc ){
  1672. int iSrcLen = 0;
  1673. int iFindPos = 0;
  1674. if(szSrc == null || szDest == null){
  1675. return null;
  1676. }
  1677. szDest[0] = 0;
  1678. iSrcLen = et_strlen(szSrc);
  1679. iFindPos = et_sz_find_from(szSrc,":/",0);
  1680. if(iFindPos != -1){
  1681. iFindPos += 3;
  1682. if(szSrc[iFindPos] == '/'){
  1683. iFindPos++;
  1684. }
  1685. }
  1686. iFindPos = et_sz_find_from(szSrc,"/",iFindPos);
  1687. if(iFindPos == -1){
  1688. et_strcpy(szDest,"/");
  1689. }else{
  1690. et_sz_substr(szDest,szSrc,iFindPos,-1);
  1691. }
  1692. iFindPos = et_sz_find(szDest,"?");
  1693. if(iFindPos != -1){
  1694. szDest[iFindPos] = 0;
  1695. }
  1696. return szDest;
  1697. }
  1698. char* et_sz_url_param( char *szDest, const char* szSrc ){
  1699. int iSrcLen = et_strlen(szSrc);
  1700. int iFindPos = 0;
  1701. if(szSrc == null || szDest == null){
  1702. return null;
  1703. }
  1704. szDest[0] = 0;
  1705. iSrcLen = et_strlen(szSrc);
  1706. iFindPos = et_sz_find_from(szSrc,"?",0);
  1707. if(iFindPos == -1){
  1708. return szDest;
  1709. }
  1710. et_sz_substr(szDest,szSrc,iFindPos + 1,-1);
  1711. return szDest;
  1712. }
  1713. char* et_sz_url_path_with_param( char *szDest, const char* szSrc ){
  1714. int iSrcLen = 0;
  1715. int iFindPos = 0;
  1716. if(szSrc == null || szDest == null){
  1717. return null;
  1718. }
  1719. szDest[0] = 0;
  1720. iSrcLen = et_strlen(szSrc);
  1721. iFindPos = et_sz_find_from(szSrc,":/",0);
  1722. if(iFindPos != -1){
  1723. iFindPos += 3;
  1724. if(szSrc[iFindPos] == '/'){
  1725. iFindPos++;
  1726. }
  1727. }else{
  1728. iFindPos = 0;
  1729. }
  1730. iFindPos = et_sz_find_from(szSrc,"/",iFindPos);
  1731. if(iFindPos == -1){
  1732. return szDest;
  1733. }
  1734. et_sz_substr(szDest,szSrc,iFindPos,-1);
  1735. return szDest;
  1736. }
  1737. char* et_sz_hex_increase( char *szSrc ){
  1738. int iSrcLen = 0;
  1739. int iDestLen = 0;
  1740. int iDecimal = 0;
  1741. char szTemp[50] = "";
  1742. if(!et_sz_is_hex(szSrc)){
  1743. return null;
  1744. }
  1745. iSrcLen = et_strlen(szSrc);
  1746. et_strcpy(szTemp,szSrc);
  1747. et_sz_trim_chars_left(szTemp,'0');
  1748. et_sz_hex2dec(szTemp);
  1749. iDecimal = et_sz_to_long(szTemp);
  1750. iDecimal++;
  1751. et_sz_by_long(szTemp,iDecimal);
  1752. et_sz_dec2hex(szTemp);
  1753. iDestLen = et_strlen(szTemp);
  1754. if(iDestLen > iSrcLen){
  1755. et_sz_repeat(szSrc,"0",iSrcLen);
  1756. return szSrc;
  1757. }
  1758. et_sz_pad_left(szTemp,'0',iSrcLen);
  1759. et_strcpy(szSrc,szTemp);
  1760. return szSrc;
  1761. }
  1762. int et_sz_hex_to_bytes( BYTE* pByte, const char* szStr ){
  1763. int iStrLen = 0;
  1764. char szTemp[3] = "";
  1765. char szDec[50] = "";
  1766. int iTempDec = 0;
  1767. int iByteCount = 0;
  1768. int i = 0;
  1769. if(szStr == null || pByte == null){
  1770. return 0;
  1771. }
  1772. iStrLen = et_strlen(szStr);
  1773. for(i = 0; i < iStrLen; i++){
  1774. if(i == iStrLen - 1){
  1775. break;
  1776. }
  1777. et_memset(szTemp,0,3 * sizeof(char));
  1778. et_memset(szDec,0,50 * sizeof(char));
  1779. et_strncpy(szTemp,szStr + i,2);
  1780. et_strcpy(szDec,szTemp);
  1781. et_sz_hex2dec(szDec);
  1782. iTempDec = et_sz_to_int(szDec);
  1783. pByte[iByteCount++] = (BYTE)iTempDec;
  1784. i++;
  1785. }
  1786. return iByteCount;
  1787. }
  1788. char* et_sz_hex_from_bytes( char* szHex, const BYTE* pBytes, int iByteCount ){
  1789. char szTemp[10] = "";
  1790. int iTempInt = 0;
  1791. int i = 0;
  1792. if(szHex == null || pBytes == null){
  1793. return null;
  1794. }
  1795. szHex[0] = 0;
  1796. for(i = 0; i < iByteCount; i++){
  1797. iTempInt = pBytes[i];
  1798. et_memset(szTemp,0,10 * sizeof(char));
  1799. et_sz_by_int(szTemp,iTempInt);
  1800. et_sz_dec2hex(szTemp);
  1801. et_sz_pad_left(szTemp,'0',2);
  1802. et_strcat(szHex,szTemp);
  1803. }
  1804. return szHex;
  1805. }
  1806. char* et_sz_delimit( char* szSrc, int iUnitLen, char chDeimiter ){
  1807. int iSrcLen = 0;
  1808. char *szCopy = null;
  1809. int iPos = 0;
  1810. int i = 0;
  1811. if(szSrc == null){
  1812. return null;
  1813. }
  1814. iSrcLen = et_strlen(szSrc);
  1815. if(iSrcLen == 0){
  1816. return szSrc;
  1817. }
  1818. szCopy = (char*)et_alloc( (iSrcLen * 2 + 1) * sizeof(char) );
  1819. et_memset(szCopy,0,(iSrcLen * 2 + 1) * sizeof(char));
  1820. et_strcpy(szCopy,szSrc);
  1821. for(i = 0; i < iSrcLen / iUnitLen; i++){
  1822. if(i != 0){
  1823. szCopy[iPos++] = chDeimiter;
  1824. }
  1825. szCopy[iPos++] = szSrc[i*2];
  1826. szCopy[iPos++] = szSrc[i*2+1];
  1827. }
  1828. et_strcpy(szSrc,szCopy);
  1829. et_free(szCopy);
  1830. return szSrc;
  1831. }
  1832. char* et_sz_fix_time(char* szDest, const char* szSrc){
  1833. int iSrcLen = 0;
  1834. if(szSrc == null || szDest == null){
  1835. return null;
  1836. }
  1837. iSrcLen = et_strlen(szSrc);
  1838. et_strcpy(szDest,szSrc);
  1839. if(iSrcLen == 4){
  1840. et_strcat(szDest,"-00-00 00:00:00");
  1841. }else if(iSrcLen == 7){
  1842. et_strcat(szDest,"-00 00:00:00");
  1843. }else if(iSrcLen == 10){
  1844. et_strcat(szDest," 00:00:00");
  1845. }else if(iSrcLen == 13){
  1846. et_strcat(szDest,":00:00");
  1847. }else if(iSrcLen == 16){
  1848. et_strcat(szDest,":00");
  1849. }
  1850. return szDest;
  1851. }
  1852. char* et_sz_html_enc(char* szDest, const char* szSrc){
  1853. if(szDest == null || szSrc == null){
  1854. return 0;
  1855. }
  1856. et_strcpy(szDest,szSrc);
  1857. et_sz_replace(szDest,"<","&lt;");
  1858. et_sz_replace(szDest,">","&gt;");
  1859. et_sz_replace(szDest,"&","&amp;");
  1860. et_sz_replace(szDest,"\"","&quot;");
  1861. et_sz_replace(szDest," ","&nbsp;");
  1862. et_sz_replace(szDest,"<","&lt;");
  1863. return szDest;
  1864. }
  1865. char* et_sz_html_dec(char* szDest, const char* szSrc){
  1866. if(szDest == null || szSrc == null){
  1867. return 0;
  1868. }
  1869. et_strcpy(szDest,szSrc);
  1870. et_sz_replace(szDest,"&lt;","<");
  1871. et_sz_replace(szDest,"&gt;",">");
  1872. et_sz_replace(szDest,"&amp;","&");
  1873. et_sz_replace(szDest,"&quot;","\"");
  1874. et_sz_replace(szDest,"&nbsp;"," ");
  1875. et_sz_replace(szDest,"&lt;","<");
  1876. return null;
  1877. }
  1878. int et_sz_split(EtLists* pList, const char* szSrc, const char* szDelimiter){
  1879. int iResult = 0;
  1880. int iSrcLen = 0;
  1881. int nStart = 0;
  1882. int nCount = 0;
  1883. int nPos = 0;
  1884. int nDelimiterLen = 0;
  1885. char szTemp[40960] = {0};
  1886. if(pList == null || szSrc == null || szDelimiter == NULL){
  1887. return ET_ERR_MEM_NULL;
  1888. }
  1889. et_lists_clear(pList);
  1890. nDelimiterLen = et_strlen(szDelimiter);
  1891. while(true){
  1892. nPos = et_sz_find_from(szSrc,szDelimiter,nStart);
  1893. if(nPos == -1){
  1894. break;
  1895. }
  1896. nCount++;
  1897. et_sz_substr(szTemp,szSrc,nStart,nPos - nStart);
  1898. et_lists_add(pList,szTemp);
  1899. nStart = nPos + nDelimiterLen;
  1900. }
  1901. nCount++;
  1902. et_sz_substr(szTemp,szSrc,nStart,-1);
  1903. et_lists_add(pList,szTemp);
  1904. return nCount;
  1905. }
  1906. char* et_sz_join(EtLists* pList, char* szDest, const char* szDelimiter){
  1907. char szTemp[40960] = {0};
  1908. int iListSize = 0;
  1909. int i = 0;
  1910. if(szDelimiter == null || szDest == null || pList == null){
  1911. return null;
  1912. }
  1913. szDest[0] = 0;
  1914. iListSize = et_lists_size(pList);
  1915. for(i = 0; i < iListSize; i++){
  1916. if(i != 0){
  1917. et_strcat(szDest,szDelimiter);
  1918. }
  1919. et_lists_get(pList,i,szTemp);
  1920. et_strcat(szDest,szTemp);
  1921. }
  1922. return szDest;
  1923. }
  1924. /////////////////////////////////////////////////////////////////////////////////////////////////////////
  1925. #define ET_URLENCODE_CHARS "!#$%&'()*+,./:;=?"
  1926. static char et_url_2_to_1(const char * szCode) {
  1927. unsigned char chDest = 0;
  1928. int iLeft = 0;
  1929. int iRight = 0;
  1930. if(szCode == null){
  1931. return -1;
  1932. }
  1933. iLeft = et_char_hex_to_int(szCode[0]);
  1934. iRight = et_char_hex_to_int(szCode[1]);
  1935. if(iLeft == -1 || iRight == -1){
  1936. return -1;
  1937. }
  1938. chDest = (iLeft << 4) + iRight;
  1939. return chDest;
  1940. }
  1941. char* et_url_encode(char *szDest, const char *szSrc, bool bEncodeAll){
  1942. int i = 0;
  1943. int j = 0;
  1944. unsigned char chSrcTemp;
  1945. int iSrcLen = 0;
  1946. if(szDest == null || szSrc == null){
  1947. return null;
  1948. }
  1949. iSrcLen = et_strlen(szSrc);
  1950. if(iSrcLen == 0){
  1951. szDest[0] = 0;
  1952. return szDest;
  1953. }
  1954. for(i = 0; i < iSrcLen; i++){
  1955. chSrcTemp = szSrc[i];
  1956. if(et_sz_find_char(ET_URLENCODE_CHARS, chSrcTemp, 0) != -1){
  1957. if(bEncodeAll){
  1958. szDest[j++] = '%';
  1959. szDest[j++] = et_char_int_to_hex( (chSrcTemp >> 4) & 0x0F );
  1960. szDest[j++] = et_char_int_to_hex( chSrcTemp & 0x0F );
  1961. }else{
  1962. szDest[j++] = chSrcTemp;
  1963. }
  1964. }else if (chSrcTemp == ' '){
  1965. szDest[j++] = '+';
  1966. }else if (et_char_is_num(chSrcTemp) || et_char_is_letter(chSrcTemp) ){
  1967. szDest[j++] = chSrcTemp;
  1968. }else{
  1969. szDest[j++] = '%';
  1970. szDest[j++] = et_char_int_to_hex( (chSrcTemp >> 4) & 0x0F );
  1971. szDest[j++] = et_char_int_to_hex( chSrcTemp & 0x0F );
  1972. }
  1973. }
  1974. szDest[j] = 0;
  1975. return szDest;
  1976. }
  1977. char* et_url_decode(char *szDest, const char *szSrc){
  1978. int i = 0;
  1979. int j = 0;
  1980. unsigned char chSrcTemp;
  1981. char chDestTemp;
  1982. int iSrcLen = 0;
  1983. if(szDest == null || szSrc == null){
  1984. return null;
  1985. }
  1986. iSrcLen = et_strlen(szSrc);
  1987. if(iSrcLen == 0){
  1988. szDest[0] = 0;
  1989. return szDest;
  1990. }
  1991. for(i = 0; i < iSrcLen; i++){
  1992. chSrcTemp = szSrc[i];
  1993. if(chSrcTemp == '+'){
  1994. szDest[j++] = ' ';
  1995. }else if(chSrcTemp == '%'){
  1996. if(iSrcLen - i <= 2){
  1997. break;
  1998. }
  1999. chDestTemp = et_url_2_to_1(szSrc + i + 1);
  2000. if(chDestTemp < 0){
  2001. szDest[j++] = '?';
  2002. }else{
  2003. szDest[j++] = chDestTemp;
  2004. }
  2005. i += 2;
  2006. }else{
  2007. szDest[j++] = chSrcTemp;
  2008. }
  2009. }
  2010. szDest[j] = 0;
  2011. return szDest;
  2012. }
  2013. //////////////////////////////////////////////////////////////
  2014. #ifdef ET_IN_KERNEL
  2015. #else
  2016. #include <stdlib.h>
  2017. #endif //#ifdef ET_IN_KERNEL
  2018. INT64 et_limit_between(INT64 iNum, INT64 iMin, INT64 iMax){
  2019. if(iNum < iMin){
  2020. return iMin;
  2021. }else if(iNum > iMax){
  2022. return iMax;
  2023. }else{
  2024. return iNum;
  2025. }
  2026. }
  2027. void* et_alloc(unsigned int iSize){
  2028. #ifdef ET_IN_KERNEL
  2029. return kalloc(iSize);
  2030. #else
  2031. return malloc(iSize);
  2032. #endif
  2033. }
  2034. void et_free(void* pPtr){
  2035. #ifdef ET_IN_KERNEL
  2036. return kfree(pPtr);
  2037. #else
  2038. return free(pPtr);
  2039. #endif
  2040. }
  2041. //////////////////////////////////////////////////////////////////////
  2042. static const char *et_base64_s_sz_char_table =
  2043. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  2044. static const BYTE et_base64_s_arr_map_table[256] ={
  2045. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2046. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2047. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2048. 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
  2049. 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,
  2050. 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6,
  2051. 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
  2052. 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,
  2053. 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
  2054. 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  2055. 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2056. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2057. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2058. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2059. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2060. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2061. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2062. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2063. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2064. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2065. 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
  2066. 255, 255, 255, 255
  2067. };
  2068. char* et_base64_encode(char *szDest, const char *szSrc){
  2069. int i = 0;
  2070. int iSrcLen = 0;
  2071. int iLoop = 0;
  2072. BYTE *pLoop = (BYTE *)szDest;
  2073. BYTE *pIn = (BYTE *)szSrc;
  2074. BYTE chA = 0;
  2075. BYTE chB = 0;
  2076. BYTE chC = 0;
  2077. if(szDest == null){
  2078. return null;
  2079. }
  2080. szDest[0] = 0;
  2081. if(szSrc == null){
  2082. return szDest;
  2083. }
  2084. iSrcLen = et_strlen(szSrc);
  2085. iLoop = 3 * (iSrcLen / 3);
  2086. for(i = 0; i < iLoop; i += 3){
  2087. *pLoop++ = et_base64_s_sz_char_table[pIn[0] >> 2];
  2088. *pLoop++ = et_base64_s_sz_char_table[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];
  2089. *pLoop++ = et_base64_s_sz_char_table[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];
  2090. *pLoop++ = et_base64_s_sz_char_table[pIn[2] & 0x3f];
  2091. pIn += 3;
  2092. }
  2093. if (i < iSrcLen){
  2094. chA = pIn[0];
  2095. chB = ((i + 1) < iSrcLen) ? pIn[1] : 0;
  2096. chC = 0;
  2097. *pLoop++ = et_base64_s_sz_char_table[chA >> 2];
  2098. *pLoop++ = et_base64_s_sz_char_table[((chA & 3) << 4) + (chB >> 4)];
  2099. *pLoop++ = ((i + 1) < iSrcLen) ? et_base64_s_sz_char_table[((chB & 0xf) << 2) + (chC >> 6)] : '=';
  2100. *pLoop++ = '=';
  2101. }
  2102. *pLoop = 0;
  2103. return szDest;
  2104. }
  2105. char* et_base64_decode(char *szDest, const char *szSrc){
  2106. int iSrcLen = 0;
  2107. int iMiddle = 0;
  2108. int iSrcIndex = 0;
  2109. int iCheck4 = 0;
  2110. int iNewIndex = 0;
  2111. int iMode3 = 3;
  2112. BYTE bySrcTemp = 0;
  2113. BYTE *pIn = (BYTE*)szSrc;
  2114. BYTE *pOut = (BYTE*)szDest;
  2115. if(szDest == null){
  2116. return null;
  2117. }
  2118. szDest[0] = 0;
  2119. if(szSrc == null){
  2120. return szDest;
  2121. }
  2122. iSrcLen = et_strlen((const char*)szSrc);
  2123. for(iSrcIndex = 0; iSrcIndex < iSrcLen; iSrcIndex++){
  2124. bySrcTemp = et_base64_s_arr_map_table[pIn[iSrcIndex]];
  2125. if(bySrcTemp == 255){
  2126. continue;
  2127. }
  2128. if(bySrcTemp == 254){
  2129. bySrcTemp = 0;
  2130. iMode3--;
  2131. }
  2132. iMiddle = (iMiddle << 6) | bySrcTemp;
  2133. if(++iCheck4 == 4){
  2134. pOut[iNewIndex++] = (BYTE)((iMiddle >> 16) & 255);
  2135. if(iMode3 > 1){
  2136. pOut[iNewIndex++] = (BYTE)((iMiddle >> 8) & 255);
  2137. }
  2138. if(iMode3 > 2){
  2139. pOut[iNewIndex++] = (BYTE)(iMiddle & 255);
  2140. }
  2141. iCheck4 = iMiddle = 0;
  2142. }
  2143. }
  2144. pOut[iNewIndex++] = 0;
  2145. return szDest;
  2146. }
  2147. ///////////////////////////////////////////////////////////////
  2148. int et_char_to_int( char chSrc ){
  2149. if(!et_char_is_num(chSrc)){
  2150. return 0;
  2151. }
  2152. return (int)chSrc - 0x30;
  2153. }
  2154. char et_char_by_int(int iSrc){
  2155. if(iSrc > 10 || iSrc < 0)
  2156. {
  2157. return '0';
  2158. }
  2159. return iSrc + 0x30;
  2160. }
  2161. int et_char_hex_to_int(char chHex){
  2162. const char *szHex = ET_SZ_HEX_UP;
  2163. int i = 0;
  2164. char chUpper = et_char_upper(chHex);
  2165. for(i = 0; i < 16; i++){
  2166. if(chUpper == szHex[i]){
  2167. return i;
  2168. }
  2169. }
  2170. return -1;
  2171. }
  2172. char et_char_int_to_hex(int iNum){
  2173. const char *szHex = ET_SZ_HEX_UP;
  2174. if(iNum < 16 && iNum >= 0){
  2175. return szHex[iNum];
  2176. }
  2177. return -1;
  2178. }
  2179. bool et_char_equal_no_case(char chLeft, char chRight){
  2180. if(chLeft == chRight){
  2181. return true;
  2182. }else if(et_char_upper(chLeft) == et_char_upper(chRight)){
  2183. return true;
  2184. }
  2185. return false;
  2186. }
  2187. bool et_char_is_space(unsigned char chSrc){
  2188. if(chSrc > 128){
  2189. return false;
  2190. }
  2191. if(chSrc == ET_CH_SPACE){
  2192. return true;
  2193. }else if(chSrc == ET_CH_TAB){
  2194. return true;
  2195. }else if(chSrc == ET_CH_R){
  2196. return true;
  2197. }else