/* * libc.c * * Created on: Oct 11, 2018 * Author: rick */ #include /* 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); }