+ if (sub_type->category_code == e_gras_datadesc_type_cat_array) {
+ /* Damn. Reference to a dynamic array. Allocating the size for it
+ is more complicated */
+ gras_dd_cat_array_t array_data = sub_type->category.array_data;
+ gras_datadesc_type_t *subsub_type;
+
+ subsubcount = array_data.fixed_size;
+ if (subsubcount < 0)
+ TRY(gras_dd_recv_int(sock, r_arch, &subsubcount));
+
+ TRY(gras_datadesc_by_id(array_data.code, &subsub_type));
+
+
+ TRY(gras_dd_alloc_ref(refs,
+ subsub_type->size[GRAS_THISARCH] * subsubcount,
+ r_ref,pointer_type->size[r_arch],
+ (char**)&l_referenced));
+ } else {
+ TRY(gras_dd_alloc_ref(refs,sub_type->size[GRAS_THISARCH],
+ r_ref,pointer_type->size[r_arch],
+ (char**)&l_referenced));
+ }