1 /* |
1 /* |
2 * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Sun designates this |
7 * published by the Free Software Foundation. Sun designates this |
45 |
45 |
46 #define JNI_CHECK_PEER_GOTO(peer, where) { \ |
46 #define JNI_CHECK_PEER_GOTO(peer, where) { \ |
47 JNI_CHECK_NULL_GOTO(peer, "peer", where); \ |
47 JNI_CHECK_NULL_GOTO(peer, "peer", where); \ |
48 pData = JNI_GET_PDATA(peer); \ |
48 pData = JNI_GET_PDATA(peer); \ |
49 if (pData == NULL) { \ |
49 if (pData == NULL) { \ |
50 JNU_ThrowNullPointerException(env, "null pData"); \ |
50 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \ |
51 goto where; \ |
51 goto where; \ |
52 } \ |
52 } \ |
53 } |
53 } |
54 |
54 |
55 #define JNI_CHECK_NULL_RETURN(obj, msg) { \ |
55 #define JNI_CHECK_NULL_RETURN(obj, msg) { \ |
61 |
61 |
62 #define JNI_CHECK_PEER_RETURN(peer) { \ |
62 #define JNI_CHECK_PEER_RETURN(peer) { \ |
63 JNI_CHECK_NULL_RETURN(peer, "peer"); \ |
63 JNI_CHECK_NULL_RETURN(peer, "peer"); \ |
64 pData = JNI_GET_PDATA(peer); \ |
64 pData = JNI_GET_PDATA(peer); \ |
65 if (pData == NULL) { \ |
65 if (pData == NULL) { \ |
66 JNU_ThrowNullPointerException(env, "null pData"); \ |
66 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \ |
67 return; \ |
67 return; \ |
68 } \ |
68 } \ |
69 } |
69 } |
70 |
70 |
71 #define JNI_CHECK_PEER_CREATION_RETURN(peer) { \ |
71 #define JNI_CHECK_PEER_CREATION_RETURN(peer) { \ |
94 |
94 |
95 #define JNI_CHECK_PEER_RETURN_NULL(peer) { \ |
95 #define JNI_CHECK_PEER_RETURN_NULL(peer) { \ |
96 JNI_CHECK_NULL_RETURN_NULL(peer, "peer"); \ |
96 JNI_CHECK_NULL_RETURN_NULL(peer, "peer"); \ |
97 pData = JNI_GET_PDATA(peer); \ |
97 pData = JNI_GET_PDATA(peer); \ |
98 if (pData == NULL) { \ |
98 if (pData == NULL) { \ |
99 JNU_ThrowNullPointerException(env, "null pData"); \ |
99 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \ |
100 return 0; \ |
100 return 0; \ |
101 } \ |
101 } \ |
102 } |
102 } |
103 |
103 |
104 #define JNI_CHECK_PEER_RETURN_VAL(peer, val) { \ |
104 #define JNI_CHECK_PEER_RETURN_VAL(peer, val) { \ |
105 JNI_CHECK_NULL_RETURN_VAL(peer, "peer", val); \ |
105 JNI_CHECK_NULL_RETURN_VAL(peer, "peer", val); \ |
106 pData = JNI_GET_PDATA(peer); \ |
106 pData = JNI_GET_PDATA(peer); \ |
107 if (pData == NULL) { \ |
107 if (pData == NULL) { \ |
|
108 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \ |
|
109 return val; \ |
|
110 } \ |
|
111 } |
|
112 |
|
113 #define THROW_NULL_PDATA_IF_NOT_DESTROYED(peer) { \ |
|
114 jboolean destroyed = JNI_GET_DESTROYED(peer); \ |
|
115 if (destroyed != JNI_TRUE) { \ |
108 JNU_ThrowNullPointerException(env, "null pData"); \ |
116 JNU_ThrowNullPointerException(env, "null pData"); \ |
109 return val; \ |
|
110 } \ |
117 } \ |
111 } |
118 } |
112 |
119 |
113 #define JNI_GET_PDATA(peer) (PDATA) env->GetLongField(peer, AwtObject::pDataID) |
120 #define JNI_GET_PDATA(peer) (PDATA) env->GetLongField(peer, AwtObject::pDataID) |
|
121 #define JNI_GET_DESTROYED(peer) env->GetBooleanField(peer, AwtObject::destroyedID) |
114 |
122 |
115 #define JNI_SET_PDATA(peer, data) env->SetLongField(peer, \ |
123 #define JNI_SET_PDATA(peer, data) env->SetLongField(peer, \ |
116 AwtObject::pDataID, \ |
124 AwtObject::pDataID, \ |
117 (jlong)data) |
125 (jlong)data) |
|
126 #define JNI_SET_DESTROYED(peer) env->SetBooleanField(peer, \ |
|
127 AwtObject::destroyedID, \ |
|
128 JNI_TRUE) |
118 /* /NEW JNI */ |
129 /* /NEW JNI */ |
119 |
130 |
120 /* |
131 /* |
121 * IS_NT returns TRUE on NT, 2000, XP |
132 * IS_NT returns TRUE on NT, 2000, XP |
122 * IS_WIN2000 returns TRUE on 2000, XP |
133 * IS_WIN2000 returns TRUE on 2000, XP |