Skip to content
Snippets Groups Projects
Commit b0645a11 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel: Committed by Sergey Kosukhin
Browse files

Check that variables can be processed by YAXT.

parent 75cfd660
No related branches found
No related tags found
2 merge requests!34Version 2.2.0,!13Consolidation with CDI-PIO (develop)
......@@ -3,6 +3,7 @@
#endif
#include <ctype.h>
#include <errno.h>
#include <yaxt.h>
......@@ -77,9 +78,31 @@ cdiPioClientStreamOpen(const char *filename, char filemode, int filetype, stream
return fileID;
}
static void
checkVlistForPIO(int vlistID)
{
int nVars = vlistNvars(vlistID);
int varShape[3];
for (int varID = 0; varID < nVars; ++varID)
{
cdiPioQueryVarDims(varShape, vlistID, varID);
intmax_t size = 1;
for (size_t i = 0; i < 3; ++i) size *= varShape[i];
if (size > XT_INT_MAX)
{
errno = EOVERFLOW;
SysError("CDI Variable too large for YAXT,"
" use configure with larger index type\n"
"vlistID=%d, varID=%d, variable size=%zu",
vlistID, varID, (size_t) size);
}
}
}
static void
cdiPioClientStreamDefVlist_(int streamID, int vlistID)
{
checkVlistForPIO(vlistID);
cdiStreamDefVlist_(streamID, vlistID);
int clientRank = commInqRankModel(), numClients = cdiPioCommInqSizeClients(), numColl = commInqSizeColl(),
collRank = cdiPioCollRank(clientRank, numClients, numColl);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment