- int src_idx = map->map[dst_idx];
- if (src_idx != -1)
- *case_data_rw_idx (dst, dst_idx) = *case_data_idx (src, src_idx);
+ size_t n_values = caseproto_get_n_widths (map->proto);
+ struct ccase *dst;
+ size_t dst_idx;
+
+ dst = case_create (map->proto);
+ for (dst_idx = 0; dst_idx < n_values; dst_idx++)
+ {
+ int src_idx = map->map[dst_idx];
+ if (src_idx != -1)
+ value_copy (case_data_rw_idx (dst, dst_idx), case_data_idx (src, src_idx), caseproto_get_width (map->proto, dst_idx));
+ }
+ case_unref (src);
+ return dst;