@@ -105,8 +105,10 @@ dup_NC_var(const NC_var *rvarp)
105
105
/* copy the contents of shape may not be necessary, as one must call
106
106
* compute_var_shape() to recompute it after a new variable is created
107
107
*/
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
+ }
110
112
varp -> xsz = rvarp -> xsz ;
111
113
varp -> len = rvarp -> len ;
112
114
varp -> begin = rvarp -> begin ;
@@ -507,13 +509,14 @@ ncmpio_inq_var(void *ncdp,
507
509
#endif
508
510
* ndimsp = varp -> ndims ;
509
511
}
510
- if (dimids != NULL ) {
512
+ if (dimids != NULL ) { /* copy dim IDs for non-scalar */
511
513
#ifdef ENABLE_SUBFILING
512
514
/* 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 )
514
516
memcpy (dimids , varp -> dimids_org , (size_t )varp -> ndims_org * SIZEOF_INT );
515
517
else
516
518
#endif
519
+ if (varp -> ndims > 0 )
517
520
memcpy (dimids , varp -> dimids , (size_t )varp -> ndims * SIZEOF_INT );
518
521
}
519
522
if (nattsp != NULL ) * nattsp = varp -> attrs .ndefined ;
0 commit comments