OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [librpc/] [src/] [xdr/] [xdr_stdio.c] - Blame information for rev 509

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*
2
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3
 * unrestricted use provided that this legend is included on all tape
4
 * media and as a part of the software program in whole or part.  Users
5
 * may copy or modify Sun RPC without charge, but are not authorized
6
 * to license or distribute it to anyone else except as part of a product or
7
 * program developed by the user.
8
 *
9
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12
 *
13
 * Sun RPC is provided with no support and without any obligation on the
14
 * part of Sun Microsystems, Inc. to assist in its use, correction,
15
 * modification or enhancement.
16
 *
17
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19
 * OR ANY PART THEREOF.
20
 *
21
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22
 * or profits or other special, indirect and consequential damages, even if
23
 * Sun has been advised of the possibility of such damages.
24
 *
25
 * Sun Microsystems, Inc.
26
 * 2550 Garcia Avenue
27
 * Mountain View, California  94043
28
 */
29
 
30
#if defined(LIBC_SCCS) && !defined(lint)
31
/*static char *sccsid = "from: @(#)xdr_stdio.c 1.16 87/08/11 Copyr 1984 Sun Micro";*/
32
/*static char *sccsid = "from: @(#)xdr_stdio.c  2.1 88/07/29 4.0 RPCSRC";*/
33
static char *rcsid = "$FreeBSD: src/lib/libc/xdr/xdr_stdio.c,v 1.7 1999/08/28 00:02:56 peter Exp $";
34
#endif
35
 
36
/*
37
 * xdr_stdio.c, XDR implementation on standard i/o file.
38
 *
39
 * Copyright (C) 1984, Sun Microsystems, Inc.
40
 *
41
 * This set of routines implements a XDR on a stdio stream.
42
 * XDR_ENCODE serializes onto the stream, XDR_DECODE de-serializes
43
 * from the stream.
44
 */
45
 
46
#include <rpc/types.h>
47
#include <stdio.h>
48
#include <rpc/xdr.h>
49
 
50
static bool_t   xdrstdio_getlong();
51
static bool_t   xdrstdio_putlong();
52
static bool_t   xdrstdio_getbytes();
53
static bool_t   xdrstdio_putbytes();
54
static u_int    xdrstdio_getpos();
55
static bool_t   xdrstdio_setpos();
56
static int32_t *xdrstdio_inline();
57
static void     xdrstdio_destroy();
58
 
59
/*
60
 * Ops vector for stdio type XDR
61
 */
62
static struct xdr_ops   xdrstdio_ops = {
63
        xdrstdio_getlong,       /* deseraialize a long int */
64
        xdrstdio_putlong,       /* seraialize a long int */
65
        xdrstdio_getbytes,      /* deserialize counted bytes */
66
        xdrstdio_putbytes,      /* serialize counted bytes */
67
        xdrstdio_getpos,        /* get offset in the stream */
68
        xdrstdio_setpos,        /* set offset in the stream */
69
        xdrstdio_inline,        /* prime stream for inline macros */
70
        xdrstdio_destroy        /* destroy stream */
71
};
72
 
73
/*
74
 * Initialize a stdio xdr stream.
75
 * Sets the xdr stream handle xdrs for use on the stream file.
76
 * Operation flag is set to op.
77
 */
78
void
79
xdrstdio_create(xdrs, file, op)
80
        register XDR *xdrs;
81
        FILE *file;
82
        enum xdr_op op;
83
{
84
 
85
        xdrs->x_op = op;
86
        xdrs->x_ops = &xdrstdio_ops;
87
        xdrs->x_private = (caddr_t)file;
88
        xdrs->x_handy = 0;
89
        xdrs->x_base = 0;
90
}
91
 
92
/*
93
 * Destroy a stdio xdr stream.
94
 * Cleans up the xdr stream handle xdrs previously set up by xdrstdio_create.
95
 */
96
static void
97
xdrstdio_destroy(xdrs)
98
        register XDR *xdrs;
99
{
100
        (void)fflush((FILE *)xdrs->x_private);
101
        /* xx should we close the file ?? */
102
}
103
 
104
static bool_t
105
xdrstdio_getlong(xdrs, lp)
106
        XDR *xdrs;
107
        register long *lp;
108
{
109
 
110
        if (fread((caddr_t)lp, sizeof(int32_t), 1,
111
                (FILE *)xdrs->x_private) != 1)
112
                return (FALSE);
113
        *lp = (long)ntohl((int32_t)*lp);
114
        return (TRUE);
115
}
116
 
117
static bool_t
118
xdrstdio_putlong(xdrs, lp)
119
        XDR *xdrs;
120
        long *lp;
121
{
122
 
123
        long mycopy = (long)htonl((int32_t)*lp);
124
 
125
        if (fwrite((caddr_t)&mycopy, sizeof(int32_t), 1,
126
                (FILE *)xdrs->x_private) != 1)
127
                return (FALSE);
128
        return (TRUE);
129
}
130
 
131
static bool_t
132
xdrstdio_getbytes(xdrs, addr, len)
133
        XDR *xdrs;
134
        caddr_t addr;
135
        u_int len;
136
{
137
 
138
        if ((len != 0) && (fread(addr, (int)len, 1, (FILE *)xdrs->x_private) != 1))
139
                return (FALSE);
140
        return (TRUE);
141
}
142
 
143
static bool_t
144
xdrstdio_putbytes(xdrs, addr, len)
145
        XDR *xdrs;
146
        caddr_t addr;
147
        u_int len;
148
{
149
 
150
        if ((len != 0) && (fwrite(addr, (int)len, 1, (FILE *)xdrs->x_private) != 1))
151
                return (FALSE);
152
        return (TRUE);
153
}
154
 
155
static u_int
156
xdrstdio_getpos(xdrs)
157
        XDR *xdrs;
158
{
159
 
160
        return ((u_int) ftell((FILE *)xdrs->x_private));
161
}
162
 
163
static bool_t
164
xdrstdio_setpos(xdrs, pos)
165
        XDR *xdrs;
166
        u_int pos;
167
{
168
 
169
        return ((fseek((FILE *)xdrs->x_private, (long)pos, 0) < 0) ?
170
                FALSE : TRUE);
171
}
172
 
173
static int32_t *
174
xdrstdio_inline(xdrs, len)
175
        XDR *xdrs;
176
        u_int len;
177
{
178
 
179
        /*
180
         * Must do some work to implement this: must insure
181
         * enough data in the underlying stdio buffer,
182
         * that the buffer is aligned so that we can indirect through a
183
         * long *, and stuff this pointer in xdrs->x_buf.  Doing
184
         * a fread or fwrite to a scratch buffer would defeat
185
         * most of the gains to be had here and require storage
186
         * management on this buffer, so we don't do this.
187
         */
188
        return (NULL);
189
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.