feat: reformatted code base to be more standard
This commit is contained in:
78
kernel/libc/stdlib.c
Normal file
78
kernel/libc/stdlib.c
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* libc.c
|
||||
*
|
||||
* Created on: Oct 11, 2018
|
||||
* Author: rick
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/* everything of stdlib is implemented in this file except for:
|
||||
* - qsort
|
||||
**/
|
||||
|
||||
|
||||
int abs(int val) {
|
||||
return val >= 0 ? val : (val * -1);
|
||||
}
|
||||
|
||||
long labs(long val) {
|
||||
return val >= 0 ? val : (val * -1);
|
||||
}
|
||||
|
||||
long long llabs(long long val) {
|
||||
return val >= 0 ? val : (val * -1);
|
||||
}
|
||||
|
||||
// next stolen form https://www.techiedelight.com/implement-itoa-function-in-c/
|
||||
// inline function to swapc two numbers
|
||||
void swapc(char *x, char *y) {
|
||||
char t = *x;
|
||||
*x = *y;
|
||||
*y = t;
|
||||
}
|
||||
|
||||
// function to reverse buffer[i..j]
|
||||
char *reverse(char *buffer, int i, int j) {
|
||||
while (i < j)
|
||||
swapc(&buffer[i++], &buffer[j--]);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
// Iterative function to implement itoa() function in C
|
||||
char *itoa(int value, char *buffer, int base) {
|
||||
// invalid input
|
||||
if (base < 2 || base > 32)
|
||||
return buffer;
|
||||
|
||||
// consider absolute value of number
|
||||
int n = abs(value);
|
||||
|
||||
int i = 0;
|
||||
while (n) {
|
||||
int r = n % base;
|
||||
|
||||
if (r >= 10)
|
||||
buffer[i++] = 65 + (r - 10);
|
||||
else
|
||||
buffer[i++] = 48 + r;
|
||||
|
||||
n = n / base;
|
||||
}
|
||||
|
||||
// if number is 0
|
||||
if (i == 0)
|
||||
buffer[i++] = '0';
|
||||
|
||||
// If base is 10 and value is negative, the resulting string
|
||||
// is preceded with a minus sign (-)
|
||||
// With any other base, value is always considered unsigned
|
||||
if (value < 0 && base == 10)
|
||||
buffer[i++] = '-';
|
||||
|
||||
buffer[i] = '\0'; // null terminate string
|
||||
|
||||
// reverse the string and return it
|
||||
return reverse(buffer, 0, i - 1);
|
||||
}
|
||||
Reference in New Issue
Block a user