This adds several standard C functions to lib.c: strncmp, toupper, isdigit, isxdigit simple_strtoul is a limited implementation of strtoul, taken from Linux. They will be needed for command line parsing. Index: memtest86+-1.70/lib.c =================================================================== --- memtest86+-1.70.orig/lib.c +++ memtest86+-1.70/lib.c @@ -69,6 +69,21 @@ int memcmp(const void *s1, const void *s return 0; } +int strncmp(const char *s1, const char *s2, ulong n) +{ + signed char res = 0; + while (n) { + res = *s1 - *s2; + if (res != 0) + return res; + if (*s1 == '\0') + return 0; + ++s1, ++s2; + --n; + } + return res; +} + void *memmove(void *dest, const void *src, ulong n) { long i; @@ -87,6 +102,53 @@ void *memmove(void *dest, const void *sr } return dest; } + +char toupper(char c) +{ + if (c >= 'a' && c <= 'z') + return c + 'A' -'a'; + else + return c; +} + +int isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +int isxdigit(char c) +{ + return isdigit(c) || (toupper(c) >= 'A' && toupper(c) <= 'F'); +} + +unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) +{ + unsigned long result = 0, value; + + if (!base) { + base = 10; + if (*cp == '0') { + base = 8; + cp++; + if (toupper(*cp) == 'X' && isxdigit(cp[1])) { + cp++; + base = 16; + } + } + } else if (base == 16) { + if (cp[0] == '0' && toupper(cp[1]) == 'X') + cp += 2; + } + while (isxdigit(*cp) && + (value = isdigit(*cp) ? *cp-'0' : toupper(*cp)-'A'+10) < base) { + result = result*base + value; + cp++; + } + if (endp) + *endp = (char *)cp; + return result; +} + /* * Scroll the error message area of the screen as needed * Starts at line LINE_SCROLL and ends at line 23 Index: memtest86+-1.70/test.h =================================================================== --- memtest86+-1.70.orig/test.h +++ memtest86+-1.70/test.h @@ -95,6 +95,7 @@ typedef unsigned long ulong; #define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); }) int memcmp(const void *s1, const void *s2, ulong count); void *memmove(void *dest, const void *src, ulong n); +int strncmp(const char *s1, const char *s2, ulong n); int query_linuxbios(void); int query_pcbios(void); int insertaddress(ulong); --