#include "Common.h" unsigned int ELFHash(const char * str, unsigned int len) { unsigned int hash = 0; unsigned int x = 0; unsigned int i = 0; for (i = 0; i < len; str++, i++) { hash = (hash << 4) + (*str); if ((x = hash & 0xF0000000L) != 0) { hash ^= (x >> 24); } hash &= ~x; } return hash; } // Caution! : 0 ~ RAND_MAX unsigned _GetRandNum(unsigned nMin, unsigned nMax) { if ((nMin == 0 && nMax == 0) || nMin > nMax) { //printf("[WARN] Invalide parameter.\n"); return 0; } if (nMax > RAND_MAX) { nMax = RAND_MAX; //printf("[WARN] Invalide parameter.\n"); } static bool bRandInit = false; if (bRandInit == false) { bRandInit = true; srand((unsigned)time(NULL)); } unsigned nRandNum; for (;;) { nRandNum = (unsigned)rand(); if (nRandNum >= nMin && nRandNum <= nMax) break; } return nRandNum; } bool RealignPathDepth(const char * pszSrc, char * pszDst) { if (pszSrc == NULL || pszDst == NULL) return false; if (pszSrc[0] == '\0') { pszDst[0] = '\0'; return true; } const char * p1 = pszSrc; char * p2 = pszDst; do { if (p1[0] == '.' && p1[1] == '.' && p1[2] == '.') { do { if (*p1 == '/' || *p1 == '\\' || *p1 == '\0') break; *p2++ = *p1; } while (p1++); } if (*p1 == '\0') break; if (p1[0] == '.' && p1[1] == '.' && (p1[2] == '/' || p1[2] == '\\')) { for (int i = 0; i < 2; i++) { while (p2 != pszDst && p2--) { if (*p2 == '/' || *p2 == '\\' || p2 == pszDst) break; } } p1 += 2; } *p2++ = *p1; } while (p1++); *p2 = '\0'; return true; }