Skip to content

Commit 8d06222

Browse files
committed
skip memcpy of dim when variables are scalar
1 parent 756c30f commit 8d06222

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/drivers/ncmpio/ncmpio_var.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ dup_NC_var(const NC_var *rvarp)
105105
/* copy the contents of shape may not be necessary, as one must call
106106
* compute_var_shape() to recompute it after a new variable is created
107107
*/
108-
memcpy(varp->shape, rvarp->shape, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
109-
memcpy(varp->dsizes, rvarp->dsizes, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
108+
if (rvarp->ndims > 0) { /* skip memcpy if ndims == 0 (scalar variables) */
109+
memcpy(varp->shape, rvarp->shape, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
110+
memcpy(varp->dsizes, rvarp->dsizes, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
111+
}
110112
varp->xsz = rvarp->xsz;
111113
varp->len = rvarp->len;
112114
varp->begin = rvarp->begin;
@@ -507,13 +509,14 @@ ncmpio_inq_var(void *ncdp,
507509
#endif
508510
*ndimsp = varp->ndims;
509511
}
510-
if (dimids != NULL) {
512+
if (dimids != NULL) { /* copy dim IDs for non-scalar */
511513
#ifdef ENABLE_SUBFILING
512514
/* varp->dimids_org is already set during open or enddef */
513-
if (varp->num_subfiles > 1)
515+
if (varp->num_subfiles > 1 && varp->ndims_org > 0)
514516
memcpy(dimids, varp->dimids_org, (size_t)varp->ndims_org * SIZEOF_INT);
515517
else
516518
#endif
519+
if (varp->ndims > 0)
517520
memcpy(dimids, varp->dimids, (size_t)varp->ndims * SIZEOF_INT);
518521
}
519522
if (nattsp != NULL) *nattsp = varp->attrs.ndefined;

0 commit comments

Comments
 (0)