From 2f8770971ce4cfe3c959c34da273f7307f26b66c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 16 Mar 2021 01:15:32 -0400 Subject: [PATCH] make use of utils::strdup() and simplify --- src/run.cpp | 4 +-- src/thermo.cpp | 67 ++++++++++++++++---------------------------------- src/update.cpp | 4 +-- 3 files changed, 23 insertions(+), 52 deletions(-) diff --git a/src/run.cpp b/src/run.cpp index 29e42fa6bf..fedf020d9d 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -145,9 +145,7 @@ void Run::command(int narg, char **arg) commands = new char*[ncommands]; ncommands = 0; for (int i = first; i <= last; i++) { - int n = strlen(arg[i]) + 1; - commands[ncommands] = new char[n]; - strcpy(commands[ncommands],arg[i]); + commands[ncommands] = utils::strdup(arg[i]); ncommands++; } } diff --git a/src/thermo.cpp b/src/thermo.cpp index 7e14fe37c0..eb4cc0f5ff 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -84,9 +84,7 @@ Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) { MPI_Comm_rank(world,&me); - int n = strlen(arg[0]) + 1; - style = new char[n]; - strcpy(style,arg[0]); + style = utils::strdup(arg[0]); // set thermo_modify defaults @@ -127,12 +125,12 @@ Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) int nvalues = utils::expand_args(FLERR,narg-1,&arg[1],0,earg,lmp); if (earg != &arg[1]) expand = 1; - line = new char[256+nvalues*64]; - line[0] = '\0'; + std::string concat; for (int iarg = 0; iarg < nvalues; iarg++) { - strcat(line,earg[iarg]); - strcat(line," "); + concat += earg[iarg]; + concat += " "; } + line = utils::strdup(concat); line[strlen(line)-1] = '\0'; // if wildcard expansion occurred, free earg memory from exapnd_args() @@ -456,9 +454,7 @@ void Thermo::modify_params(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal thermo_modify command"); if (index_temp < 0) error->all(FLERR,"Thermo style does not use temp"); delete [] id_compute[index_temp]; - int n = strlen(arg[iarg+1]) + 1; - id_compute[index_temp] = new char[n]; - strcpy(id_compute[index_temp],arg[iarg+1]); + id_compute[index_temp] = utils::strdup(arg[iarg+1]); int icompute = modify->find_compute(arg[iarg+1]); if (icompute < 0) @@ -496,15 +492,11 @@ void Thermo::modify_params(int narg, char **arg) if (index_press_scalar >= 0) { delete [] id_compute[index_press_scalar]; - int n = strlen(arg[iarg+1]) + 1; - id_compute[index_press_scalar] = new char[n]; - strcpy(id_compute[index_press_scalar],arg[iarg+1]); + id_compute[index_press_scalar] = utils::strdup(arg[iarg+1]); } if (index_press_vector >= 0) { delete [] id_compute[index_press_vector]; - int n = strlen(arg[iarg+1]) + 1; - id_compute[index_press_vector] = new char[n]; - strcpy(id_compute[index_press_vector],arg[iarg+1]); + id_compute[index_press_vector] = utils::strdup(arg[iarg+1]); } int icompute = modify->find_compute(arg[iarg+1]); @@ -579,41 +571,32 @@ void Thermo::modify_params(int narg, char **arg) if (strcmp(arg[iarg+1],"line") == 0) { delete [] format_line_user; - int n = strlen(arg[iarg+2]) + 1; - format_line_user = new char[n]; - strcpy(format_line_user,arg[iarg+2]); + format_line_user = utils::strdup(arg[iarg+2]); } else if (strcmp(arg[iarg+1],"int") == 0) { if (format_int_user) delete [] format_int_user; - int n = strlen(arg[iarg+2]) + 1; - format_int_user = new char[n]; - strcpy(format_int_user,arg[iarg+2]); + format_int_user = utils::strdup(arg[iarg+2]); if (format_bigint_user) delete [] format_bigint_user; - n = strlen(format_int_user) + 8; - format_bigint_user = new char[n]; // replace "d" in format_int_user with bigint format specifier - // use of &str[1] removes leading '%' from BIGINT_FORMAT string char *ptr = strchr(format_int_user,'d'); if (ptr == nullptr) error->all(FLERR, "Thermo_modify int format does not contain d character"); - char str[8]; - sprintf(str,"%s",BIGINT_FORMAT); + *ptr = '\0'; - sprintf(format_bigint_user,"%s%s%s",format_int_user,&str[1],ptr+1); + std::string fnew = fmt::format("{}{}{}",format_int_user, + std::string(BIGINT_FORMAT).substr(1), + ptr+1); + format_bigint_user = utils::strdup(fnew); *ptr = 'd'; } else if (strcmp(arg[iarg+1],"float") == 0) { if (format_float_user) delete [] format_float_user; - int n = strlen(arg[iarg+2]) + 1; - format_float_user = new char[n]; - strcpy(format_float_user,arg[iarg+2]); + format_float_user = utils::strdup(arg[iarg+2]); } else { int i = utils::inumeric(FLERR,arg[iarg+1],false,lmp) - 1; if (i < 0 || i >= nfield_initial+1) error->all(FLERR,"Illegal thermo_modify command"); if (format_column_user[i]) delete [] format_column_user[i]; - int n = strlen(arg[iarg+2]) + 1; - format_column_user[i] = new char[n]; - strcpy(format_column_user[i],arg[iarg+2]); + format_column_user[i] = utils::strdup(arg[iarg+2]); } iarg += 3; @@ -985,10 +968,8 @@ void Thermo::parse_fields(char *str) void Thermo::addfield(const char *key, FnPtr func, int typeflag) { - int n = strlen(key) + 1; delete[] keyword[nfield]; - keyword[nfield] = new char[n]; - strcpy(keyword[nfield],key); + keyword[nfield] = utils::strdup(key); vfunc[nfield] = func; vtype[nfield] = typeflag; nfield++; @@ -1008,9 +989,7 @@ int Thermo::add_compute(const char *id, int which) which == compute_which[icompute]) break; if (icompute < ncompute) return icompute; - int n = strlen(id) + 1; - id_compute[ncompute] = new char[n]; - strcpy(id_compute[ncompute],id); + id_compute[ncompute] = utils::strdup(id); compute_which[ncompute] = which; ncompute++; return ncompute-1; @@ -1022,9 +1001,7 @@ int Thermo::add_compute(const char *id, int which) int Thermo::add_fix(const char *id) { - int n = strlen(id) + 1; - id_fix[nfix] = new char[n]; - strcpy(id_fix[nfix],id); + id_fix[nfix] = utils::strdup(id); nfix++; return nfix-1; } @@ -1035,9 +1012,7 @@ int Thermo::add_fix(const char *id) int Thermo::add_variable(const char *id) { - int n = strlen(id) + 1; - id_variable[nvariable] = new char[n]; - strcpy(id_variable[nvariable],id); + id_variable[nvariable] = utils::strdup(id); nvariable++; return nvariable-1; } diff --git a/src/update.cpp b/src/update.cpp index 7c4b6b888e..1f78e48bb3 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -301,9 +301,7 @@ void Update::set_units(const char *style) } else error->all(FLERR,"Illegal units command"); delete [] unit_style; - int n = strlen(style) + 1; - unit_style = new char[n]; - strcpy(unit_style,style); + unit_style = utils::strdup(style); // check if timestep was changed from default value if (!dt_default && (comm->me == 0)) {