From f5ab659569c39a0cd37d9e0358775dc3149bb61d Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Fri, 10 May 2019 00:32:45 +0200 Subject: [PATCH] mescc: Mes C Library: Explode libc-mini.c. * lib/posix/write.c: New file. * lib/linux/libc-mini.c: Include it. (write): Remove. * lib/tests/mes/30-oputs.c: Remove dead code. --- lib/linux/libc-mini.c | 14 +------- lib/posix/write.c | 36 +++++++++++++++++++ lib/tests/mes/30-oputs.c | 76 ---------------------------------------- 3 files changed, 37 insertions(+), 89 deletions(-) create mode 100644 lib/posix/write.c diff --git a/lib/linux/libc-mini.c b/lib/linux/libc-mini.c index d303f3bb..c101d7b7 100644 --- a/lib/linux/libc-mini.c +++ b/lib/linux/libc-mini.c @@ -32,16 +32,4 @@ #error arch not supported #endif -ssize_t -write (int filedes, void const *buffer, size_t size) -{ - int r = _write (filedes, buffer, size); - if (r < 0) - { - errno = -r; - r = -1; - } - else - errno = 0; - return r; -} +#include diff --git a/lib/posix/write.c b/lib/posix/write.c new file mode 100644 index 00000000..811bc0ab --- /dev/null +++ b/lib/posix/write.c @@ -0,0 +1,36 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes 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; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include +#include + +ssize_t +write (int filedes, void const *buffer, size_t size) +{ + int r = _write (filedes, buffer, size); + if (r < 0) + { + errno = -r; + r = -1; + } + else + errno = 0; + return r; +} diff --git a/lib/tests/mes/30-oputs.c b/lib/tests/mes/30-oputs.c index eaa5df34..55090857 100644 --- a/lib/tests/mes/30-oputs.c +++ b/lib/tests/mes/30-oputs.c @@ -20,82 +20,6 @@ #include -#if 0 -#include - -#define _write _xwrite -#define write xwrite -#define strlen xstrlen -#define oputs xoputs - -#if __GNUC__ -#define SYS_write "0x01" -#define SYS_exit "0x3c" - -ssize_t -_write (int filedes, void const *buffer, size_t size) -{ - long r; - asm ( - "mov $"SYS_write",%%rax\n\t" - "mov %1,%%rdi\n\t" - "mov %2,%%rsi\n\t" - "mov %3,%%rdx\n\t" - "syscall \n\t" - "mov %%rax,%0\n\t" - : "=r" (r) - : "rm" (filedes), "rm" (buffer), "rm" (size) - : "rax", "rdi", "rsi", "rdx" - ); - return r; -} -#else -#define SYS_write 0x01 -#define SYS_exit 0x3c -void -_write (int filedes, void const *buffer, size_t size) -{ - asm ("mov____0x8(%rbp),%rdi !0x10"); - asm ("mov____0x8(%rbp),%rsi !0x18"); - asm ("mov____0x8(%rbp),%rdx !0x20"); - asm ("mov____$i32,%rax SYS_write"); - - asm ("syscall"); -} -#endif - -ssize_t -write (int filedes, void const *buffer, size_t size) -{ - int r = _write (filedes, buffer, size); - if (r < 0) - { - errno = -r; - r = -1; - } - else - errno = 0; - return r; -} - -size_t -strlen (char const* s) -{ - int i = 0; - while (s[i]) - i++; - return i; -} - -int -oputs (char const* s) -{ - int i = strlen (s); - write (1, s, i); - return 0; -} -#endif - int main () {