diff options
Diffstat (limited to 'meson/test cases/unit/78 nostdlib/subprojects/mylibc/libc.c')
-rw-r--r-- | meson/test cases/unit/78 nostdlib/subprojects/mylibc/libc.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/meson/test cases/unit/78 nostdlib/subprojects/mylibc/libc.c b/meson/test cases/unit/78 nostdlib/subprojects/mylibc/libc.c new file mode 100644 index 000000000..67261cb1d --- /dev/null +++ b/meson/test cases/unit/78 nostdlib/subprojects/mylibc/libc.c @@ -0,0 +1,35 @@ +/* Do not use this as the basis of your own libc. + * The code is probably unoptimal or wonky, as I + * had no prior experience with this, but instead + * just fiddled with the code until it worked. + */ + +#include<stdio.h> + +#define STDOUT 1 +#define SYS_WRITE 4 + +int simple_print(const char *msg, const long bufsize) { + int count; + long total_written = 0; + while(total_written < bufsize) { + asm( + "int $0x80\n\t" + : "=a"(count) + : "0"(SYS_WRITE), "b"(STDOUT), "c"(msg+total_written), "d"(bufsize-total_written) + :); + if(count == 0) { + return 1; + } + total_written += count; + } + return 0; +} + +int simple_strlen(const char *str) { + int len = 0; + while(str[len] != '\0') { + len++; + } + return len; +} |