1 /* |
1 /* |
2 * Copyright 2001-2003 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 2001-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 |
23 * have any questions. |
23 * have any questions. |
24 */ |
24 */ |
25 |
25 |
26 //Definitions of our util functions |
26 //Definitions of our util functions |
27 |
27 |
28 void* must_malloc(int size); |
28 void* must_malloc(size_t size); |
29 #ifndef USE_MTRACE |
29 #ifndef USE_MTRACE |
30 #define mtrace(c, ptr, size) (0) |
30 #define mtrace(c, ptr, size) (0) |
31 #else |
31 #else |
32 void mtrace(char c, void* ptr, size_t size); |
32 void mtrace(char c, void* ptr, size_t size); |
33 #endif |
33 #endif |
|
34 |
|
35 // overflow management |
|
36 #define OVERFLOW ((size_t)-1) |
|
37 #define PSIZE_MAX (OVERFLOW/2) /* normal size limit */ |
|
38 |
|
39 inline size_t scale_size(size_t size, size_t scale) { |
|
40 return (size > PSIZE_MAX / scale) ? OVERFLOW : size * scale; |
|
41 } |
|
42 |
|
43 inline size_t add_size(size_t size1, size_t size2) { |
|
44 return ((size1 | size2 | (size1 + size2)) > PSIZE_MAX) |
|
45 ? OVERFLOW |
|
46 : size1 + size2; |
|
47 } |
|
48 |
|
49 inline size_t add_size(size_t size1, size_t size2, int size3) { |
|
50 return add_size(add_size(size1, size2), size3); |
|
51 } |
34 |
52 |
35 // These may be expensive, because they have to go via Java TSD, |
53 // These may be expensive, because they have to go via Java TSD, |
36 // if the optional u argument is missing. |
54 // if the optional u argument is missing. |
37 struct unpacker; |
55 struct unpacker; |
38 extern void unpack_abort(const char* msg, unpacker* u = null); |
56 extern void unpack_abort(const char* msg, unpacker* u = null); |