From 7fbde1b5bcdd3c41cab62b8ea3e4b1de6f40a7bc Mon Sep 17 00:00:00 2001 From: Wei-keng Liao Date: Tue, 25 Oct 2016 15:09:52 -0500 Subject: [PATCH] add a new option ERANGE_FILL to use fill values when NC_ERANGE occurs; sync ncx.m4 with PnetCDF --- libsrc/attr.m4 | 115 +++++---- libsrc/ncx.h | 656 +++++++++++++++++++++++------------------------ libsrc/ncx.m4 | 434 ++++++++++++++++++------------- libsrc/putget.m4 | 24 +- libsrc/v1hpg.c | 16 +- 5 files changed, 673 insertions(+), 572 deletions(-) diff --git a/libsrc/attr.m4 b/libsrc/attr.m4 index 4e87ec675..4f3b44cf2 100644 --- a/libsrc/attr.m4 +++ b/libsrc/attr.m4 @@ -634,31 +634,31 @@ dnl define(`XNCX_PAD_PUTN',dnl `dnl static int -ncx_pad_putn_I$1(void **xpp, size_t nelems, const $1 *tp, nc_type type) +ncx_pad_putn_I$1(void **xpp, size_t nelems, const $1 *tp, nc_type type, void *fillp) { switch(type) { case NC_CHAR: return NC_ECHAR; case NC_BYTE: - return ncx_pad_putn_schar_$1(xpp, nelems, tp); + return ncx_pad_putn_schar_$1(xpp, nelems, tp, fillp); case NC_SHORT: - return ncx_pad_putn_short_$1(xpp, nelems, tp); + return ncx_pad_putn_short_$1(xpp, nelems, tp, fillp); case NC_INT: - return ncx_putn_int_$1(xpp, nelems, tp); + return ncx_putn_int_$1(xpp, nelems, tp, fillp); case NC_FLOAT: - return ncx_putn_float_$1(xpp, nelems, tp); + return ncx_putn_float_$1(xpp, nelems, tp, fillp); case NC_DOUBLE: - return ncx_putn_double_$1(xpp, nelems, tp); + return ncx_putn_double_$1(xpp, nelems, tp, fillp); case NC_UBYTE: - return ncx_pad_putn_uchar_$1(xpp, nelems, tp); + return ncx_pad_putn_uchar_$1(xpp, nelems, tp, fillp); case NC_USHORT: - return ncx_putn_ushort_$1(xpp, nelems, tp); + return ncx_putn_ushort_$1(xpp, nelems, tp, fillp); case NC_UINT: - return ncx_putn_uint_$1(xpp, nelems, tp); + return ncx_putn_uint_$1(xpp, nelems, tp, fillp); case NC_INT64: - return ncx_putn_longlong_$1(xpp, nelems, tp); + return ncx_putn_longlong_$1(xpp, nelems, tp, fillp); case NC_UINT64: - return ncx_putn_ulonglong_$1(xpp, nelems, tp); + return ncx_putn_ulonglong_$1(xpp, nelems, tp, fillp); default: assert("ncx_pad_putn_I$1 invalid type" == 0); } @@ -671,31 +671,31 @@ dnl define(`XNCX_PAD_GETN',dnl `dnl static int -ncx_pad_getn_I$1(const void **xpp, size_t nelems, $1 *tp, nc_type type) +ncx_pad_getn_I$1(const void **xpp, size_t nelems, $1 *tp, nc_type type, $1 fillv) { switch(type) { case NC_CHAR: return NC_ECHAR; case NC_BYTE: - return ncx_pad_getn_schar_$1(xpp, nelems, tp); + return ncx_pad_getn_schar_$1(xpp, nelems, tp, fillv); case NC_SHORT: - return ncx_pad_getn_short_$1(xpp, nelems, tp); + return ncx_pad_getn_short_$1(xpp, nelems, tp, fillv); case NC_INT: - return ncx_getn_int_$1(xpp, nelems, tp); + return ncx_getn_int_$1(xpp, nelems, tp, fillv); case NC_FLOAT: - return ncx_getn_float_$1(xpp, nelems, tp); + return ncx_getn_float_$1(xpp, nelems, tp, fillv); case NC_DOUBLE: - return ncx_getn_double_$1(xpp, nelems, tp); + return ncx_getn_double_$1(xpp, nelems, tp, fillv); case NC_UBYTE: - return ncx_pad_getn_uchar_$1(xpp, nelems, tp); + return ncx_pad_getn_uchar_$1(xpp, nelems, tp, fillv); case NC_USHORT: - return ncx_getn_ushort_$1(xpp, nelems, tp); + return ncx_getn_ushort_$1(xpp, nelems, tp, fillv); case NC_UINT: - return ncx_getn_uint_$1(xpp, nelems, tp); + return ncx_getn_uint_$1(xpp, nelems, tp, fillv); case NC_INT64: - return ncx_getn_longlong_$1(xpp, nelems, tp); + return ncx_getn_longlong_$1(xpp, nelems, tp, fillv); case NC_UINT64: - return ncx_getn_ulonglong_$1(xpp, nelems, tp); + return ncx_getn_ulonglong_$1(xpp, nelems, tp, fillv); default: assert("ncx_pad_getn_I$1 invalid type" == 0); } @@ -743,31 +743,31 @@ XNCX_PAD_GETN(ulonglong) /* Common dispatcher for put cases */ static int dispatchput(void **xpp, size_t nelems, const void* tp, - nc_type atype, nc_type memtype) + nc_type atype, nc_type memtype, void *fillp) { switch (memtype) { case NC_CHAR: return ncx_pad_putn_text(xpp,nelems, (char *)tp); case NC_BYTE: - return ncx_pad_putn_Ischar(xpp, nelems, (schar*)tp, atype); + return ncx_pad_putn_Ischar(xpp, nelems, (schar*)tp, atype, fillp); case NC_SHORT: - return ncx_pad_putn_Ishort(xpp, nelems, (short*)tp, atype); + return ncx_pad_putn_Ishort(xpp, nelems, (short*)tp, atype, fillp); case NC_INT: - return ncx_pad_putn_Iint(xpp, nelems, (int*)tp, atype); + return ncx_pad_putn_Iint(xpp, nelems, (int*)tp, atype, fillp); case NC_FLOAT: - return ncx_pad_putn_Ifloat(xpp, nelems, (float*)tp, atype); + return ncx_pad_putn_Ifloat(xpp, nelems, (float*)tp, atype, fillp); case NC_DOUBLE: - return ncx_pad_putn_Idouble(xpp, nelems, (double*)tp, atype); + return ncx_pad_putn_Idouble(xpp, nelems, (double*)tp, atype, fillp); case NC_UBYTE: /*Synthetic*/ - return ncx_pad_putn_Iuchar(xpp,nelems, (uchar *)tp, atype); + return ncx_pad_putn_Iuchar(xpp,nelems, (uchar *)tp, atype, fillp); case NC_INT64: - return ncx_pad_putn_Ilonglong(xpp, nelems, (longlong*)tp, atype); + return ncx_pad_putn_Ilonglong(xpp, nelems, (longlong*)tp, atype, fillp); case NC_USHORT: - return ncx_pad_putn_Iushort(xpp, nelems, (ushort*)tp, atype); + return ncx_pad_putn_Iushort(xpp, nelems, (ushort*)tp, atype, fillp); case NC_UINT: - return ncx_pad_putn_Iuint(xpp, nelems, (uint*)tp, atype); + return ncx_pad_putn_Iuint(xpp, nelems, (uint*)tp, atype, fillp); case NC_UINT64: - return ncx_pad_putn_Iulonglong(xpp, nelems, (ulonglong*)tp, atype); + return ncx_pad_putn_Iulonglong(xpp, nelems, (ulonglong*)tp, atype, fillp); case NC_NAT: return NC_EBADTYPE; default: @@ -793,6 +793,7 @@ NC3_put_att( NC_attr **attrpp; NC_attr *old = NULL; NC_attr *attrp; + unsigned char fill[8]; /* fill value in internal representation */ status = NC_check_id(ncid, &nc); if(status != NC_NOERR) @@ -831,6 +832,9 @@ NC3_put_att( /* 4 cases: exists X indef */ + status = NC3_inq_default_fill_value(type, &fill); + if (status != NC_NOERR) return status; + if(attrpp != NULL) { /* name in use */ if(!NC_indef(ncp)) { const size_t xsz = ncx_len_NC_attrV(type, nelems); @@ -846,10 +850,12 @@ NC3_put_att( if(nelems != 0) { void *xp = attrp->xvalue; /* for CDF-1 and CDF-2, NC_BYTE is treated the same type as uchar memtype */ - if (!fIsSet(ncp->flags,NC_64BIT_DATA) && type == NC_BYTE && memtype == NC_UBYTE) - status = dispatchput(&xp, nelems, (const void*)value, memtype, memtype); - else - status = dispatchput(&xp, nelems, (const void*)value, type, memtype); + if (!fIsSet(ncp->flags,NC_64BIT_DATA) && type == NC_BYTE && memtype == NC_UBYTE) { + status = NC3_inq_default_fill_value(NC_UBYTE, &fill); + if (status != NC_NOERR) return status; + status = dispatchput(&xp, nelems, value, memtype, memtype, &fill); + } else + status = dispatchput(&xp, nelems, value, type, memtype, &fill); } set_NC_hdirty(ncp); @@ -882,10 +888,12 @@ NC3_put_att( if(nelems != 0) { void *xp = attrp->xvalue; /* for CDF-1 and CDF-2, NC_BYTE is treated the same type as uchar memtype */ - if (!fIsSet(ncp->flags,NC_64BIT_DATA) && type == NC_BYTE && memtype == NC_UBYTE) - status = dispatchput(&xp, nelems, (const void*)value, memtype, memtype); - else - status = dispatchput(&xp, nelems, (const void*)value, type, memtype); + if (!fIsSet(ncp->flags,NC_64BIT_DATA) && type == NC_BYTE && memtype == NC_UBYTE) { + status = NC3_inq_default_fill_value(NC_UBYTE, &fill); + if (status != NC_NOERR) return status; + status = dispatchput(&xp, nelems, value, memtype, memtype, &fill); + } else + status = dispatchput(&xp, nelems, value, type, memtype, &fill); } if(attrpp != NULL) { @@ -940,31 +948,31 @@ NC3_get_att( xp = attrp->xvalue; switch (memtype) { case NC_CHAR: - return ncx_pad_getn_text(&xp, attrp->nelems , (char *)value); + return ncx_pad_getn_text(&xp, attrp->nelems, (char *)value); case NC_BYTE: - return ncx_pad_getn_Ischar(&xp,attrp->nelems,(schar*)value,attrp->type); + return ncx_pad_getn_Ischar(&xp,attrp->nelems,(schar*)value,attrp->type, NC_FILL_BYTE); case NC_SHORT: - return ncx_pad_getn_Ishort(&xp,attrp->nelems,(short*)value,attrp->type); + return ncx_pad_getn_Ishort(&xp,attrp->nelems,(short*)value,attrp->type, NC_FILL_SHORT); case NC_INT: - return ncx_pad_getn_Iint(&xp,attrp->nelems,(int*)value,attrp->type); + return ncx_pad_getn_Iint(&xp,attrp->nelems,(int*)value,attrp->type, NC_FILL_INT); case NC_FLOAT: - return ncx_pad_getn_Ifloat(&xp,attrp->nelems,(float*)value,attrp->type); + return ncx_pad_getn_Ifloat(&xp,attrp->nelems,(float*)value,attrp->type, NC_FILL_FLOAT); case NC_DOUBLE: - return ncx_pad_getn_Idouble(&xp,attrp->nelems,(double*)value,attrp->type); + return ncx_pad_getn_Idouble(&xp,attrp->nelems,(double*)value,attrp->type, NC_FILL_DOUBLE); case NC_INT64: - return ncx_pad_getn_Ilonglong(&xp,attrp->nelems,(longlong*)value,attrp->type); + return ncx_pad_getn_Ilonglong(&xp,attrp->nelems,(longlong*)value,attrp->type, NC_FILL_UINT64); case NC_UBYTE: /* Synthetic */ /* for CDF-1 and CDF-2, NC_BYTE is treated the same type as uchar memtype */ if (!fIsSet(ncp->flags,NC_64BIT_DATA) && attrp->type == NC_BYTE) - return ncx_pad_getn_Iuchar(&xp, attrp->nelems, (uchar *)value, NC_UBYTE); + return ncx_pad_getn_Iuchar(&xp, attrp->nelems, (uchar *)value, NC_UBYTE, NC_FILL_UBYTE); else - return ncx_pad_getn_Iuchar(&xp, attrp->nelems, (uchar *)value, attrp->type); + return ncx_pad_getn_Iuchar(&xp, attrp->nelems, (uchar *)value, attrp->type, NC_FILL_UBYTE); case NC_USHORT: - return ncx_pad_getn_Iushort(&xp,attrp->nelems,(ushort*)value,attrp->type); + return ncx_pad_getn_Iushort(&xp,attrp->nelems,(ushort*)value,attrp->type, NC_FILL_USHORT); case NC_UINT: - return ncx_pad_getn_Iuint(&xp,attrp->nelems,(uint*)value,attrp->type); + return ncx_pad_getn_Iuint(&xp,attrp->nelems,(uint*)value,attrp->type, NC_FILL_UINT); case NC_UINT64: - return ncx_pad_getn_Iulonglong(&xp,attrp->nelems,(ulonglong*)value,attrp->type); + return ncx_pad_getn_Iulonglong(&xp,attrp->nelems,(ulonglong*)value,attrp->type, NC_FILL_UINT64); case NC_NAT: return NC_EBADTYPE; @@ -974,3 +982,4 @@ NC3_get_att( status = NC_EBADTYPE; return status; } + diff --git a/libsrc/ncx.h b/libsrc/ncx.h index 08a7874b1..ef51ee050 100644 --- a/libsrc/ncx.h +++ b/libsrc/ncx.h @@ -210,34 +210,34 @@ typedef char schar; #if 0 extern int -ncx_get_schar_schar(const void *xp, schar *ip); +ncx_get_schar_schar(const void *xp, schar *ip, schar fillv); extern int -ncx_get_schar_uchar(const void *xp, uchar *ip); +ncx_get_schar_uchar(const void *xp, uchar *ip, uchar fillv); extern int -ncx_get_schar_short(const void *xp, short *ip); +ncx_get_schar_short(const void *xp, short *ip, short fillv); extern int -ncx_get_schar_int(const void *xp, int *ip); +ncx_get_schar_int(const void *xp, int *ip, int fillv); extern int -ncx_get_schar_long(const void *xp, long *ip); +ncx_get_schar_long(const void *xp, long *ip, long fillv); extern int -ncx_get_schar_float(const void *xp, float *ip); +ncx_get_schar_float(const void *xp, float *ip, float fillv); extern int -ncx_get_schar_double(const void *xp, double *ip); +ncx_get_schar_double(const void *xp, double *ip, double fillv); extern int -ncx_put_schar_schar(void *xp, const schar *ip); +ncx_put_schar_schar(void *xp, const schar *ip, void *fillp); extern int -ncx_put_schar_uchar(void *xp, const uchar *ip); +ncx_put_schar_uchar(void *xp, const uchar *ip, void *fillp); extern int -ncx_put_schar_short(void *xp, const short *ip); +ncx_put_schar_short(void *xp, const short *ip, void *fillp); extern int -ncx_put_schar_int(void *xp, const int *ip); +ncx_put_schar_int(void *xp, const int *ip, void *fillp); extern int -ncx_put_schar_long(void *xp, const long *ip); +ncx_put_schar_long(void *xp, const long *ip, void *fillp); extern int -ncx_put_schar_float(void *xp, const float *ip); +ncx_put_schar_float(void *xp, const float *ip, void *fillp); extern int -ncx_put_schar_double(void *xp, const double *ip); +ncx_put_schar_double(void *xp, const double *ip, void *fillp); #endif /* @@ -278,8 +278,8 @@ ncx_put_uint32(void **xpp, const unsigned int ip); extern int ncx_put_uint64(void **xpp, const unsigned long long ip); -extern int ncx_get_int_int(const void *xp, int *ip); -extern int ncx_put_int_int(void *xp, const int *ip); +extern int ncx_get_int_int(const void *xp, int *ip, int fillv); +extern int ncx_put_int_int(void *xp, const int *ip, void *fillp); /* * Aggregate numeric conversion functions. @@ -323,665 +323,665 @@ extern int ncx_put_int_int(void *xp, const int *ip); /*---- schar ----------------------------------------------------------------*/ extern int -ncx_getn_schar_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_schar_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_schar_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_schar_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_schar_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_schar_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_schar_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_schar_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_schar_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_schar_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_schar_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_schar_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_schar_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_schar_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_schar_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_schar_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_schar_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_schar_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_schar_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_schar_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_pad_getn_schar_schar (const void **xpp, size_t nelems, schar *ip); +ncx_pad_getn_schar_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_pad_getn_schar_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_pad_getn_schar_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_pad_getn_schar_short (const void **xpp, size_t nelems, short *ip); +ncx_pad_getn_schar_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_pad_getn_schar_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_pad_getn_schar_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_pad_getn_schar_int (const void **xpp, size_t nelems, int *ip); +ncx_pad_getn_schar_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_pad_getn_schar_uint (const void **xpp, size_t nelems, uint *ip); +ncx_pad_getn_schar_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_pad_getn_schar_long (const void **xpp, size_t nelems, long *ip); +ncx_pad_getn_schar_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_pad_getn_schar_float (const void **xpp, size_t nelems, float *ip); +ncx_pad_getn_schar_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_pad_getn_schar_double(const void **xpp, size_t nelems, double *ip); +ncx_pad_getn_schar_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_pad_getn_schar_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_pad_getn_schar_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_pad_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_pad_getn_schar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_schar_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_schar_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_schar_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_schar_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_schar_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_schar_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_schar_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_schar_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_schar_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_schar_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_schar_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_schar_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_schar_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_schar_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_schar_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_schar_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_schar_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_schar_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); extern int -ncx_pad_putn_schar_schar (void **xpp, size_t nelems, const schar *ip); +ncx_pad_putn_schar_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_pad_putn_schar_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_pad_putn_schar_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_pad_putn_schar_short (void **xpp, size_t nelems, const short *ip); +ncx_pad_putn_schar_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_pad_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_pad_putn_schar_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_pad_putn_schar_int (void **xpp, size_t nelems, const int *ip); +ncx_pad_putn_schar_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_pad_putn_schar_uint (void **xpp, size_t nelems, const uint *ip); +ncx_pad_putn_schar_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_pad_putn_schar_long (void **xpp, size_t nelems, const long *ip); +ncx_pad_putn_schar_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_pad_putn_schar_float (void **xpp, size_t nelems, const float *ip); +ncx_pad_putn_schar_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_pad_putn_schar_double(void **xpp, size_t nelems, const double *ip); +ncx_pad_putn_schar_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_pad_putn_schar_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_pad_putn_schar_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_pad_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_pad_putn_schar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- uchar ----------------------------------------------------------------*/ extern int -ncx_getn_uchar_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_uchar_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_uchar_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_uchar_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_uchar_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_uchar_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_uchar_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_uchar_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_uchar_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_uchar_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_uchar_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_uchar_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_uchar_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_uchar_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_uchar_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_uchar_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_uchar_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_uchar_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_uchar_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_uchar_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_uchar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_uchar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_pad_getn_uchar_schar (const void **xpp, size_t nelems, schar *ip); +ncx_pad_getn_uchar_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_pad_getn_uchar_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_pad_getn_uchar_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_pad_getn_uchar_short (const void **xpp, size_t nelems, short *ip); +ncx_pad_getn_uchar_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_pad_getn_uchar_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_pad_getn_uchar_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_pad_getn_uchar_int (const void **xpp, size_t nelems, int *ip); +ncx_pad_getn_uchar_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_pad_getn_uchar_uint (const void **xpp, size_t nelems, uint *ip); +ncx_pad_getn_uchar_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_pad_getn_uchar_long (const void **xpp, size_t nelems, long *ip); +ncx_pad_getn_uchar_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_pad_getn_uchar_float (const void **xpp, size_t nelems, float *ip); +ncx_pad_getn_uchar_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_pad_getn_uchar_double(const void **xpp, size_t nelems, double *ip); +ncx_pad_getn_uchar_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_pad_getn_uchar_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_pad_getn_uchar_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_pad_getn_uchar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_pad_getn_uchar_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_uchar_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_uchar_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_uchar_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_uchar_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_uchar_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_uchar_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_uchar_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_uchar_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_uchar_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_uchar_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_uchar_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_uchar_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_uchar_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_uchar_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_uchar_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_uchar_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_uchar_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_uchar_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); extern int -ncx_pad_putn_uchar_schar (void **xpp, size_t nelems, const schar *ip); +ncx_pad_putn_uchar_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_pad_putn_uchar_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_pad_putn_uchar_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_pad_putn_uchar_short (void **xpp, size_t nelems, const short *ip); +ncx_pad_putn_uchar_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_pad_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_pad_putn_uchar_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_pad_putn_uchar_int (void **xpp, size_t nelems, const int *ip); +ncx_pad_putn_uchar_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_pad_putn_uchar_uint (void **xpp, size_t nelems, const uint *ip); +ncx_pad_putn_uchar_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_pad_putn_uchar_long (void **xpp, size_t nelems, const long *ip); +ncx_pad_putn_uchar_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_pad_putn_uchar_float (void **xpp, size_t nelems, const float *ip); +ncx_pad_putn_uchar_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_pad_putn_uchar_double(void **xpp, size_t nelems, const double *ip); +ncx_pad_putn_uchar_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_pad_putn_uchar_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_pad_putn_uchar_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_pad_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_pad_putn_uchar_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- short ----------------------------------------------------------------*/ extern int -ncx_getn_short_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_short_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_short_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_short_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_short_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_short_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_short_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_short_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_short_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_short_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_short_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_short_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_short_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_short_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_short_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_short_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_short_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_short_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_short_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_short_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_pad_getn_short_schar (const void **xpp, size_t nelems, schar *ip); +ncx_pad_getn_short_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_pad_getn_short_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_pad_getn_short_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_pad_getn_short_short (const void **xpp, size_t nelems, short *ip); +ncx_pad_getn_short_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_pad_getn_short_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_pad_getn_short_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_pad_getn_short_int (const void **xpp, size_t nelems, int *ip); +ncx_pad_getn_short_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_pad_getn_short_uint (const void **xpp, size_t nelems, uint *ip); +ncx_pad_getn_short_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_pad_getn_short_long (const void **xpp, size_t nelems, long *ip); +ncx_pad_getn_short_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_pad_getn_short_float (const void **xpp, size_t nelems, float *ip); +ncx_pad_getn_short_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_pad_getn_short_double(const void **xpp, size_t nelems, double *ip); +ncx_pad_getn_short_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_pad_getn_short_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_pad_getn_short_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_pad_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_pad_getn_short_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_short_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_short_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_short_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_short_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_short_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_short_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_short_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_short_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_short_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_short_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_short_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_short_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_short_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_short_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_short_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_short_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_short_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_short_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); extern int -ncx_pad_putn_short_schar (void **xpp, size_t nelems, const schar *ip); +ncx_pad_putn_short_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_pad_putn_short_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_pad_putn_short_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_pad_putn_short_short (void **xpp, size_t nelems, const short *ip); +ncx_pad_putn_short_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_pad_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_pad_putn_short_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_pad_putn_short_int (void **xpp, size_t nelems, const int *ip); +ncx_pad_putn_short_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_pad_putn_short_uint (void **xpp, size_t nelems, const uint *ip); +ncx_pad_putn_short_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_pad_putn_short_long (void **xpp, size_t nelems, const long *ip); +ncx_pad_putn_short_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_pad_putn_short_float (void **xpp, size_t nelems, const float *ip); +ncx_pad_putn_short_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_pad_putn_short_double(void **xpp, size_t nelems, const double *ip); +ncx_pad_putn_short_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_pad_putn_short_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_pad_putn_short_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_pad_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_pad_putn_short_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- ushort ---------------------------------------------------------------*/ extern int -ncx_getn_ushort_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_ushort_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_ushort_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_ushort_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_ushort_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_ushort_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_ushort_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_ushort_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_ushort_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_ushort_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_ushort_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_ushort_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_ushort_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_ushort_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_ushort_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_ushort_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_ushort_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_ushort_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_ushort_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_ushort_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_ushort_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_ushort_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_pad_getn_ushort_schar (const void **xpp, size_t nelems, schar *ip); +ncx_pad_getn_ushort_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_pad_getn_ushort_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_pad_getn_ushort_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_pad_getn_ushort_short (const void **xpp, size_t nelems, short *ip); +ncx_pad_getn_ushort_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_pad_getn_ushort_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_pad_getn_ushort_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_pad_getn_ushort_int (const void **xpp, size_t nelems, int *ip); +ncx_pad_getn_ushort_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_pad_getn_ushort_uint (const void **xpp, size_t nelems, uint *ip); +ncx_pad_getn_ushort_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_pad_getn_ushort_long (const void **xpp, size_t nelems, long *ip); +ncx_pad_getn_ushort_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_pad_getn_ushort_float (const void **xpp, size_t nelems, float *ip); +ncx_pad_getn_ushort_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_pad_getn_ushort_double(const void **xpp, size_t nelems, double *ip); +ncx_pad_getn_ushort_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_pad_getn_ushort_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_pad_getn_ushort_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_pad_getn_ushort_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_pad_getn_ushort_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_ushort_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_ushort_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_ushort_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_ushort_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_ushort_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_ushort_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_ushort_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_ushort_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_ushort_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_ushort_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_ushort_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_ushort_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_ushort_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_ushort_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_ushort_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_ushort_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_ushort_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_ushort_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); extern int -ncx_pad_putn_ushort_schar (void **xpp, size_t nelems, const schar *ip); +ncx_pad_putn_ushort_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_pad_putn_ushort_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_pad_putn_ushort_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_pad_putn_ushort_short (void **xpp, size_t nelems, const short *ip); +ncx_pad_putn_ushort_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_pad_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_pad_putn_ushort_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_pad_putn_ushort_int (void **xpp, size_t nelems, const int *ip); +ncx_pad_putn_ushort_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_pad_putn_ushort_uint (void **xpp, size_t nelems, const uint *ip); +ncx_pad_putn_ushort_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_pad_putn_ushort_long (void **xpp, size_t nelems, const long *ip); +ncx_pad_putn_ushort_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_pad_putn_ushort_float (void **xpp, size_t nelems, const float *ip); +ncx_pad_putn_ushort_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_pad_putn_ushort_double(void **xpp, size_t nelems, const double *ip); +ncx_pad_putn_ushort_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_pad_putn_ushort_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_pad_putn_ushort_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_pad_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_pad_putn_ushort_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- int ------------------------------------------------------------------*/ extern int -ncx_getn_int_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_int_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_int_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_int_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_int_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_int_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_int_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_int_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_int_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_int_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_int_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_int_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_int_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_int_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_long_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_long_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_int_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_int_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_int_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_int_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_int_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_int_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_int_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_int_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_int_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_int_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_int_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_int_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_int_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_int_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_int_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_int_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_int_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_int_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_int_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_int_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_int_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_int_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_long_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_long_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_int_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_int_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_int_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_int_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_int_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_int_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_int_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_int_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- uint -----------------------------------------------------------------*/ extern int -ncx_getn_uint_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_uint_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_uint_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_uint_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_uint_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_uint_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_uint_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_uint_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_uint_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_uint_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_uint_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_uint_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_uint_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_uint_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_long_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_long_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_uint_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_uint_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_uint_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_uint_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_uint_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_uint_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_uint_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_uint_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_uint_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_uint_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_uint_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_uint_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_uint_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_uint_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_uint_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_uint_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_uint_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_uint_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_uint_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_uint_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_uint_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_uint_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_long_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_long_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_uint_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_uint_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_uint_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_uint_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_uint_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_uint_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_uint_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_uint_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- float ----------------------------------------------------------------*/ extern int -ncx_getn_float_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_float_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_float_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_float_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_float_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_float_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_float_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_float_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_float_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_float_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_float_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_float_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_float_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_float_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_float_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_float_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_float_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_float_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_float_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_float_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_float_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_float_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_float_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_float_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_float_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_float_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_float_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_float_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_float_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_float_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_float_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_float_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_float_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_float_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_float_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_float_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_float_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_float_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_float_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_float_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_float_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_float_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_float_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_float_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- double ---------------------------------------------------------------*/ extern int -ncx_getn_double_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_double_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_double_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_double_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_double_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_double_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_double_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_double_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_double_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_double_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_double_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_double_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_double_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_double_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_double_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_double_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_double_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_double_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_double_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_double_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_double_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_double_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_double_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_double_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_double_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_double_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_double_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_double_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_double_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_double_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_double_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_double_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_double_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_double_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_double_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_double_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_double_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_double_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_double_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_double_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_double_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_double_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_double_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_double_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- longlong ----------------------------------------------------------------*/ extern int -ncx_getn_longlong_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_longlong_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_longlong_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_longlong_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_longlong_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_longlong_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_longlong_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_longlong_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_longlong_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_longlong_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_longlong_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_longlong_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_longlong_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_longlong_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_longlong_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_longlong_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_longlong_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_longlong_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_longlong_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_longlong_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_longlong_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_longlong_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_longlong_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_longlong_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_longlong_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_longlong_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_longlong_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_longlong_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_longlong_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_longlong_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_longlong_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_longlong_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_longlong_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_longlong_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_longlong_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_longlong_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_longlong_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_longlong_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_longlong_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_longlong_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_longlong_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_longlong_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_longlong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_longlong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /*---- ulonglong ---------------------------------------------------------------*/ extern int -ncx_getn_ulonglong_schar (const void **xpp, size_t nelems, schar *ip); +ncx_getn_ulonglong_schar (const void **xpp, size_t nelems, schar *ip, schar fillv); extern int -ncx_getn_ulonglong_uchar (const void **xpp, size_t nelems, uchar *ip); +ncx_getn_ulonglong_uchar (const void **xpp, size_t nelems, uchar *ip, uchar fillv); extern int -ncx_getn_ulonglong_short (const void **xpp, size_t nelems, short *ip); +ncx_getn_ulonglong_short (const void **xpp, size_t nelems, short *ip, short fillv); extern int -ncx_getn_ulonglong_ushort(const void **xpp, size_t nelems, ushort *ip); +ncx_getn_ulonglong_ushort(const void **xpp, size_t nelems, ushort *ip, ushort fillv); extern int -ncx_getn_ulonglong_int (const void **xpp, size_t nelems, int *ip); +ncx_getn_ulonglong_int (const void **xpp, size_t nelems, int *ip, int fillv); extern int -ncx_getn_ulonglong_uint (const void **xpp, size_t nelems, uint *ip); +ncx_getn_ulonglong_uint (const void **xpp, size_t nelems, uint *ip, uint fillv); extern int -ncx_getn_ulonglong_long (const void **xpp, size_t nelems, long *ip); +ncx_getn_ulonglong_long (const void **xpp, size_t nelems, long *ip, long fillv); extern int -ncx_getn_ulonglong_float (const void **xpp, size_t nelems, float *ip); +ncx_getn_ulonglong_float (const void **xpp, size_t nelems, float *ip, float fillv); extern int -ncx_getn_ulonglong_double(const void **xpp, size_t nelems, double *ip); +ncx_getn_ulonglong_double(const void **xpp, size_t nelems, double *ip, double fillv); extern int -ncx_getn_ulonglong_longlong (const void **xpp, size_t nelems, longlong *ip); +ncx_getn_ulonglong_longlong (const void **xpp, size_t nelems, longlong *ip, longlong fillv); extern int -ncx_getn_ulonglong_ulonglong(const void **xpp, size_t nelems, ulonglong *ip); +ncx_getn_ulonglong_ulonglong(const void **xpp, size_t nelems, ulonglong *ip, ulonglong fillv); extern int -ncx_putn_ulonglong_schar (void **xpp, size_t nelems, const schar *ip); +ncx_putn_ulonglong_schar (void **xpp, size_t nelems, const schar *ip, void *fillp); extern int -ncx_putn_ulonglong_uchar (void **xpp, size_t nelems, const uchar *ip); +ncx_putn_ulonglong_uchar (void **xpp, size_t nelems, const uchar *ip, void *fillp); extern int -ncx_putn_ulonglong_short (void **xpp, size_t nelems, const short *ip); +ncx_putn_ulonglong_short (void **xpp, size_t nelems, const short *ip, void *fillp); extern int -ncx_putn_ulonglong_ushort(void **xpp, size_t nelems, const ushort *ip); +ncx_putn_ulonglong_ushort(void **xpp, size_t nelems, const ushort *ip, void *fillp); extern int -ncx_putn_ulonglong_int (void **xpp, size_t nelems, const int *ip); +ncx_putn_ulonglong_int (void **xpp, size_t nelems, const int *ip, void *fillp); extern int -ncx_putn_ulonglong_uint (void **xpp, size_t nelems, const uint *ip); +ncx_putn_ulonglong_uint (void **xpp, size_t nelems, const uint *ip, void *fillp); extern int -ncx_putn_ulonglong_long (void **xpp, size_t nelems, const long *ip); +ncx_putn_ulonglong_long (void **xpp, size_t nelems, const long *ip, void *fillp); extern int -ncx_putn_ulonglong_float (void **xpp, size_t nelems, const float *ip); +ncx_putn_ulonglong_float (void **xpp, size_t nelems, const float *ip, void *fillp); extern int -ncx_putn_ulonglong_double(void **xpp, size_t nelems, const double *ip); +ncx_putn_ulonglong_double(void **xpp, size_t nelems, const double *ip, void *fillp); extern int -ncx_putn_ulonglong_longlong (void **xpp, size_t nelems, const longlong *ip); +ncx_putn_ulonglong_longlong (void **xpp, size_t nelems, const longlong *ip, void *fillp); extern int -ncx_putn_ulonglong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip); +ncx_putn_ulonglong_ulonglong(void **xpp, size_t nelems, const ulonglong *ip, void *fillp); /* diff --git a/libsrc/ncx.m4 b/libsrc/ncx.m4 index a094e7984..b78d65343 100644 --- a/libsrc/ncx.m4 +++ b/libsrc/ncx.m4 @@ -9,15 +9,16 @@ dnl * Copyright (C) 2014, Northwestern University and Argonne National Laboratory * See COPYRIGHT notice in top-level directory. */ -/* $Id: ncx.m4 2540 2016-10-12 17:33:08Z wkliao $ */ +/* $Id: ncx.m4 2575 2016-10-25 00:01:08Z wkliao $ */ + +#pragma GCC diagnostic ignored "-Wunused-parameter" dnl -dnl If the m4 macro "ERANGE_SKIP" below is defined, the I/O to data elements -dnl that cause NC_ERANGE will be skipped. +dnl If the m4 macro "ERANGE_FILL" is defined, the I/O to data elements +dnl that cause NC_ERANGE will be filled with the NC default fill values. dnl -dnl define(`ERANGE_SKIP')dnl -define(`SKIP_ASSIGN', `ifdef(`ERANGE_SKIP', `$1++; $2++; continue;')') +define(`SKIP_LOOP', `ifdef(`ERANGE_FILL', `$1++; $2++; continue;')') dnl dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF @@ -43,9 +44,9 @@ ifdef(`PNETCDF',` `#'include "ncx.h" `#'include "nc3dispatch.h"') -define(`IntType', `ifdef(`PNETCDF', `MPI_Offset', `size_t')')dnl -define(`APIPrefix', `ifdef(`PNETCDF', `ncmpi', `nc')')dnl -define(`NC_TYPE', `ifdef(`PNETCDF', `ifelse( +define(`IntType', `ifdef(`PNETCDF', `MPI_Offset', `size_t')')dnl +define(`APIPrefix',`ifdef(`PNETCDF', `ncmpi', `nc')')dnl +define(`NC_TYPE', `ifdef(`PNETCDF', `ifelse( `$1', `schar', `NC_BYTE',dnl `$1', `uchar', `NC_UBYTE',dnl `$1', `short', `NC_SHORT',dnl @@ -61,10 +62,8 @@ define(`NC_TYPE', `ifdef(`PNETCDF', `ifelse( `$1', `uint64', `ulonglong',dnl `$1')')')dnl -ifdef(`PNETCDF', , ` -`#'define DEBUG_RETURN_ERROR(err) return err; -`#'define DEBUG_ASSIGN_ERROR(status, err) status = err; -`#'define DEBUG_TRACE_ERROR') +ifdef(`PNETCDF',,`define(`DEBUG_RETURN_ERROR',`return $1;')') +ifdef(`PNETCDF',,`define(`DEBUG_ASSIGN_ERROR',`$1 = $2;')') #ifdef HAVE_INTTYPES_H #include /* uint16_t, uint32_t, uint64_t */ @@ -72,6 +71,25 @@ ifdef(`PNETCDF', , ` #include /* uint16_t, uint32_t, uint64_t */ #endif +dnl +dnl *fillp is the fill value in internal representation +dnl +define(`FillValue', `ifdef(`ERANGE_FILL', `ifelse( +`$1', `schar', `if (fillp != NULL) memcpy($2, fillp, 1);',dnl +`$1', `uchar', `if (fillp != NULL) memcpy($2, fillp, 1);',dnl +`$1', `short', `if (fillp != NULL) memcpy($2, fillp, 2);',dnl +`$1', `ushort', `if (fillp != NULL) memcpy($2, fillp, 2);',dnl +`$1', `int', `if (fillp != NULL) memcpy($2, fillp, 4);',dnl +`$1', `uint', `if (fillp != NULL) memcpy($2, fillp, 4);',dnl +`$1', `long', `if (fillp != NULL) memcpy($2, fillp, SIZEOF_LONG);', dnl +`$1', `ulong', `if (fillp != NULL) memcpy($2, fillp, SIZEOF_ULONG);',dnl +`$1', `float', `if (fillp != NULL) memcpy($2, fillp, 4);',dnl +`$1', `double', `if (fillp != NULL) memcpy($2, fillp, 8);',dnl +`$1', `longlong', `if (fillp != NULL) memcpy($2, fillp, 8);',dnl +`$1', `int64', `if (fillp != NULL) memcpy($2, fillp, 8);',dnl +`$1', `ulonglong', `if (fillp != NULL) memcpy($2, fillp, 8);',dnl +`$1', `uint64', `if (fillp != NULL) memcpy($2, fillp, 8);')')')dnl + /* * The only error code returned from subroutines in this file is NC_ERANGE, * if errors are detected. @@ -207,6 +225,7 @@ static const char nada[X_ALIGN] = {0, 0, 0, 0}; inline static void swapn2b(void *dst, const void *src, IntType nn) { + /* it is OK if dst == src */ int i; uint16_t *op = (uint16_t*) dst; uint16_t *ip = (uint16_t*) src; @@ -533,8 +552,11 @@ dnl dnl For GET APIs boundary check dnl define(`GETF_CheckBND', -`if (xx > (double)Upcase($1)_MAX || xx < Dmin($1)) DEBUG_RETURN_ERROR(NC_ERANGE) - *ip = ($1)xx;') +`if (xx > (double)Upcase($1)_MAX || xx < Dmin($1)) { + ifdef(`ERANGE_FILL',`*ip = fillv;') + DEBUG_RETURN_ERROR(NC_ERANGE) + } + *ip = ($1)xx;')dnl dnl dnl For GET APIs boudnary check for when $1 is either 'longlong' or 'ulonglong' @@ -544,36 +566,12 @@ define(`GETF_CheckBND2', `if (xx == Upcase($1)_MAX) *ip = Upcase($1)_MAX;',dnl for unsigned type `if (xx == Upcase($1)_MAX) *ip = Upcase($1)_MAX; else if (xx == Upcase($1)_MIN) *ip = Upcase($1)_MIN;') - else if (xx > (double)Upcase($1)_MAX || xx < Dmin($1)) DEBUG_RETURN_ERROR(NC_ERANGE) + else if (xx > (double)Upcase($1)_MAX || xx < Dmin($1)) { + ifdef(`ERANGE_FILL',`*ip = fillv;') + DEBUG_RETURN_ERROR(NC_ERANGE) + } else *ip = ($1)xx;') -dnl -dnl For PUT APIs and either $1 and $2 is float or double: -dnl -define(`PUTF_CheckBND', -`ifelse(`$2', `double', `if (*ip > Xmax($1) || *ip < DXmin($1)) DEBUG_RETURN_ERROR(NC_ERANGE)', - `$2', `float', `if (*ip > (double)Xmax($1) || *ip < FXmin($1)) DEBUG_RETURN_ERROR(NC_ERANGE)')') - -dnl -dnl For GET APIs and $1 and $2 are not float or double -dnl -define(`GETI_CheckBND', -``#'if IXmax($1) > Imax($2) - if (xx > Imax($2)'`ifelse(index(`$1',`u'), 0, , - index(`$2',`u'), 0, , - ` || xx < Imin($2)')'`) DEBUG_RETURN_ERROR(NC_ERANGE)' -`#'endif) - -dnl -dnl For PUT APIs and $1 and $2 are not float or double -dnl -define(`PUTI_CheckBND', -``#'if IXmax($1) < Imax($2) - if (*ip > IXmax($1)'`ifelse(index(`$1',`u'), 0, , - index(`$2',`u'), 0, , - ` || *ip < Xmin($1)')'`) DEBUG_RETURN_ERROR(NC_ERANGE)' -`#'endif) - /* * Primitive numeric conversion functions. */ @@ -585,7 +583,7 @@ dnl define(`NCX_GET1F',dnl `dnl static int -APIPrefix`x_get_'NC_TYPE($1)_$2(const void *xp, $2 *ip) +APIPrefix`x_get_'NC_TYPE($1)_$2(const void *xp, $2 *ip, $2 fillv) { ix_$1 xx; get_ix_$1(xp, &xx); @@ -608,8 +606,9 @@ dnl define(`NCX_GET1I',dnl `dnl static int -APIPrefix`x_get_'NC_TYPE($1)_$2(const void *xp, $2 *ip) +APIPrefix`x_get_'NC_TYPE($1)_$2(const void *xp, $2 *ip, $2 fillv) { + int err=NC_NOERR; ifelse(`$3', `1', ``#'if IXsizeof($1) == Isizeof($2) && IXmax($1) == Upcase($2)_MAX get_ix_$1(xp, (ix_$1 *)ip); @@ -617,16 +616,30 @@ ifelse(`$3', `1', ')dnl ix_$1 xx; get_ix_$1(xp, &xx); -GETI_CheckBND($1, $2) - ifelse(index(`$1',`u'), 0, , - index(`$2',`u'), 0, - `if (xx < 0) DEBUG_RETURN_ERROR(NC_ERANGE) /* because ip is unsigned */')dnl +`#'if IXmax($1) > Imax($2) + if (xx > Imax($2)'`ifelse(index(`$1',`u'), 0, , + index(`$2',`u'), 0, , + ` || xx < Imin($2)')'`) { +ifdef(`ERANGE_FILL',`dnl + *ip = fillv; + DEBUG_RETURN_ERROR(NC_ERANGE)',` + DEBUG_ASSIGN_ERROR(err, NC_ERANGE)') + }' +`#'endif + +`ifelse(index(`$1',`u'), 0, , index(`$2',`u'), 0,`dnl + if (xx < 0) { +ifdef(`ERANGE_FILL',`dnl + *ip = fillv; + DEBUG_RETURN_ERROR(NC_ERANGE)',` + DEBUG_ASSIGN_ERROR(err, NC_ERANGE)') /* because ip is unsigned */ + }')'dnl *ip = ($2) xx; -ifelse(`$3', `1', ``#'endif +`ifelse(`$3', `1', ``#'endif ')dnl - return NC_NOERR; + return err; } ')dnl @@ -637,13 +650,23 @@ dnl define(`NCX_PUT1F',dnl `dnl static int -APIPrefix`x_put_'NC_TYPE($1)_$2(void *xp, const $2 *ip) +APIPrefix`x_put_'NC_TYPE($1)_$2(void *xp, const $2 *ip, void *fillp) { - ix_$1 xx; - PUTF_CheckBND($1, $2) - xx = (ix_$1)*ip; - put_ix_$1(xp, &xx); - return NC_NOERR; + int err=NC_NOERR; + ix_$1 xx; + + ifelse(`$2', `double', `if (*ip > Xmax($1) || *ip < DXmin($1)) { + FillValue($1, &xx) + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } ifdef(`ERANGE_FILL',`else')', + `$2', `float', `if (*ip > (double)Xmax($1) || *ip < FXmin($1)) { + FillValue($1, &xx) + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } ifdef(`ERANGE_FILL',`else')') + xx = (ix_$1)*ip; + + put_ix_$1(xp, &xx); + return err; } ')dnl @@ -654,25 +677,36 @@ dnl define(`NCX_PUT1I',dnl `dnl static int -APIPrefix`x_put_'NC_TYPE($1)_$2(void *xp, const $2 *ip) +APIPrefix`x_put_'NC_TYPE($1)_$2(void *xp, const $2 *ip, void *fillp) { + int err=NC_NOERR; ifelse(`$3', `1', ``#'if IXsizeof($1) == Isizeof($2) && IXmax($1) == Upcase($2)_MAX put_ix_$1(xp, (const ix_$1 *)ip); `#'else ')dnl ix_$1 xx; -PUTI_CheckBND($1, $2) - ifelse(index(`$1',`u'), 0, - `ifelse(index(`$2',`u'), 0, , - `if (*ip < 0) DEBUG_RETURN_ERROR(NC_ERANGE) /* because xp is unsigned */')')dnl +`#'if IXmax($1) < Imax($2) + if (*ip > IXmax($1)'`ifelse(index(`$1',`u'), 0, , + index(`$2',`u'), 0, , + ` || *ip < Xmin($1)')'`) { + FillValue($1, &xx) + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } ifdef(`ERANGE_FILL',`else') +`#'endif +ifelse(index(`$1',`u'), 0, `ifelse(index(`$2',`u'), 0, ,`dnl + if (*ip < 0) { + FillValue($1, &xx) + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) /* because xp is unsigned */ + } ifdef(`ERANGE_FILL',`else') +')')dnl + xx = (ix_$1)*ip; - xx = (ix_$1)*ip; put_ix_$1(xp, &xx); ifelse(`$3', `1', ``#'endif ')dnl - return NC_NOERR; + return err; } ')dnl @@ -740,7 +774,7 @@ NCX_GET1F(short, float) NCX_GET1F(short, double) static int -APIPrefix`x_put_'NC_TYPE(short)_schar(void *xp, const schar *ip) +APIPrefix`x_put_'NC_TYPE(short)_schar(void *xp, const schar *ip, void *fillp) { uchar *cp = (uchar *) xp; if (*ip & 0x80) @@ -752,7 +786,7 @@ APIPrefix`x_put_'NC_TYPE(short)_schar(void *xp, const schar *ip) } static int -APIPrefix`x_put_'NC_TYPE(short)_uchar(void *xp, const uchar *ip) +APIPrefix`x_put_'NC_TYPE(short)_uchar(void *xp, const uchar *ip, void *fillp) { uchar *cp = (uchar *) xp; *cp++ = 0; @@ -828,22 +862,32 @@ NCX_GET1F(ushort, float) NCX_GET1F(ushort, double) static int -APIPrefix`x_put_'NC_TYPE(ushort)_schar(void *xp, const schar *ip) +APIPrefix`x_put_'NC_TYPE(ushort)_schar(void *xp, const schar *ip, void *fillp) { - uchar *cp; - if (*ip < 0) DEBUG_RETURN_ERROR(NC_ERANGE) - cp = (uchar *) xp; - if (*ip & 0x80) - *cp++ = 0xff; - else - *cp++ = 0; - *cp = (uchar)*ip; + int err=NC_NOERR; + uchar *cp; + if (*ip < 0) { +ifdef(`ERANGE_FILL', `dnl + FillValue(ushort, xp) +#ifndef WORDS_BIGENDIAN + swapn2b(xp, xp, 1); +#endif + DEBUG_RETURN_ERROR(NC_ERANGE)',`dnl + DEBUG_ASSIGN_ERROR(err, NC_ERANGE)') + } - return NC_NOERR; + cp = (uchar *) xp; + if (*ip & 0x80) + *cp++ = 0xff; + else + *cp++ = 0; + *cp = (uchar)*ip; + + return err; } static int -APIPrefix`x_put_'NC_TYPE(ushort)_uchar(void *xp, const uchar *ip) +APIPrefix`x_put_'NC_TYPE(ushort)_uchar(void *xp, const uchar *ip, void *fillp) { uchar *cp = (uchar *) xp; *cp++ = 0; @@ -924,7 +968,7 @@ NCX_GET1F(int, float) NCX_GET1F(int, double) static int -APIPrefix`x_put_'NC_TYPE(int)_schar(void *xp, const schar *ip) +APIPrefix`x_put_'NC_TYPE(int)_schar(void *xp, const schar *ip, void *fillp) { uchar *cp = (uchar *) xp; if (*ip & 0x80) @@ -944,7 +988,7 @@ APIPrefix`x_put_'NC_TYPE(int)_schar(void *xp, const schar *ip) } static int -APIPrefix`x_put_'NC_TYPE(int)_uchar(void *xp, const uchar *ip) +APIPrefix`x_put_'NC_TYPE(int)_uchar(void *xp, const uchar *ip, void *fillp) { uchar *cp = (uchar *) xp; *cp++ = 0x00; @@ -1024,22 +1068,29 @@ NCX_GET1F(uint, float) NCX_GET1F(uint, double) static int -APIPrefix`x_put_'NC_TYPE(uint)_schar(void *xp, const schar *ip) +APIPrefix`x_put_'NC_TYPE(uint)_schar(void *xp, const schar *ip, void *fillp) { - uchar *cp; - if (*ip < 0) DEBUG_RETURN_ERROR(NC_ERANGE) + uchar *cp; + if (*ip < 0) { + FillValue(uint, xp) +ifdef(`ERANGE_FILL', `dnl +#ifndef WORDS_BIGENDIAN + swapn4b(xp, xp, 1); +#endif') + DEBUG_RETURN_ERROR(NC_ERANGE) + } - cp = (uchar *) xp; - *cp++ = 0x00; - *cp++ = 0x00; - *cp++ = 0x00; - *cp = (uchar)*ip; + cp = (uchar *) xp; + *cp++ = 0x00; + *cp++ = 0x00; + *cp++ = 0x00; + *cp = (uchar)*ip; - return NC_NOERR; + return NC_NOERR; } static int -APIPrefix`x_put_'NC_TYPE(uint)_uchar(void *xp, const uchar *ip) +APIPrefix`x_put_'NC_TYPE(uint)_uchar(void *xp, const uchar *ip, void *fillp) { uchar *cp = (uchar *) xp; *cp++ = 0x00; @@ -1475,7 +1526,7 @@ put_ix_float(void *xp, const float *ip) #if X_SIZEOF_FLOAT != SIZEOF_FLOAT || defined(NO_IEEE_FLOAT) static int -APIPrefix`x_get_'NC_TYPE(float)_float(const void *xp, float *ip) +APIPrefix`x_get_'NC_TYPE(float)_float(const void *xp, float *ip, void *fillp) { /* TODO */ get_ix_float(xp, ip); @@ -1498,14 +1549,20 @@ NCX_GET1F(float, ulonglong) #if X_SIZEOF_FLOAT != SIZEOF_FLOAT || defined(NO_IEEE_FLOAT) static int -APIPrefix`x_put_'NC_TYPE(float)_float(void *xp, const float *ip) +APIPrefix`x_put_'NC_TYPE(float)_float(void *xp, const float *ip, void *fillp) { + int err=NC_NOERR; + float *_ip=ip; #ifdef NO_IEEE_FLOAT - if (*ip > X_FLOAT_MAX || *ip < X_FLOAT_MIN) - DEBUG_RETURN_ERROR(NC_ERANGE) + ifdef(`ERANGE_FILL',`float tmp;') + if (*ip > X_FLOAT_MAX || *ip < X_FLOAT_MIN) { + FillValue(float, &tmp) + ifdef(`ERANGE_FILL',`_ip = &tmp;') + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } #endif - put_ix_float(xp, ip); - return NC_NOERR; + put_ix_float(xp, _ip); + return err; } #endif @@ -1811,27 +1868,25 @@ NCX_GET1F(double, uint) NCX_GET1F(double, ulonglong) static int -APIPrefix`x_get_'NC_TYPE(double)_float(const void *xp, float *ip) +APIPrefix`x_get_'NC_TYPE(double)_float(const void *xp, float *ip, float fillv) { - double xx; - get_ix_double(xp, &xx); - if (xx > FLT_MAX) - { - *ip = FLT_MAX; - DEBUG_RETURN_ERROR(NC_ERANGE) - } - if (xx < (-FLT_MAX)) - { - *ip = (-FLT_MAX); - DEBUG_RETURN_ERROR(NC_ERANGE) - } - *ip = (float) xx; - return NC_NOERR; + double xx; + get_ix_double(xp, &xx); + if (xx > FLT_MAX) { + ifdef(`ERANGE_FILL', `*ip = fillv;', `*ip = FLT_MAX;') + DEBUG_RETURN_ERROR(NC_ERANGE) + } + if (xx < (-FLT_MAX)) { + ifdef(`ERANGE_FILL', `*ip = fillv;', `*ip = (-FLT_MAX);') + DEBUG_RETURN_ERROR(NC_ERANGE) + } + *ip = (float) xx; + return NC_NOERR; } #if X_SIZEOF_DOUBLE != SIZEOF_DOUBLE || defined(NO_IEEE_FLOAT) static int -APIPrefix`x_get_'NC_TYPE(double)_double(const void *xp, double *ip) +APIPrefix`x_get_'NC_TYPE(double)_double(const void *xp, double *ip, void *fillp) { /* TODO */ get_ix_double(xp, ip); @@ -1850,27 +1905,38 @@ NCX_PUT1F(double, longlong) NCX_PUT1F(double, ulonglong) static int -APIPrefix`x_put_'NC_TYPE(double)_float(void *xp, const float *ip) +APIPrefix`x_put_'NC_TYPE(double)_float(void *xp, const float *ip, void *fillp) { -#if 0 /* TODO: figure this out (if condition below will never be true)*/ - if ((double)(*ip) > X_DOUBLE_MAX || (double)(*ip) < X_DOUBLE_MIN) - DEBUG_RETURN_ERROR(NC_ERANGE) + int err=NC_NOERR; + double xx; +#if 1 /* TODO: figure this out (if condition below will never be true)*/ + if ((double)(*ip) > X_DOUBLE_MAX || (double)(*ip) < X_DOUBLE_MIN) { + FillValue(double, &xx) + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } ifdef(`ERANGE_FILL',`else') #endif - double xx = (double) *ip; - put_ix_double(xp, &xx); - return NC_NOERR; + xx = (double) *ip; + + put_ix_double(xp, &xx); + return err; } #if X_SIZEOF_DOUBLE != SIZEOF_DOUBLE || defined(NO_IEEE_FLOAT) static int -APIPrefix`x_put_'NC_TYPE(double)_double(void *xp, const double *ip) +APIPrefix`x_put_'NC_TYPE(double)_double(void *xp, const double *ip, void *fillp) { + int err=NC_NOERR; + double *_ip = ip; #ifdef NO_IEEE_FLOAT - if (*ip > X_DOUBLE_MAX || *ip < X_DOUBLE_MIN) - DEBUG_RETURN_ERROR(NC_ERANGE) + ifdef(`ERANGE_FILL',`double tmp;') + if (*ip > X_DOUBLE_MAX || *ip < X_DOUBLE_MIN) { + FillValue(double, tmp) + ifdef(`ERANGE_FILL',`_ip = &tmp;') + DEBUG_ASSIGN_ERROR(err, NC_ERANGE) + } #endif - put_ix_double(xp, ip); - return NC_NOERR; + put_ix_double(xp, _ip); + return err; } #endif @@ -2319,7 +2385,7 @@ dnl define(`NCX_GETN_BYTE',dnl `dnl int -APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) +APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp, $2 fillv) { int status = NC_NOERR; $1 *xp = ($1 *)(*xpp); @@ -2328,8 +2394,9 @@ APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) ifelse(index(`$1',`u'), 0, , index(`$2',`u'), 0, ` if (*xp < 0) { + ifdef(`ERANGE_FILL',`*tp = fillv;') DEBUG_ASSIGN_ERROR(status, NC_ERANGE) /* because tp is unsigned */ - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) }')dnl *tp++ = ($2) Cast_Signed2Unsigned($2,$1) (*xp++); /* type cast from $1 to $2 */ @@ -2346,7 +2413,7 @@ dnl define(`NCX_PAD_GETN_BYTE',dnl `dnl int -APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) +APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp, $2 fillv) { int status = NC_NOERR; IntType rndup = nelems % X_ALIGN; @@ -2359,8 +2426,9 @@ APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) ifelse(index(`$1',`u'), 0, , index(`$2',`u'), 0, ` if (*xp < 0) { + ifdef(`ERANGE_FILL', `*tp = fillv;') DEBUG_ASSIGN_ERROR(status, NC_ERANGE) /* because tp is unsigned */ - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) }')dnl *tp++ = ($2) Cast_Signed2Unsigned($2,$1) (*xp++); /* type cast from $1 to $2 */ @@ -2377,7 +2445,7 @@ dnl define(`NCX_GETN',dnl `dnl int -APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) +APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp, $2 fillv) { `#'if defined(_SX) && _SX != 0 && Xsizeof($1) == Isizeof($1) @@ -2431,7 +2499,7 @@ APIPrefix`x_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) for( ; nelems != 0; nelems--, xp += Xsizeof($1), tp++) { - const int lstatus = APIPrefix`x_get_'NC_TYPE($1)_$2(xp, tp); + const int lstatus = APIPrefix`x_get_'NC_TYPE($1)_$2(xp, tp, fillv); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -2448,7 +2516,7 @@ dnl define(`NCX_PAD_GETN_SHORT',dnl `dnl int -APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) +APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp, $2 fillv) { const IntType rndup = nelems % X_SIZEOF_SHORT; @@ -2457,7 +2525,7 @@ APIPrefix`x_pad_getn_'NC_TYPE($1)_$2(const void **xpp, IntType nelems, $2 *tp) for( ; nelems != 0; nelems--, xp += Xsizeof($1), tp++) { - const int lstatus = APIPrefix`x_get_'NC_TYPE($1)_$2(xp, tp); + const int lstatus = APIPrefix`x_get_'NC_TYPE($1)_$2(xp, tp, fillv); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -2509,15 +2577,16 @@ dnl define(`NCX_PUTN_BYTE',dnl `dnl int -APIPrefix`x_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) +APIPrefix`x_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp, void *fillp) { int status = NC_NOERR; $1 *xp = ($1 *) *xpp; while (nelems-- != 0) { if (*tp > ($2)Xmax($1) ifelse(index(`$2',`u'), 0, , index(`$1',`u'), 0, `|| *tp < 0',`|| *tp < Xmin(schar)')) { + FillValue($1, xp) DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *xp++ = ($1) Cast_Signed2Unsigned($1,$2) *tp++; /* type cast from $2 to $1 */ } @@ -2533,7 +2602,7 @@ dnl define(`NCX_PAD_PUTN_BYTE',dnl `dnl int -APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) +APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp, void *fillp) { int status = NC_NOERR; IntType rndup = nelems % X_ALIGN; @@ -2543,8 +2612,9 @@ APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) while (nelems-- != 0) { if (*tp > ($2)Xmax($1) ifelse(index(`$2',`u'), 0, , index(`$1',`u'), 0, `|| *tp < 0',`|| *tp < Xmin(schar)')) { + FillValue($1, xp) DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *xp++ = ($1) Cast_Signed2Unsigned($1,$2) *tp++; /* type cast from $2 to $1 */ } @@ -2566,7 +2636,7 @@ dnl define(`NCX_PUTN',dnl `dnl int -APIPrefix`x_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) +APIPrefix`x_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp, void *fillp) { `#'if defined(_SX) && _SX != 0 && Xsizeof($1) == Isizeof($1) @@ -2638,7 +2708,7 @@ ifelse( $1$2, intfloat,dnl for( ; nelems != 0; nelems--, xp += Xsizeof($1), tp++) { - int lstatus = APIPrefix`x_put_'NC_TYPE($1)_$2(xp, tp); + int lstatus = APIPrefix`x_put_'NC_TYPE($1)_$2(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -2655,7 +2725,7 @@ dnl define(`NCX_PAD_PUTN_SHORT',dnl `dnl int -APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) +APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp, void *fillp) { const IntType rndup = nelems % X_SIZEOF_SHORT; @@ -2664,7 +2734,7 @@ APIPrefix`x_pad_putn_'NC_TYPE($1)_$2(void **xpp, IntType nelems, const $2 *tp) for( ; nelems != 0; nelems--, xp += Xsizeof($1), tp++) { - int lstatus = APIPrefix`x_put_'NC_TYPE($1)_$2(xp, tp); + int lstatus = APIPrefix`x_put_'NC_TYPE($1)_$2(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -2690,7 +2760,7 @@ dnl dnl dnl dnl NCX_GETN_BYTE(schar, schar) int -APIPrefix`x_getn_'NC_TYPE(schar)_schar(const void **xpp, IntType nelems, schar *tp) +APIPrefix`x_getn_'NC_TYPE(schar)_schar(const void **xpp, IntType nelems, schar *tp, schar fillv) { NCX_GETN_Byte_Body } @@ -2707,7 +2777,7 @@ NCX_GETN_BYTE(schar, ulonglong) dnl NCX_PAD_GETN_BYTE(schar, schar) int -APIPrefix`x_pad_getn_'NC_TYPE(schar)_schar(const void **xpp, IntType nelems, schar *tp) +APIPrefix`x_pad_getn_'NC_TYPE(schar)_schar(const void **xpp, IntType nelems, schar *tp, schar fillv) { NCX_PAD_GETN_Byte_Body } @@ -2724,7 +2794,7 @@ NCX_PAD_GETN_BYTE(schar, ulonglong) dnl NCX_PUTN_BYTE(schar, schar) int -APIPrefix`x_putn_'NC_TYPE(schar)_schar(void **xpp, IntType nelems, const schar *tp) +APIPrefix`x_putn_'NC_TYPE(schar)_schar(void **xpp, IntType nelems, const schar *tp, void *fillp) { NCX_PUTN_Byte_Body } @@ -2741,7 +2811,7 @@ NCX_PUTN_BYTE(schar, ulonglong) dnl NCX_PAD_PUTN_BYTE(schar, schar) int -APIPrefix`x_pad_putn_'NC_TYPE(schar)_schar(void **xpp, IntType nelems, const schar *tp) +APIPrefix`x_pad_putn_'NC_TYPE(schar)_schar(void **xpp, IntType nelems, const schar *tp, void *fillp) { NCX_PAD_PUTN_Byte_Body } @@ -2761,15 +2831,16 @@ NCX_PAD_PUTN_BYTE(schar, ulonglong) dnl dnl NCX_GETN_BYTE(uchar, schar) int -APIPrefix`x_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, schar *tp) +APIPrefix`x_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, schar *tp, schar fillv) { int status = NC_NOERR; uchar *xp = (uchar *)(*xpp); while (nelems-- != 0) { if (*xp > SCHAR_MAX) { + *tp = fillv; DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *tp++ = (schar) *xp++; /* type cast from uchar to schar */ } @@ -2779,7 +2850,7 @@ APIPrefix`x_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, schar * } dnl NCX_GETN_BYTE(uchar, uchar) int -APIPrefix`x_getn_'NC_TYPE(uchar)_uchar(const void **xpp, IntType nelems, uchar *tp) +APIPrefix`x_getn_'NC_TYPE(uchar)_uchar(const void **xpp, IntType nelems, uchar *tp, uchar fillv) { NCX_GETN_Byte_Body } @@ -2795,7 +2866,7 @@ NCX_GETN_BYTE(uchar, ulonglong) dnl NCX_PAD_GETN_BYTE(uchar, schar) int -APIPrefix`x_pad_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, schar *tp) +APIPrefix`x_pad_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, schar *tp, schar fillv) { int status = NC_NOERR; IntType rndup = nelems % X_ALIGN; @@ -2805,8 +2876,9 @@ APIPrefix`x_pad_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, sch while (nelems-- != 0) { if (*xp > SCHAR_MAX) { + *tp = fillv; DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *tp++ = (schar) *xp++; /* type cast from uchar to schar */ } @@ -2816,7 +2888,7 @@ APIPrefix`x_pad_getn_'NC_TYPE(uchar)_schar(const void **xpp, IntType nelems, sch } dnl NCX_PAD_GETN_BYTE(uchar, uchar) int -APIPrefix`x_pad_getn_'NC_TYPE(uchar)_uchar(const void **xpp, IntType nelems, uchar *tp) +APIPrefix`x_pad_getn_'NC_TYPE(uchar)_uchar(const void **xpp, IntType nelems, uchar *tp, uchar fillv) { NCX_PAD_GETN_Byte_Body } @@ -2832,15 +2904,16 @@ NCX_PAD_GETN_BYTE(uchar, ulonglong) dnl NCX_PUTN_BYTE(uchar, schar) int -APIPrefix`x_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const schar *tp) +APIPrefix`x_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const schar *tp, void *fillp) { int status = NC_NOERR; uchar *xp = (uchar *) *xpp; while (nelems-- != 0) { if (*tp < 0) { + FillValue(uchar, xp) DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *xp++ = (uchar) (signed) *tp++; /* type cast from schar to uchar */ } @@ -2850,7 +2923,7 @@ APIPrefix`x_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const schar * } dnl NCX_PUTN_BYTE(uchar, uchar) int -APIPrefix`x_putn_'NC_TYPE(uchar)_uchar(void **xpp, IntType nelems, const uchar *tp) +APIPrefix`x_putn_'NC_TYPE(uchar)_uchar(void **xpp, IntType nelems, const uchar *tp, void *fillp) { NCX_PUTN_Byte_Body } @@ -2866,7 +2939,7 @@ NCX_PUTN_BYTE(uchar, ulonglong) dnl NCX_PAD_PUTN_BYTE(uchar, schar) int -APIPrefix`x_pad_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const schar *tp) +APIPrefix`x_pad_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const schar *tp, void *fillp) { int status = NC_NOERR; IntType rndup = nelems % X_ALIGN; @@ -2876,8 +2949,9 @@ APIPrefix`x_pad_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const sch while (nelems-- != 0) { if (*tp < 0) { + FillValue(uchar, xp) DEBUG_ASSIGN_ERROR(status, NC_ERANGE) - SKIP_ASSIGN(xp, tp) + SKIP_LOOP(xp, tp) } *xp++ = (uchar) (signed) *tp++; /* type cast from schar to uchar */ } @@ -2892,7 +2966,7 @@ APIPrefix`x_pad_putn_'NC_TYPE(uchar)_schar(void **xpp, IntType nelems, const sch } dnl NCX_PAD_PUTN_UCHAR(uchar, uchar) int -APIPrefix`x_pad_putn_'NC_TYPE(uchar)_uchar(void **xpp, IntType nelems, const uchar *tp) +APIPrefix`x_pad_putn_'NC_TYPE(uchar)_uchar(void **xpp, IntType nelems, const uchar *tp, void *fillp) { NCX_PAD_PUTN_Byte_Body } @@ -2911,7 +2985,7 @@ NCX_PAD_PUTN_BYTE(uchar, ulonglong) #if X_SIZEOF_SHORT == SIZEOF_SHORT /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(short)_short(const void **xpp, IntType nelems, short *tp) +APIPrefix`x_getn_'NC_TYPE(short)_short(const void **xpp, IntType nelems, short *tp, short fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_SHORT); @@ -2950,7 +3024,7 @@ NCX_PAD_GETN_SHORT(short, ushort) #if X_SIZEOF_SHORT == SIZEOF_SHORT /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(short)_short(void **xpp, IntType nelems, const short *tp) +APIPrefix`x_putn_'NC_TYPE(short)_short(void **xpp, IntType nelems, const short *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_SHORT); @@ -2992,7 +3066,7 @@ NCX_PAD_PUTN_SHORT(short, ushort) #if X_SIZEOF_USHORT == SIZEOF_USHORT /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(ushort)_ushort(const void **xpp, IntType nelems, unsigned short *tp) +APIPrefix`x_getn_'NC_TYPE(ushort)_ushort(const void **xpp, IntType nelems, unsigned short *tp, unsigned short fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_UNSIGNED_SHORT); @@ -3031,7 +3105,7 @@ NCX_PAD_GETN_SHORT(ushort, ulonglong) #if X_SIZEOF_USHORT == SIZEOF_USHORT /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(ushort)_ushort(void **xpp, IntType nelems, const unsigned short *tp) +APIPrefix`x_putn_'NC_TYPE(ushort)_ushort(void **xpp, IntType nelems, const unsigned short *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_USHORT); @@ -3073,7 +3147,7 @@ NCX_PAD_PUTN_SHORT(ushort, ushort) #if X_SIZEOF_INT == SIZEOF_INT /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(int)_int(const void **xpp, IntType nelems, int *tp) +APIPrefix`x_getn_'NC_TYPE(int)_int(const void **xpp, IntType nelems, int *tp, int fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_INT); @@ -3100,7 +3174,7 @@ NCX_GETN(int, ulonglong) #if X_SIZEOF_INT == SIZEOF_INT /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(int)_int(void **xpp, IntType nelems, const int *tp) +APIPrefix`x_putn_'NC_TYPE(int)_int(void **xpp, IntType nelems, const int *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_INT); @@ -3129,7 +3203,7 @@ NCX_PUTN(int, ulonglong) #if X_SIZEOF_UINT == SIZEOF_UINT /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(uint)_uint(const void **xpp, IntType nelems, unsigned int *tp) +APIPrefix`x_getn_'NC_TYPE(uint)_uint(const void **xpp, IntType nelems, unsigned int *tp, unsigned int fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_UINT); @@ -3156,7 +3230,7 @@ NCX_GETN(uint, ulonglong) #if X_SIZEOF_UINT == SIZEOF_UINT /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(uint)_uint(void **xpp, IntType nelems, const unsigned int *tp) +APIPrefix`x_putn_'NC_TYPE(uint)_uint(void **xpp, IntType nelems, const unsigned int *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_UINT); @@ -3186,7 +3260,7 @@ NCX_PUTN(uint, ulonglong) #if X_SIZEOF_FLOAT == SIZEOF_FLOAT && !defined(NO_IEEE_FLOAT) /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nelems, float *tp) +APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nelems, float *tp, float fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_FLOAT); @@ -3198,7 +3272,7 @@ APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nelems, float * } #elif defined(vax) && vax != 0 int -APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nfloats, float *ip) +APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nfloats, float *ip, float fillv) { float *const end = ip + nfloats; @@ -3213,14 +3287,14 @@ GET_VAX_DFLOAT_Body(`(*xpp)') } #else int -APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nelems, float *tp) +APIPrefix`x_getn_'NC_TYPE(float)_float(const void **xpp, IntType nelems, float *tp, float fillv) { const char *xp = *xpp; int status = NC_NOERR; for( ; nelems != 0; nelems--, xp += X_SIZEOF_FLOAT, tp++) { - const int lstatus = APIPrefix`x_get_'NC_TYPE(float)_float(xp, tp); + const int lstatus = APIPrefix`x_get_'NC_TYPE(float)_float(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -3242,7 +3316,7 @@ NCX_GETN(float, uint) NCX_GETN(float, ulonglong) int -APIPrefix`x_putn_'NC_TYPE(float)_float(void **xpp, IntType nelems, const float *tp) +APIPrefix`x_putn_'NC_TYPE(float)_float(void **xpp, IntType nelems, const float *tp, void *fillp) #if X_SIZEOF_FLOAT == SIZEOF_FLOAT && !defined(NO_IEEE_FLOAT) /* optimized version */ { @@ -3271,7 +3345,7 @@ APIPrefix`x_putn_'NC_TYPE(float)_float(void **xpp, IntType nelems, const float * int status = NC_NOERR; for( ; nelems != 0; nelems--, xp += X_SIZEOF_FLOAT, tp++) { - int lstatus = APIPrefix`x_put_'NC_TYPE(float)_float(xp, tp); + int lstatus = APIPrefix`x_put_'NC_TYPE(float)_float(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -3296,7 +3370,7 @@ NCX_PUTN(float, ulonglong) #if X_SIZEOF_DOUBLE == SIZEOF_DOUBLE && !defined(NO_IEEE_FLOAT) /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType nelems, double *tp) +APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType nelems, double *tp, double fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_DOUBLE); @@ -3308,7 +3382,7 @@ APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType nelems, doubl } #elif defined(vax) && vax != 0 int -APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType ndoubles, double *ip) +APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType ndoubles, double *ip, double fillv) { double *const end = ip + ndoubles; @@ -3323,14 +3397,14 @@ GET_VAX_DDOUBLE_Body(`(*xpp)') /* vax */ #else int -APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType nelems, double *tp) +APIPrefix`x_getn_'NC_TYPE(double)_double(const void **xpp, IntType nelems, double *tp, double fillv) { const char *xp = *xpp; int status = NC_NOERR; for( ; nelems != 0; nelems--, xp += X_SIZEOF_DOUBLE, tp++) { - const int lstatus = APIPrefix`x_get_'NC_TYPE(double)_double(xp, tp); + const int lstatus = APIPrefix`x_get_'NC_TYPE(double)_double(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -3353,7 +3427,7 @@ NCX_GETN(double, ulonglong) #if X_SIZEOF_DOUBLE == SIZEOF_DOUBLE && !defined(NO_IEEE_FLOAT) /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType nelems, const double *tp) +APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType nelems, const double *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_DOUBLE); @@ -3365,7 +3439,7 @@ APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType nelems, const doubl } #elif defined(vax) && vax != 0 int -APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType ndoubles, const double *ip) +APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType ndoubles, const double *ip, void *fillp) { const double *const end = ip + ndoubles; @@ -3380,14 +3454,14 @@ PUT_VAX_DDOUBLE_Body(`(*xpp)') /* vax */ #else int -APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType nelems, const double *tp) +APIPrefix`x_putn_'NC_TYPE(double)_double(void **xpp, IntType nelems, const double *tp, void *fillp) { char *xp = *xpp; int status = NC_NOERR; for( ; nelems != 0; nelems--, xp += X_SIZEOF_DOUBLE, tp++) { - int lstatus = APIPrefix`x_put_'NC_TYPE(double)_double(xp, tp); + int lstatus = APIPrefix`x_put_'NC_TYPE(double)_double(xp, tp, fillp); if (status == NC_NOERR) /* report the first encountered error */ status = lstatus; } @@ -3413,7 +3487,7 @@ NCX_PUTN(double, ulonglong) #if X_SIZEOF_INT64 == SIZEOF_LONGLONG /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(int64)_longlong(const void **xpp, IntType nelems, long long *tp) +APIPrefix`x_getn_'NC_TYPE(int64)_longlong(const void **xpp, IntType nelems, long long *tp, long long fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_LONG_LONG); @@ -3440,7 +3514,7 @@ NCX_GETN(int64, ulonglong) #if X_SIZEOF_INT64 == SIZEOF_LONGLONG /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(int64)_longlong(void **xpp, IntType nelems, const long long *tp) +APIPrefix`x_putn_'NC_TYPE(int64)_longlong(void **xpp, IntType nelems, const long long *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_INT64); @@ -3469,7 +3543,7 @@ NCX_PUTN(int64, ulonglong) #if X_SIZEOF_UINT64 == SIZEOF_ULONGLONG /* optimized version */ int -APIPrefix`x_getn_'NC_TYPE(uint64)_ulonglong(const void **xpp, IntType nelems, unsigned long long *tp) +APIPrefix`x_getn_'NC_TYPE(uint64)_ulonglong(const void **xpp, IntType nelems, unsigned long long *tp, unsigned long long fillv) { #ifdef WORDS_BIGENDIAN (void) memcpy(tp, *xpp, (size_t)nelems * SIZEOF_UNSIGNED_LONG_LONG); @@ -3496,7 +3570,7 @@ NCX_GETN(uint64, uint) #if X_SIZEOF_UINT64 == SIZEOF_ULONGLONG /* optimized version */ int -APIPrefix`x_putn_'NC_TYPE(uint64)_ulonglong(void **xpp, IntType nelems, const unsigned long long *tp) +APIPrefix`x_putn_'NC_TYPE(uint64)_ulonglong(void **xpp, IntType nelems, const unsigned long long *tp, void *fillp) { #ifdef WORDS_BIGENDIAN (void) memcpy(*xpp, tp, (size_t)nelems * X_SIZEOF_UINT64); diff --git a/libsrc/putget.m4 b/libsrc/putget.m4 index 3d69b7ac7..8155a8419 100644 --- a/libsrc/putget.m4 +++ b/libsrc/putget.m4 @@ -101,7 +101,7 @@ NC_fill_$2( *vp++ = $4; } } - return ncx_putn_$2_$1(xpp, nelems, fillp); + return ncx_putn_$2_$1(xpp, nelems, fillp ifelse(`$1',`char',,`,NULL')); } ')dnl @@ -680,12 +680,16 @@ putNCvx_$1_$2(NC3_INFO* ncp, const NC_var *varp, size_t remaining = varp->xsz * nelems; int status = NC_NOERR; void *xp; + void *fillp; if(nelems == 0) return NC_NOERR; assert(value != NULL); + fillp = malloc(varp->xsz); + status = NC3_inq_var_fill(varp, fillp); + for(;;) { size_t extent = MIN(remaining, ncp->chunk); @@ -696,7 +700,7 @@ putNCvx_$1_$2(NC3_INFO* ncp, const NC_var *varp, if(lstatus != NC_NOERR) return lstatus; - lstatus = ncx_putn_$1_$2(&xp, nput, value); + lstatus = ncx_putn_$1_$2(&xp, nput, value ifelse(`$1',`char',,`,fillp')); if(lstatus != NC_NOERR && status == NC_NOERR) { /* not fatal to the loop */ @@ -713,6 +717,7 @@ putNCvx_$1_$2(NC3_INFO* ncp, const NC_var *varp, value += nput; } + free(fillp); return status; } @@ -843,6 +848,19 @@ getNCvx_$1_$2(const NC3_INFO* ncp, const NC_var *varp, size_t remaining = varp->xsz * nelems; int status = NC_NOERR; const void *xp; + ifelse( + `$2', `text', `$2 fillv=NC_FILL_CHAR;', + `$2', `schar', `$2 fillv=NC_FILL_BYTE;', + `$2', `uchar', `$2 fillv=NC_FILL_UBYTE;', + `$2', `short', `$2 fillv=NC_FILL_SHORT;', + `$2', `ushort', `$2 fillv=NC_FILL_USHORT;', + `$2', `int', `$2 fillv=NC_FILL_INT;', + `$2', `long', `$2 fillv=NC_FILL_INT;', + `$2', `uint', `$2 fillv=NC_FILL_UINT;', + `$2', `float', `$2 fillv=NC_FILL_FLOAT;', + `$2', `double', `$2 fillv=NC_FILL_DOUBLE;', + `$2', `longlong', `$2 fillv=NC_FILL_INT64;', + `$2', `ulonglong', `$2 fillv=NC_FILL_UINT64;') if(nelems == 0) return NC_NOERR; @@ -859,7 +877,7 @@ getNCvx_$1_$2(const NC3_INFO* ncp, const NC_var *varp, if(lstatus != NC_NOERR) return lstatus; - lstatus = ncx_getn_$1_$2(&xp, nget, value); + lstatus = ncx_getn_$1_$2(&xp, nget, value ifelse(`$1',`char',,`,fillv')); if(lstatus != NC_NOERR && status == NC_NOERR) status = lstatus; diff --git a/libsrc/v1hpg.c b/libsrc/v1hpg.c index b8fda9247..08ca35b4c 100644 --- a/libsrc/v1hpg.c +++ b/libsrc/v1hpg.c @@ -890,7 +890,7 @@ v1h_put_NC_var(v1hs *psp, const NC_var *varp) if(status != NC_NOERR) return status; status = ncx_putn_longlong_int(&psp->pos, - varp->ndims, varp->dimids); + varp->ndims, varp->dimids, NULL); if(status != NC_NOERR) return status; } @@ -899,7 +899,7 @@ v1h_put_NC_var(v1hs *psp, const NC_var *varp) if(status != NC_NOERR) return status; status = ncx_putn_int_int(&psp->pos, - varp->ndims, varp->dimids); + varp->ndims, varp->dimids, NULL); if(status != NC_NOERR) return status; } @@ -956,7 +956,7 @@ v1h_get_NC_var(v1hs *gsp, NC_var **varpp) if(status != NC_NOERR) goto unwind_alloc; status = ncx_getn_longlong_int((const void **)(&gsp->pos), - ndims, varp->dimids); + ndims, varp->dimids, 0); if(status != NC_NOERR) goto unwind_alloc; } @@ -965,7 +965,7 @@ v1h_get_NC_var(v1hs *gsp, NC_var **varpp) if(status != NC_NOERR) goto unwind_alloc; status = ncx_getn_int_int((const void **)(&gsp->pos), - ndims, varp->dimids); + ndims, varp->dimids, 0); if(status != NC_NOERR) goto unwind_alloc; } @@ -1296,11 +1296,11 @@ ncx_put_NC(const NC3_INFO* ncp, void **xpp, off_t offset, size_t extent) } if (ps.version == 5) - status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic5), ncmagic5); + status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic5), ncmagic5, NULL); else if (ps.version == 2) - status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic), ncmagic); + status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic), ncmagic, NULL); else - status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic1), ncmagic1); + status = ncx_putn_schar_schar(&ps.pos, sizeof(ncmagic1), ncmagic1, NULL); if(status != NC_NOERR) goto release; @@ -1406,7 +1406,7 @@ nc_get_NC(NC3_INFO* ncp) (void) memset(magic, 0, sizeof(magic)); status = ncx_getn_schar_schar( - (const void **)(&gs.pos), sizeof(magic), magic); + (const void **)(&gs.pos), sizeof(magic), magic, 0); if(status != NC_NOERR) goto unwind_get;