diff --git a/src/procmap.cpp b/src/procmap.cpp index b8e6e02ed5..87ab415e5e 100644 --- a/src/procmap.cpp +++ b/src/procmap.cpp @@ -22,6 +22,7 @@ #include "error.h" #include "math_extra.h" #include "memory.h" +#include "tokenizer.h" #include "universe.h" #include @@ -300,12 +301,16 @@ void ProcMap::custom_grid(char *cfile, int nprocs, } } - int n = strlen(line) + 1; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - int rv = sscanf(line,"%d %d %d",&procgrid[0],&procgrid[1],&procgrid[2]); - if (rv != 3) error->all(FLERR,"Processors custom grid file is inconsistent"); + MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); + try { + ValueTokenizer procs(line); + procgrid[0] = procs.next_int(); + procgrid[1] = procs.next_int(); + procgrid[2] = procs.next_int(); + } catch (TokenizerException &e) { + error->all(FLERR,fmt::format("Processors custom grid file " + "is inconsistent: {}", e.what())); + } int flag = 0; if (procgrid[0]*procgrid[1]*procgrid[2] != nprocs) flag = 1; @@ -324,10 +329,17 @@ void ProcMap::custom_grid(char *cfile, int nprocs, for (int i = 0; i < nprocs; i++) { if (!fgets(line,MAXLINE,fp)) error->one(FLERR,"Unexpected end of custom file"); - rv = sscanf(line,"%d %d %d %d", - &cmap[i][0],&cmap[i][1],&cmap[i][2],&cmap[i][3]); - if (rv != 4) - error->one(FLERR,"Processors custom grid file is inconsistent"); + + try { + ValueTokenizer pmap(line); + cmap[i][0] = pmap.next_int(); + cmap[i][1] = pmap.next_int(); + cmap[i][2] = pmap.next_int(); + cmap[i][3] = pmap.next_int(); + } catch (TokenizerException &e) { + error->one(FLERR,fmt::format("Processors custom grid file is " + "inconsistent: {}", e.what())); + } } fclose(fp); }