feat: implemented errno, strtol. Started ustar. Reformatted headers and

code. Added some self-tests. Started prepwork for vfs.
This commit is contained in:
2021-03-14 21:14:22 +01:00
parent 586b8191b4
commit 77c8dca72a
39 changed files with 504 additions and 60 deletions

View File

@@ -6,6 +6,8 @@
*/
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
/* everything of stdlib is implemented in this file except for:
* - qsort
@@ -76,3 +78,57 @@ char *itoa(int value, char *buffer, int base) {
// reverse the string and return it
return reverse(buffer, 0, i - 1);
}
long strtol(const char *nptr, char **endptr, int base) {
if (base > 36) {
errno = EINVAL;
return -1;
}
char sign = '+';
long n = 0;
long i;
const char *c = nptr;
while (*c == ' ') {
c++;
}
if (*c == '+') {
c++;
} else if (*c == '-') {
sign = '-';
c++;
}
while (*c != '\0') {
n *= base;
if (*c >= '0' && *c <= '9') {
i = *c - '0';
} else if (*c >= 'a' && *c <= 'z') {
i = *c - 'a' + 10;
} else if (*c >= 'A' && *c <= 'Z') {
i = *c - 'A' + 10;
} else {
errno = EINVAL;
n = -1;
goto _set_endptr;
}
if (i >= base) {
errno = EINVAL;
n = -1;
goto _set_endptr;
}
if (i > (LONG_MAX - n)) {
errno = ERANGE;
n = sign == '-' ? LONG_MIN : LONG_MAX;
goto _set_endptr;
}
n += i;
c++;
}
if (sign == '-') {
n *= -1;
}
_set_endptr:
if (endptr != NULL) {
*endptr = c;
}
return n;
}

View File

@@ -20,7 +20,7 @@ int memset(void *dst, int data, size_t amount) {
}
int strcpy(char *dst, char *src) {
int strcpy(char *dst, const char *src) {
return memcpy(dst, src, strlen(src) + 1);
}