SDIFresult SDIF_Write2(const void *block, size_t n, FILE *f) { #ifdef LITTLE_ENDIAN SDIFresult r; const char *q = block; int32_t i, m = 2*n; if ((n << 1) > BUFSIZE) { /* Too big for buffer */ int32_t num = BUFSIZE >> 1; if ((r = SDIF_Write2(block, num, f))!=ESDIF_SUCCESS) return r; return SDIF_Write2(((char *) block) + num, n-num, f); }
SDIFresult SDIFmem_WriteMatrix(FILE *sdif_handle, SDIFmem_Matrix m) { SDIFresult r; sdif_int32 sz, numElements; int paddingNeeded; if ((r = SDIF_WriteMatrixHeader(&(m->header), sdif_handle))!=ESDIF_SUCCESS) { return r; } sz = SDIF_GetMatrixDataTypeSize(m->header.matrixDataType); numElements = (m->header.rowCount * m->header.columnCount); switch (sz) { case 1: r = SDIF_Write1(m->data, numElements, sdif_handle); break; case 2: r = SDIF_Write2(m->data, numElements, sdif_handle); break; case 4: r = SDIF_Write4(m->data, numElements, sdif_handle); break; case 8: r = SDIF_Write8(m->data, numElements, sdif_handle); break; default: return ESDIF_BAD_MATRIX_DATA_TYPE; } if (r !=ESDIF_SUCCESS) return r; paddingNeeded = SDIF_PaddingRequired(&(m->header)); if (paddingNeeded) { char pad[8] = "\0\0\0\0\0\0\0\0"; if ((r = SDIF_Write1(pad, paddingNeeded, sdif_handle))!=ESDIF_SUCCESS) return r; } return ESDIF_SUCCESS; }