1/*
2 * Copyright (c) 2010 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1.  Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 * 2.  Redistributions in binary form must reproduce the above copyright
13 *     notice, this list of conditions and the following disclaimer in the
14 *     documentation and/or other materials provided with the distribution.
15 * 3.  Neither the name of Apple Inc. ("Apple") nor the names of its
16 *     contributors may be used to endorse or promote products derived from
17 *     this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Portions of this software have been released under the following terms:
31 *
32 * (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC.
33 * (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY
34 * (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION
35 *
36 * To anyone who acknowledges that this file is provided "AS IS"
37 * without any express or implied warranty:
38 * permission to use, copy, modify, and distribute this file for any
39 * purpose is hereby granted without fee, provided that the above
40 * copyright notices and this notice appears in all source code copies,
41 * and that none of the names of Open Software Foundation, Inc., Hewlett-
42 * Packard Company or Digital Equipment Corporation be used
43 * in advertising or publicity pertaining to distribution of the software
44 * without specific, written prior permission.  Neither Open Software
45 * Foundation, Inc., Hewlett-Packard Company nor Digital
46 * Equipment Corporation makes any representations about the suitability
47 * of this software for any purpose.
48 *
49 * Copyright (c) 2007, Novell, Inc. All rights reserved.
50 * Redistribution and use in source and binary forms, with or without
51 * modification, are permitted provided that the following conditions
52 * are met:
53 *
54 * 1.  Redistributions of source code must retain the above copyright
55 *     notice, this list of conditions and the following disclaimer.
56 * 2.  Redistributions in binary form must reproduce the above copyright
57 *     notice, this list of conditions and the following disclaimer in the
58 *     documentation and/or other materials provided with the distribution.
59 * 3.  Neither the name of Novell Inc. nor the names of its contributors
60 *     may be used to endorse or promote products derived from this
61 *     this software without specific prior written permission.
62 *
63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
64 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
65 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
66 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
69 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
70 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
71 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
72 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
73 *
74 * @APPLE_LICENSE_HEADER_END@
75 */
76
77/*
78**
79**  NAME:
80**
81**      ndrp.h
82**
83**  FACILITY:
84**
85**      Network Data Representation (NDR)
86**
87**  ABSTRACT:
88**
89**  System (machine-architecture) -dependent definitions.
90**
91**
92*/
93
94#ifndef _NDRP_H
95#define _NDRP_H	1
96
97/*
98 * Data representation descriptor (drep)
99 *
100 * Note that the form of a drep "on the wire" is not captured by the
101 * the "ndr_format_t" data type.  The actual structure -- a "packed drep"
102 * -- is a vector of four bytes:
103 *
104 *      | MSB           LSB |
105 *      |<---- 8 bits ----->|
106 *      |<-- 4 -->|<-- 4 -->|
107 *
108 *      +---------+---------+
109 *      | int rep | chr rep |
110 *      +---------+---------+
111 *      |     float rep     |
112 *      +-------------------+
113 *      |     reserved      |
114 *      +-------------------+
115 *      |     reserved      |
116 *      +-------------------+
117 *
118 * The following macros manipulate data representation descriptors.
119 * "NDR_COPY_DREP" copies one packed drep into another.  "NDR_UNPACK_DREP"
120 * copies from a packed drep into a variable of the type "ndr_format_t".
121 *
122 */
123
124#ifdef CONVENTIONAL_ALIGNMENT
125#  define NDR_COPY_DREP(dst, src) \
126    (*((signed32 *) (dst)) = *((signed32 *) (src)))
127#else
128#  define NDR_COPY_DREP(dst, src) { \
129    (dst)[0] = (src)[0]; \
130    (dst)[1] = (src)[1]; \
131    (dst)[2] = (src)[2]; \
132    (dst)[3] = (src)[3]; \
133  }
134#endif
135
136#define NDR_DREP_INT_REP(drep)   ((drep)[0] >> 4)
137#define NDR_DREP_CHAR_REP(drep)  ((drep)[0] & 0xf)
138#define NDR_DREP_FLOAT_REP(drep) ((drep)[1])
139
140#define NDR_UNPACK_DREP(dst, src) {             \
141    (dst)->int_rep   = NDR_DREP_INT_REP(src);   \
142    (dst)->char_rep  = NDR_DREP_CHAR_REP(src);  \
143    (dst)->float_rep = NDR_DREP_FLOAT_REP(src); \
144    (dst)->reserved  = 0;                   \
145}
146
147#endif /* _NDRP_H */
148