Changeset 1762
- Timestamp:
- 16/11/11 18:42:27 (6 months ago)
- File:
-
- 1 edited
-
trunk/src/napi5.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/napi5.c
r1756 r1762 897 897 pNexusFile5 pFile; 898 898 herr_t iRet; 899 int64_t myStart[H5S_MAX_RANK]; 900 int64_t mySize[H5S_MAX_RANK]; 901 hsize_t thedims[H5S_MAX_RANK],maxdims[H5S_MAX_RANK]; 902 int i, rank, unlimiteddim = 0; 899 903 900 904 char pError[512] = ""; 901 905 902 906 pFile = NXI5assert (fid); 903 904 /* actually write */ 905 iRet = H5Dwrite (pFile->iCurrentD, pFile->iCurrentT, H5S_ALL, H5S_ALL, 907 rank = H5Sget_simple_extent_ndims(pFile->iCurrentS); 908 if (rank < 0) 909 { 910 NXReportError("ERROR: Cannot determine dataset rank"); 911 return NX_ERROR; 912 } 913 iRet = H5Sget_simple_extent_dims(pFile->iCurrentS, thedims, maxdims); 914 if (iRet < 0) 915 { 916 NXReportError("ERROR: Cannot determine dataset dimensions"); 917 return NX_ERROR; 918 } 919 for(i=0; i<rank; ++i) 920 { 921 myStart[i] = 0; 922 mySize[i] = thedims[i]; 923 if (maxdims[i] == H5S_UNLIMITED) 924 { 925 unlimiteddim = 1; 926 myStart[i] = thedims[i] + 1; 927 mySize[i] = 1; 928 } 929 } 930 /* If we are using putdata on an unlimied dimesnion dataset, assume we want to append one single new slab */ 931 if ( unlimiteddim ) 932 { 933 return NX5putslab64(fid, data, myStart, mySize); 934 } 935 else 936 { 937 iRet = H5Dwrite (pFile->iCurrentD, pFile->iCurrentT, H5S_ALL, H5S_ALL, 906 938 H5P_DEFAULT, data); 907 if (iRet < 0) { 908 snprintf (pError,511, "ERROR: failure to write data"); 909 NXReportError( pError); 910 return NX_ERROR; 939 if (iRet < 0) { 940 snprintf (pError,sizeof(pError)-1, "ERROR: failure to write data"); 941 NXReportError( pError); 942 return NX_ERROR; 943 } 911 944 } 912 945 return NX_OK; … … 991 1024 { 992 1025 pNexusFile5 pFile; 993 int iRet, i; 994 int rank; 1026 int iRet, rank, i; 995 1027 hsize_t myStart[H5S_MAX_RANK]; 996 1028 hsize_t mySize[H5S_MAX_RANK]; … … 1006 1038 } 1007 1039 rank = H5Sget_simple_extent_ndims(pFile->iCurrentS); 1040 if (rank < 0) { 1041 NXReportError( "ERROR: cannot get rank"); 1042 return NX_ERROR; 1043 } 1008 1044 iRet = H5Sget_simple_extent_dims(pFile->iCurrentS, thedims, maxdims); 1045 if (iRet < 0) { 1046 NXReportError( "ERROR: cannot get dimensions"); 1047 return NX_ERROR; 1048 } 1049 1009 1050 for(i = 0; i < rank; i++) 1010 1051 { 1011 1052 myStart[i] = iStart[i]; 1012 1053 mySize[i] = iSize[i]; 1013 size[i] = iSize[i];1054 size[i] = iStart[i] + iSize[i]; 1014 1055 if (maxdims[i] == H5S_UNLIMITED) { 1015 1056 unlimiteddim = 1; 1016 size[i] = iStart[i] + iSize[i];1017 1057 } 1018 1058 } … … 1057 1097 NXReportError( "ERROR: writing slab failed"); 1058 1098 } 1059 iRet = H5Sclose(filespace); 1099 /* update with new size */ 1100 iRet = H5Sclose(pFile->iCurrentS); 1101 pFile->iCurrentS = filespace; 1060 1102 } else { 1061 1103 /* define slab */
Note: See TracChangeset
for help on using the changeset viewer.
