diff options
Diffstat (limited to 'qemu/roms/openbios/libc/misc.c')
-rw-r--r-- | qemu/roms/openbios/libc/misc.c | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/qemu/roms/openbios/libc/misc.c b/qemu/roms/openbios/libc/misc.c deleted file mode 100644 index e7cf4f408..000000000 --- a/qemu/roms/openbios/libc/misc.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Creation Date: <2002/10/19 21:05:07 samuel> - * Time-stamp: <2002/10/22 22:29:18 samuel> - * - * <misc.c> - * - * Miscellaneous - * - * Copyright (C) 2002, 2003 Samuel Rydh (samuel@ibrium.se) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation - * - */ - -#include "config.h" -#include "libc/string.h" - -int errno_int; - -void -qsort( void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void*) ) -{ - unsigned int worked, i, j; - - /* even more inefficient than the glibc variant :-) */ - do { - char *p = base; - worked = 0; - for( i=0; i<nmemb-1; i++, p+= size ) { - if( compar( p, p + size ) > 0 ) { - worked = 1; - for( j=0; j<size; j++ ) { - char ch = p[j]; - p[j] = p[j+size]; - p[j+size] = ch; - } - } - } - } while( worked ); -} - - -long int -strtol( const char *nptr, char **endptr, int base ) -{ - int sum, n, sign=1; - while( isspace(*nptr) ) - nptr++; - - if( *nptr == '-' || *nptr == '+' ) - sign = (*nptr++ == '-') ? -1 : 1; - - if( base == 16 || base == 0) { - if( !base ) - base = (nptr[0] == '0')? 8 : 10; - if( nptr[0] == '0' && nptr[1] == 'x' ) { - nptr += 2; - base = 16; - } - } - for( sum=0 ;; nptr++ ) { - char ch = *nptr; - if( !isalnum(ch) ) - break; - n = isdigit(ch) ? ch - '0' : toupper(ch) - 'A' + 10; - if( n >= base || n < 0 ) - break; - sum *= base; - sum += n; - } - if( endptr ) - *endptr = (char*)nptr; - - return sum * sign; -} - -long long int -strtoll( const char *nptr, char **endptr, int base ) -{ - long long int sum; - int n, sign=1; - while( isspace(*nptr) ) - nptr++; - - if( *nptr == '-' || *nptr == '+' ) - sign = (*nptr++ == '-') ? -1 : 1; - - if( base == 16 || base == 0) { - if( !base ) - base = (nptr[0] == '0')? 8 : 10; - if( nptr[0] == '0' && nptr[1] == 'x' ) { - nptr += 2; - base = 16; - } - } - for( sum=0 ;; nptr++ ) { - char ch = *nptr; - if( !isalnum(ch) ) - break; - n = isdigit(ch) ? ch - '0' : toupper(ch) - 'A' + 10; - if( n >= base || n < 0 ) - break; - sum *= base; - sum += n; - } - if( endptr ) - *endptr = (char*)nptr; - - return sum * sign; -} - -// Propolice support -long __guard[8] = { -#ifdef CONFIG_BIG_ENDIAN - (0 << 24) | (0 << 16) | ('\n' << 8) | 255, -#else - (255 << 24) | ('\n' << 16) | (0 << 8) | 0, -#endif - 0, 0, 0, 0, 0, 0, 0 -}; - -static void freeze(void) -{ - // Freeze - // XXX: Disable interrupts? - for(;;) - ; -} - -void __stack_smash_handler(const char *func, int damaged) -{ - printk("Propolice detected a stack smashing attack %x at function %s," - " freezing\n", damaged, func); - freeze(); -} - -void __stack_chk_fail(void) -{ - printk("Propolice detected a stack smashing attack, freezing\n"); - - freeze(); -} |