1 |
/* $MidnightBSD$ */ |
2 |
/* $OpenBSD: nfsm_subs.h,v 1.11 2000/01/05 20:50:52 millert Exp $ */ |
3 |
/* $NetBSD: nfsm_subs.h,v 1.10 1996/03/20 21:59:56 fvdl Exp $ */ |
4 |
|
5 |
/*- |
6 |
* copyright (c) 2003 |
7 |
* the regents of the university of michigan |
8 |
* all rights reserved |
9 |
* |
10 |
* permission is granted to use, copy, create derivative works and redistribute |
11 |
* this software and such derivative works for any purpose, so long as the name |
12 |
* of the university of michigan is not used in any advertising or publicity |
13 |
* pertaining to the use or distribution of this software without specific, |
14 |
* written prior authorization. if the above copyright notice or any other |
15 |
* identification of the university of michigan is included in any copy of any |
16 |
* portion of this software, then the disclaimer below must also be included. |
17 |
* |
18 |
* this software is provided as is, without representation from the university |
19 |
* of michigan as to its fitness for any purpose, and without warranty by the |
20 |
* university of michigan of any kind, either express or implied, including |
21 |
* without limitation the implied warranties of merchantability and fitness for |
22 |
* a particular purpose. the regents of the university of michigan shall not be |
23 |
* liable for any damages, including special, indirect, incidental, or |
24 |
* consequential damages, with respect to any claim arising out of or in |
25 |
* connection with the use of the software, even if it has been or is hereafter |
26 |
* advised of the possibility of such damages. |
27 |
*/ |
28 |
|
29 |
/*- |
30 |
* Copyright (c) 1989, 1993 |
31 |
* The Regents of the University of California. All rights reserved. |
32 |
* |
33 |
* This code is derived from software contributed to Berkeley by |
34 |
* Rick Macklem at The University of Guelph. |
35 |
* |
36 |
* Redistribution and use in source and binary forms, with or without |
37 |
* modification, are permitted provided that the following conditions |
38 |
* are met: |
39 |
* 1. Redistributions of source code must retain the above copyright |
40 |
* notice, this list of conditions and the following disclaimer. |
41 |
* 2. Redistributions in binary form must reproduce the above copyright |
42 |
* notice, this list of conditions and the following disclaimer in the |
43 |
* documentation and/or other materials provided with the distribution. |
44 |
* 4. Neither the name of the University nor the names of its contributors |
45 |
* may be used to endorse or promote products derived from this software |
46 |
* without specific prior written permission. |
47 |
* |
48 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
49 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
50 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
51 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
52 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
53 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
54 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
55 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
56 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
57 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
58 |
* SUCH DAMAGE. |
59 |
* |
60 |
* @(#)nfsm_subs.h 8.2 (Berkeley) 3/30/95 |
61 |
*/ |
62 |
|
63 |
|
64 |
#ifndef _RPC_RPCM_SUBS_H_ |
65 |
#define _RPC_RPCM_SUBS_H_ |
66 |
|
67 |
|
68 |
/* |
69 |
* Now for the macros that do the simple stuff and call the functions |
70 |
* for the hard stuff. |
71 |
* These macros use several vars. declared in rpcm_reqhead and these |
72 |
* vars. must not be used elsewhere unless you are careful not to corrupt |
73 |
* them. The vars. starting with pN and tN (N=1,2,3,..) are temporaries |
74 |
* that may be used so long as the value is not expected to retained |
75 |
* after a macro. |
76 |
* I know, this is kind of dorkey, but it makes the actual op functions |
77 |
* fairly clean and deals with the mess caused by the xdr discriminating |
78 |
* unions. |
79 |
*/ |
80 |
|
81 |
#define rpcm_build(a,c,s) \ |
82 |
{ if ((s) > M_TRAILINGSPACE(mb)) { \ |
83 |
MGET(mb2, M_WAIT, MT_DATA); \ |
84 |
if ((s) > MLEN) \ |
85 |
panic("build > MLEN"); \ |
86 |
mb->m_next = mb2; \ |
87 |
mb = mb2; \ |
88 |
mb->m_len = 0; \ |
89 |
bpos = mtod(mb, caddr_t); \ |
90 |
} \ |
91 |
(a) = (c)(bpos); \ |
92 |
mb->m_len += (s); \ |
93 |
bpos += (s); } |
94 |
|
95 |
#define rpcm_dissect(a, c, s) \ |
96 |
{ t1 = mtod(md, caddr_t)+md->m_len-dpos; \ |
97 |
if (t1 >= (s)) { \ |
98 |
(a) = (c)(dpos); \ |
99 |
dpos += (s); \ |
100 |
} else if ((t1 = rpcm_disct(&md, &dpos, (s), t1, &cp2)) != 0){ \ |
101 |
error = t1; \ |
102 |
goto rpcmout; \ |
103 |
} else { \ |
104 |
(a) = (c)cp2; \ |
105 |
} } |
106 |
|
107 |
#if 0 |
108 |
#define rpcm_mtouio(p,s) \ |
109 |
if ((s) > 0 && \ |
110 |
(t1 = rpcm_mbuftouio(&md,(p),(s),&dpos)) != 0) { \ |
111 |
error = t1; \ |
112 |
goto rpcmout; \ |
113 |
} |
114 |
#endif |
115 |
|
116 |
#define rpcm_rndup(a) (((a)+3)&(~0x3)) |
117 |
|
118 |
#define rpcm_adv(s) \ |
119 |
{ t1 = mtod(md, caddr_t)+md->m_len-dpos; \ |
120 |
if (t1 >= (s)) { \ |
121 |
dpos += (s); \ |
122 |
} else if ((t1 = rpc_adv(&md, &dpos, (s), t1)) != 0) { \ |
123 |
error = t1; \ |
124 |
goto rpcmout; \ |
125 |
} } |
126 |
|
127 |
#define RPCMADV(m, s) (m)->m_data += (s) |
128 |
|
129 |
#endif /* _RPC_RPCM_SUBS_H_ */ |