aboutsummaryrefslogtreecommitdiff
path: root/gcc/m2/mc-boot-ch/Glibc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/m2/mc-boot-ch/Glibc.c')
-rw-r--r--gcc/m2/mc-boot-ch/Glibc.c242
1 files changed, 242 insertions, 0 deletions
diff --git a/gcc/m2/mc-boot-ch/Glibc.c b/gcc/m2/mc-boot-ch/Glibc.c
new file mode 100644
index 0000000..501da78
--- /dev/null
+++ b/gcc/m2/mc-boot-ch/Glibc.c
@@ -0,0 +1,242 @@
+/* Glibc.c provides access to some libc functions.
+
+Copyright (C) 2016-2022 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius@glam.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 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, or (at your option)
+any later version.
+
+GNU Modula-2 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 Modula-2; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+#else
+#define EXTERN
+#endif
+
+EXTERN
+int
+libc_read (int fd, void *a, int nbytes)
+{
+ return read (fd, a, nbytes);
+}
+
+EXTERN
+int
+libc_write (int fd, void *a, int nbytes)
+{
+ return write (fd, a, nbytes);
+}
+
+EXTERN
+int
+libc_close (int fd)
+{
+ return close (fd);
+}
+
+EXTERN
+int
+libc_exit (int code)
+{
+ exit (code);
+}
+
+EXTERN
+void
+libc_perror (char *s)
+{
+ perror (s);
+}
+
+EXTERN
+int
+libc_abort ()
+{
+ abort ();
+}
+
+EXTERN
+int
+libc_strlen (char *s)
+{
+ return strlen (s);
+}
+
+EXTERN
+int
+libc_printf (char *_format, unsigned int _format_high, ...)
+{
+ va_list arg;
+ int done;
+ char format[_format_high + 1];
+ unsigned int i = 0;
+ unsigned int j = 0;
+ char *c;
+
+ do
+ {
+ c = index (&_format[i], '\\');
+ if (c == NULL)
+ strcpy (&format[j], &_format[i]);
+ else
+ {
+ memcpy (&format[j], &_format[i], (c - _format) - i);
+ i = c - _format;
+ j += c - _format;
+ if (_format[i + 1] == 'n')
+ format[j] = '\n';
+ else
+ format[j] = _format[i + 1];
+ j++;
+ i += 2;
+ }
+ }
+ while (c != NULL);
+
+ va_start (arg, _format_high);
+ done = vfprintf (stdout, format, arg);
+ va_end (arg);
+
+ return done;
+}
+
+EXTERN
+void *
+libc_malloc (unsigned int size)
+{
+ return malloc (size);
+}
+
+EXTERN
+void
+libc_free (void *p)
+{
+ free (p);
+}
+
+EXTERN
+char *
+libc_strcpy (char *dest, char *src)
+{
+ return strcpy (dest, src);
+}
+
+EXTERN
+char *
+libc_strncpy (char *dest, char *src, int n)
+{
+ return strncpy (dest, src, n);
+}
+
+EXTERN
+int
+libc_unlink (char *p)
+{
+ return unlink (p);
+}
+
+EXTERN
+int
+libc_system (char *command)
+{
+ return system (command);
+}
+
+EXTERN
+void *
+libc_memcpy (void *dest, void *src, int n)
+{
+ return memcpy (dest, src, n);
+}
+
+EXTERN
+char *
+libc_getenv (char *name)
+{
+ return getenv (name);
+}
+
+EXTERN
+int
+libc_putenv (char *name)
+{
+ return putenv (name);
+}
+
+EXTERN
+int
+libc_creat (char *p, mode_t mode)
+{
+ return creat (p, mode);
+}
+
+EXTERN
+int
+libc_open (char *p, int flags, mode_t mode)
+{
+ return open (p, flags, mode);
+}
+
+EXTERN
+off_t
+libc_lseek (int fd, off_t offset, int whence)
+{
+ return lseek (fd, offset, whence);
+}
+
+EXTERN
+void *
+libc_realloc (void *ptr, size_t size)
+{
+ return realloc (ptr, size);
+}
+
+EXTERN
+void *
+libc_memset (void *s, int c, size_t n)
+{
+ return memset (s, c, n);
+}
+
+EXTERN
+void *
+libc_memmove (void *dest, void *src, size_t n)
+{
+ return memmove (dest, src, n);
+}
+
+EXTERN
+int
+libc_getpid (void)
+{
+ return getpid ();
+}
+
+EXTERN
+unsigned int
+libc_sleep (unsigned int s)
+{
+ return sleep (s);
+}
+
+EXTERN
+int
+libc_atexit (void (*function) (void))
+{
+ return atexit (function);
+}