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

Extract function to compose file names.

* This enables nicer failure modes for long file names and better
  diagnostics.
parent 83e74dc1
No related branches found
No related tags found
2 merge requests!34Version 2.2.0,!13Consolidation with CDI-PIO (develop)
......@@ -86,7 +86,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
time_t current_time;
int vdate = 19850101, vtime = 120000;
int rank = 0;
char filename[1024];
char *filename = NULL;
int nlon = setup.nlon, nlat = setup.nlat;
size_t nVars = setup.nvars > 0 ? (size_t) setup.nvars : 0;
size_t varslice_size = 0;
......@@ -235,7 +235,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
taxisID = taxisCreate(TAXIS_ABSOLUTE);
vlistDefTaxis(vlistID, taxisID);
sprintf(&filename[0], "%s_%d.%s", fname_prefix, tfID, setup.suffix);
composeFilename(&filename, fname_prefix, tfID, setup.suffix);
streamID = streamOpenWrite(filename, setup.filetype);
xassert(streamID >= 0);
streamDefVlist(streamID, vlistID);
......@@ -250,7 +250,8 @@ modelRun(struct model_config setup, MPI_Comm comm)
if (tfID > 0)
{
streamClose(streamID);
sprintf(&filename[0], "%s_%d.%s", fname_prefix, tfID, setup.suffix);
composeFilename(&filename, fname_prefix, tfID, setup.suffix);
streamID = streamOpenWrite(filename, setup.filetype);
xassert(streamID >= 0);
streamDefVlist(streamID, vlistID);
......@@ -338,7 +339,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
{
FILE *tablefp;
{
sprintf(filename, "%s_%d.cksum", fname_prefix, tfID);
composeFilename(&filename, fname_prefix, tfID, "cksum");
if (!(tablefp = fopen(filename, "w")))
{
perror("failed to open table file");
......@@ -389,6 +390,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
#endif
Free(varDesc);
Free(levs);
Free(filename);
}
#ifdef USE_MPI
......
......@@ -78,7 +78,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
time_t current_time;
int vdate = 19850101, vtime = 120000;
int rank = 0;
char filename[1024];
char *filename = NULL;
int nlon = setup.nlon, nlat = setup.nlat;
size_t nVars = (size_t) setup.nvars;
size_t varslice_size = 0;
......@@ -175,7 +175,8 @@ modelRun(struct model_config setup, MPI_Comm comm)
taxisID = taxisCreate(TAXIS_ABSOLUTE);
vlistDefTaxis(vlistID, taxisID);
sprintf(&filename[0], "%s_%d.%s", fname_prefix, tfID, setup.suffix);
composeFilename(&filename, fname_prefix, tfID, setup.suffix);
streamID = streamOpenWrite(filename, setup.filetype);
xassert(streamID >= 0);
streamDefVlist(streamID, vlistID);
......@@ -190,7 +191,8 @@ modelRun(struct model_config setup, MPI_Comm comm)
if (tfID > 0)
{
streamClose(streamID);
sprintf(&filename[0], "%s_%d.%s", fname_prefix, tfID, setup.suffix);
composeFilename(&filename, fname_prefix, tfID, setup.suffix);
streamID = streamOpenWrite(filename, setup.filetype);
xassert(streamID >= 0);
streamDefVlist(streamID, vlistID);
......@@ -265,7 +267,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
{
FILE *tablefp;
{
sprintf(filename, "%s_%d.cksum", fname_prefix, tfID);
composeFilename(&filename, fname_prefix, tfID, "cksum");
if (!(tablefp = fopen(filename, "w")))
{
perror("failed to open table file");
......@@ -318,6 +320,7 @@ modelRun(struct model_config setup, MPI_Comm comm)
#endif
Free(varDesc);
Free(levs);
Free(filename);
}
/*
......
......@@ -5,6 +5,7 @@
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cdi.h"
#include "dmemory.h"
......@@ -63,6 +64,24 @@ time_t2cditime(time_t t, int *date, int *timeofday)
*timeofday = t_s->tm_hour * 10000 + t_s->tm_min * 100 + t_s->tm_sec;
}
void
composeFilename(char **buf, const char *fname_prefix, int tfID, const char *suffix)
{
size_t fnSize = strlen(fname_prefix) + 1 + sizeof(int) * 3 + 1 + strlen(suffix) + 1;
char *filename = Realloc(*buf, fnSize);
int plen;
if ((size_t) (plen = snprintf(filename, fnSize, "%s_%d.%s", fname_prefix, tfID, suffix)) >= fnSize)
{
fprintf(stderr,
"unexpected error: printing to string of size %zu"
" results in %d chars to write\n",
fnSize, plen);
abort();
}
filename[fnSize - 1] = 0;
*buf = filename;
}
#if defined USE_MPI && !defined HAVE_PPM_CORE
static int32_t uniform_partition_start(struct PPM_extent set_interval, int nparts, int part_idx);
......@@ -113,3 +132,13 @@ PPM_prime_factorization_32(uint32_t n, uint32_t **factors)
}
#endif
/*
* Local Variables:
* c-file-style: "Java"
* c-basic-offset: 2
* indent-tabs-mode: nil
* show-trailing-whitespace: t
* require-trailing-newline: t
* End:
*/
......@@ -36,6 +36,8 @@ dg_wobble(double frac_x, double frac_y, double mscale, double mrscale)
time_t cditime2time_t(int date, int timeofday);
void time_t2cditime(time_t t, int *date, int *timeofday);
void composeFilename(char **buf, const char *fname_prefix, int tfID, const char *suffix);
#if defined(USE_MPI) && !defined(HAVE_PPM_CORE)
struct PPM_extent
{
......
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