@@ -89,31 +89,31 @@ CAMLexport value
89
89
caml_ba_alloc (int flags , int num_dims , void * data , intnat * dim )
90
90
{
91
91
uintnat num_elts , asize , size ;
92
- int i ;
92
+ int i , is_managed ;
93
93
value res ;
94
94
struct caml_ba_array * b ;
95
95
intnat dimcopy [CAML_BA_MAX_NUM_DIMS ];
96
96
97
97
CAMLassert (num_dims >= 0 && num_dims <= CAML_BA_MAX_NUM_DIMS );
98
98
CAMLassert ((flags & CAML_BA_KIND_MASK ) <= CAML_BA_CHAR );
99
99
for (i = 0 ; i < num_dims ; i ++ ) dimcopy [i ] = dim [i ];
100
- size = 0 ;
101
- if (data == NULL ) {
102
- num_elts = 1 ;
103
- for (i = 0 ; i < num_dims ; i ++ ) {
104
- if (caml_umul_overflow (num_elts , dimcopy [i ], & num_elts ))
105
- caml_raise_out_of_memory ();
106
- }
107
- if (caml_umul_overflow (num_elts ,
108
- caml_ba_element_size [flags & CAML_BA_KIND_MASK ],
109
- & size ))
100
+ num_elts = 1 ;
101
+ for (i = 0 ; i < num_dims ; i ++ ) {
102
+ if (caml_umul_overflow (num_elts , dimcopy [i ], & num_elts ))
110
103
caml_raise_out_of_memory ();
104
+ }
105
+ if (caml_umul_overflow (num_elts ,
106
+ caml_ba_element_size [flags & CAML_BA_KIND_MASK ],
107
+ & size ))
108
+ caml_raise_out_of_memory ();
109
+ if (data == NULL ) {
111
110
data = malloc (size );
112
111
if (data == NULL && size != 0 ) caml_raise_out_of_memory ();
113
112
flags |= CAML_BA_MANAGED ;
114
113
}
115
114
asize = SIZEOF_BA_ARRAY + num_dims * sizeof (intnat );
116
- res = caml_alloc_custom_mem (& caml_ba_ops , asize , size );
115
+ is_managed = ((flags & CAML_BA_MANAGED_MASK ) == CAML_BA_MANAGED );
116
+ res = caml_alloc_custom_mem (& caml_ba_ops , asize , is_managed ? size : 0 );
117
117
b = Caml_ba_array_val (res );
118
118
b -> data = data ;
119
119
b -> num_dims = num_dims ;
0 commit comments