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