X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Flib.c;h=5bed4ca210dc6e26c23be4a3883fe2a3e1b01f03;hb=95a7eaaa4a1065334125b65130866f8d1048ddb7;hp=5fe74bf0cab989ac6fbb083fa614e058a74dd2cc;hpb=0acfe5bc4a7d5842c1d12092ca2e9e54d3372401;p=tpg%2Facess2.git diff --git a/Kernel/lib.c b/Kernel/lib.c index 5fe74bf0..5bed4ca2 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -7,7 +7,8 @@ // === CONSTANTS === #define RANDOM_SEED 0xACE55052 #define RANDOM_A 0x00731ADE -#define RANDOM_C 0xBEEF1000 +#define RANDOM_C 12345 +#define RANDOM_SPRUCE 0xf12b02b // Jan Feb Mar Apr May Jun Jul Aug Sept Oct Nov Dec const short DAYS_BEFORE[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; #define UNIX_TO_2K ((30*365*3600*24) + (7*3600*24)) //Normal years + leap years @@ -69,7 +70,7 @@ int tolower(int c) * \fn int strucmp(char *Str1, char *Str2) * \brief Compare \a Str1 and \a Str2 case-insensitively */ -int strucmp(char *Str1, char *Str2) +int strucmp(const char *Str1, const char *Str2) { while(*Str1 && tolower(*Str1) == tolower(*Str2)) Str1++, Str2++; @@ -80,7 +81,7 @@ int strucmp(char *Str1, char *Str2) * \fn int strpos(char *Str, char Ch) * \brief Search a string for an ascii character */ -int strpos(char *Str, char Ch) +int strpos(const char *Str, char Ch) { int pos; for(pos=0;Str[pos];pos++) @@ -103,7 +104,7 @@ int ByteSum(void *Ptr, int Size) * \fn Uint strlen(char *__str) * \brief Get the length of string */ -Uint strlen(char *__str) +Uint strlen(const char *__str) { Uint ret = 0; while(*__str++) ret++; @@ -114,7 +115,7 @@ Uint strlen(char *__str) * \fn char *strcpy(char *__str1, char *__str2) * \brief Copy a string to a new location */ -char *strcpy(char *__str1, char *__str2) +char *strcpy(char *__str1, const char *__str2) { while(*__str2) *__str1++ = *__str2++; @@ -127,7 +128,7 @@ char *strcpy(char *__str1, char *__str2) * \brief Compare two strings return the difference between * the first non-matching characters. */ -int strcmp(char *str1, char *str2) +int strcmp(const char *str1, const char *str2) { while(*str1 && *str1 == *str2) str1++, str2++; @@ -138,9 +139,10 @@ int strcmp(char *str1, char *str2) * \fn int strncmp(char *Str1, char *Str2, size_t num) * \brief Compare strings \a Str1 and \a Str2 to a maximum of \a num characters */ -int strncmp(char *Str1, char *Str2, size_t num) +int strncmp(const char *Str1, const char *Str2, size_t num) { - while(num-- && *Str1 && *Str1 == *Str2) + if(num == 0) return 0; // TODO: Check what should officially happen here + while(--num && *Str1 && *Str1 == *Str2) Str1++, Str2++; return *Str1-*Str2; } @@ -149,7 +151,7 @@ int strncmp(char *Str1, char *Str2, size_t num) * \fn char *strdup(char *str) * \brief Duplicates a string */ -char *strdup(char *str) +char *strdup(const char *str) { char *ret; ret = malloc(strlen(str)+1); @@ -158,10 +160,21 @@ char *strdup(char *str) } /** - * \fn int strpos8(char *str, Uint32 search) + * \fn int DivUp(int num, int dem) + * \brief Divide two numbers, rounding up + * \param num Numerator + * \param dem Denominator + */ +int DivUp(int num, int dem) +{ + return (num+dem-1)/dem; +} + +/** + * \fn int strpos8(const char *str, Uint32 search) * \brief Search a string for a UTF-8 character */ -int strpos8(char *str, Uint32 Search) +int strpos8(const char *str, Uint32 Search) { int pos; Uint32 val = 0; @@ -318,17 +331,12 @@ Sint64 timestamp(int sec, int mins, int hrs, int day, int month, int year) */ Uint rand() { - #if 0 - Uint ret = giRandomState; - int roll = randomState & 31; - randomState = (randomState << roll) | (randomState >> (32-roll)); - randomState ^= 0x9A3C5E78; - return ret; - #else + Uint old = giRandomState; + // Get the next state value giRandomState = (RANDOM_A*giRandomState + RANDOM_C) & 0xFFFFFFFF; - Log("giRandomState = 0x%x", giRandomState); + // Check if it has changed, and if it hasn't, change it + if(giRandomState == old) giRandomState += RANDOM_SPRUCE; return giRandomState; - #endif } EXPORT(timestamp);