2 mark.hamzy 1.1 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
13 mark.hamzy 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
21 mark.hamzy 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Author: Mark Hamzy, hamzy@us.ibm.com
33 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
36 #ifndef PEGASUS_DEBUG
37
38 // Retail build
39
40 #define DEBUG_ConvertJavaToC(j,c,p) (c)p
41 #define DEBUG_ConvertCToJava(c,j,p) (j)p
42 mark.hamzy 1.1 #define DEBUG_ConvertCleanup(c,p)
43
44 #else
45
46 // Debug build
47
48 #define CONVERT_NONE 1
49 #define CONVERT_BIG_PAD 0
50 #define CONVERT_SMALL_PAD 0
51
52 #if CONVERT_NONE
53
54 #define DEBUG_ConvertJavaToC(j,c,p) (c)p
55 #define DEBUG_ConvertCToJava(c,j,p) (j)p
56 #define DEBUG_ConvertCleanup(c,p)
57
58 #elif CONVERT_BIG_PAD
59
60 #define DEBUG_ConvertJavaToC(j,c,p) TemplateConvertJavaToC <j,c> (p)
61 #define DEBUG_ConvertCToJava(c,j,p) TemplateConvertCToJava <c,j> (p)
62 #define DEBUG_ConvertCleanup(j,p) TemplateConvertCleanup <j> (p)
63 mark.hamzy 1.1
64 #define CONVERT_SIGNATURE_BEGIN 0x12345678
65 #define CONVERT_SIGNATURE_END 0xFEDCBA98
66 #define CONVERT_SIZE (4 * sizeof (void *))
67
68 #define ConvertEndianSwap(n) ((((n) & 0xff000000) >> 24) | \
69 (((n) & 0x00ff0000) >> 8) | \
70 (((n) & 0x0000ff00) << 8) | \
71 (((n) & 0x000000ff) << 24) )
72
73 template <typename J, typename C>
74 C TemplateConvertJavaToC (J p)
75 {
76 unsigned int *pi = (unsigned int *)p;
77 unsigned int *ptrap = 0;
78
79 if (pi[0] != CONVERT_SIGNATURE_BEGIN)
80 {
81 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
82 *ptrap = 0;
83 }
84 mark.hamzy 1.1 if (pi[1] != ConvertEndianSwap ((unsigned int)pi[2]))
85 {
86 *ptrap = 0;
87 }
88 if (pi[3] != CONVERT_SIGNATURE_END)
89 {
90 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
91 *ptrap = 0;
92 }
93
94 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pi[1]<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
95
96 return (C)pi[1];
97 }
98
99 template <typename C, typename J>
100 J TemplateConvertCToJava (C p)
101 {
102 unsigned int *pi = (unsigned int *)std::malloc (CONVERT_SIZE);
103 unsigned int *ptrap = 0;
104
105 mark.hamzy 1.1 if (pi)
106 {
107 pi[0] = CONVERT_SIGNATURE_BEGIN;
108 pi[1] = (unsigned int)p;
109 pi[2] = ConvertEndianSwap ((unsigned int)p);
110 pi[3] = CONVERT_SIGNATURE_END;
111 }
112 else
113 {
114 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
115 *ptrap = 0;
116 }
117
118 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pi<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
119
120 return (J)pi;
121 }
122
123 template <typename J>
124 void TemplateConvertCleanup (J p)
125 {
126 mark.hamzy 1.1 unsigned int *pi = (unsigned int *)p;
127 unsigned int *ptrap = 0;
128
129 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
130
131 if (pi[0] != CONVERT_SIGNATURE_BEGIN)
132 {
133 *ptrap = 0;
134 }
135 if (pi[1] != ConvertEndianSwap ((unsigned int)pi[2]))
136 {
137 *ptrap = 0;
138 }
139 if (pi[3] != CONVERT_SIGNATURE_END)
140 {
141 *ptrap = 0;
142 }
143
144 std::memset (pi, 0, CONVERT_SIZE);
145 std::free ((void *)pi);
146 }
147 mark.hamzy 1.1
148 #elif CONVERT_SMALL_PAD
149
150 #define DEBUG_ConvertJavaToC(j,c,p) TemplateConvertJavaToC <j,c> (p)
151 #define DEBUG_ConvertCToJava(c,j,p) TemplateConvertCToJava <c,j> (p)
152 #define DEBUG_ConvertCleanup(j,p) TemplateConvertCleanup <j> (p)
153
154 #define CONVERT_SIGNATURE_BEGIN 0xFE
155 #define CONVERT_SIGNATURE_END 0x12
156 #define CONVERT_SIZE (sizeof (unsigned char) + sizeof (void *) + sizeof (unsigned char))
157
158 template <typename J, typename C>
159 C TemplateConvertJavaToC (J p)
160 {
161 unsigned char *puch = (unsigned char *)p;
162 int *ptrap = 0;
163
164 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
165 {
166 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
167 *ptrap = 0;
168 mark.hamzy 1.1 }
169 if (puch[1 + sizeof (int)] != CONVERT_SIGNATURE_END)
170 {
171 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
172 *ptrap = 0;
173 }
174
175 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)(*((int *)(puch + 1)))<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
176
177 return (C)(void *)(*((int *)(puch + 1)));
178 }
179
180 template <typename C, typename J>
181 J TemplateConvertCToJava (C p)
182 {
183 unsigned char *puch = (unsigned char *)std::malloc (CONVERT_SIZE);
184 int *ptrap = 0;
185
186 if (puch)
187 {
188 puch[0] = CONVERT_SIGNATURE_BEGIN;
189 mark.hamzy 1.1 *(int *)(puch + 1) = (int)p;
190 puch[1 + sizeof (int)] = CONVERT_SIGNATURE_END;
191 }
192 else
193 {
194 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
195 *ptrap = 0;
196 }
197
198 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void *)puch<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
199
200 return (J)puch;
201 }
202
203 template <typename J>
204 void TemplateConvertCleanup (J p)
205 {
206 unsigned char *puch = (unsigned char *)p;
207 int *ptrap = 0;
208
209 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
210 mark.hamzy 1.1
211 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
212 {
213 *ptrap = 0;
214 }
215 if (puch[1 + sizeof (int)] != CONVERT_SIGNATURE_END)
216 {
217 *ptrap = 0;
218 }
219
220 std::memset (puch, 0, CONVERT_SIZE);
221 std::free ((void *)puch);
222 }
223
224 #else
225
226 #error "Unsupported conversion case in src/Pegasus/ProviderManager2/JMPI/Convert.h"
227
228 #endif
229
230 #endif
|