1 | /* Copyright (c) 2013 Red Hat, Inc. All rights reserved. |
---|
2 | |
---|
3 | This copyrighted material is made available to anyone wishing to use, modify, |
---|
4 | copy, or redistribute it subject to the terms and conditions of the BSD |
---|
5 | License. This program is distributed in the hope that it will be useful, |
---|
6 | but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties |
---|
7 | of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license |
---|
8 | is available at http://www.opensource.org/licenses. Any Red Hat trademarks that |
---|
9 | are incorporated in the source code or documentation are not subject to the BSD |
---|
10 | License and may only be used or replicated with the express permission of |
---|
11 | Red Hat, Inc. |
---|
12 | */ |
---|
13 | |
---|
14 | #include <string.h> |
---|
15 | |
---|
16 | #include "cio.h" |
---|
17 | |
---|
18 | static int |
---|
19 | write_chunk (int fd, char *buf, int len) |
---|
20 | { |
---|
21 | __CIOBUF__.length[0] = len; |
---|
22 | __CIOBUF__.length[1] = len >> 8; |
---|
23 | __CIOBUF__.parms[0] = CIO_WRITE; |
---|
24 | __CIOBUF__.parms[1] = fd; |
---|
25 | __CIOBUF__.parms[2] = fd >> 8; |
---|
26 | __CIOBUF__.parms[3] = len; |
---|
27 | __CIOBUF__.parms[4] = len >> 8; |
---|
28 | memcpy (__CIOBUF__.buf, buf, len); |
---|
29 | |
---|
30 | _libgloss_cio_hook (); |
---|
31 | |
---|
32 | return __CIOBUF__.parms[0] + __CIOBUF__.parms[1] * 256; |
---|
33 | } |
---|
34 | |
---|
35 | #include <stdio.h> |
---|
36 | |
---|
37 | int |
---|
38 | write (int fd, char *buf, int len) |
---|
39 | { |
---|
40 | int rv = 0; |
---|
41 | int c; |
---|
42 | #if 0 |
---|
43 | if (fd == 2) |
---|
44 | fprintf (stderr, "%.*s", buf, len); |
---|
45 | else if (fd == 1) |
---|
46 | printf ("%.*s", buf, len); |
---|
47 | #endif |
---|
48 | while (len > 0) |
---|
49 | { |
---|
50 | int l = (len > CIO_BUF_SIZE) ? CIO_BUF_SIZE : len; |
---|
51 | c = write_chunk (fd, buf, l); |
---|
52 | if (c < 0) |
---|
53 | return c; |
---|
54 | rv += l; |
---|
55 | len -= l; |
---|
56 | buf += l; |
---|
57 | } |
---|
58 | return rv; |
---|
59 | } |
---|