Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2013-05-14 01:39:51 +0400
committerDJ Delorie <dj@redhat.com>2013-05-14 01:39:51 +0400
commit2f2a30423446f88e283f50f699bf7cc3c8cf74b8 (patch)
treeda1eb3018024b0d841f5de74df711564baeaf901 /libgloss/msp430/write.c
parente4ab61a8ab9b84a26fa22624e7049b50cafd4d19 (diff)
[newlib]
* configure.host (msp430): Add. * libc/include/machine/ieeefp.h: Add MSP430 support. * libc/include/machine/setjmp.h: Likewise. * libc/include/sys/config.h: Likewise. * libc/machine/configure.in (msp430): Add. * libc/machine/configure: Regenerate. * libc/machine/msp430: New directory. [libgloss] * configure.in (msp430*-*-elf): Add. * configure: Regenerate. * msp430: New directory.
Diffstat (limited to 'libgloss/msp430/write.c')
-rw-r--r--libgloss/msp430/write.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/libgloss/msp430/write.c b/libgloss/msp430/write.c
new file mode 100644
index 000000000..0c01098f2
--- /dev/null
+++ b/libgloss/msp430/write.c
@@ -0,0 +1,59 @@
+/* Copyright (c) 2013 Red Hat, Inc. All rights reserved.
+
+ This copyrighted material is made available to anyone wishing to use, modify,
+ copy, or redistribute it subject to the terms and conditions of the BSD
+ License. This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
+ of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license
+ is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
+ are incorporated in the source code or documentation are not subject to the BSD
+ License and may only be used or replicated with the express permission of
+ Red Hat, Inc.
+*/
+
+#include <string.h>
+
+#include "cio.h"
+
+static int
+write_chunk (int fd, char *buf, int len)
+{
+ __CIOBUF__.length[0] = len;
+ __CIOBUF__.length[1] = len >> 8;
+ __CIOBUF__.parms[0] = CIO_WRITE;
+ __CIOBUF__.parms[1] = fd;
+ __CIOBUF__.parms[2] = fd >> 8;
+ __CIOBUF__.parms[3] = len;
+ __CIOBUF__.parms[4] = len >> 8;
+ memcpy (__CIOBUF__.buf, buf, len);
+
+ _libgloss_cio_hook ();
+
+ return __CIOBUF__.parms[0] + __CIOBUF__.parms[1] * 256;
+}
+
+#include <stdio.h>
+
+int
+write (int fd, char *buf, int len)
+{
+ int rv = 0;
+ int c;
+#if 0
+ if (fd == 2)
+ fprintf (stderr, "%.*s", buf, len);
+ else if (fd == 1)
+ printf ("%.*s", buf, len);
+#endif
+ while (len > 0)
+ {
+ int l = (len > CIO_BUF_SIZE) ? CIO_BUF_SIZE : len;
+ c = write_chunk (fd, buf, l);
+ if (c < 0)
+ return c;
+ rv += l;
+ len -= l;
+ buf += l;
+ }
+ return c;
+}