make buffer size a compile time constant and use strncpy() instead of strcpy()
This commit is contained in:
@ -30,6 +30,8 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
enum { REGULAR_MODE, CLASS2_MODE };
|
enum { REGULAR_MODE, CLASS2_MODE };
|
||||||
|
|
||||||
|
static constexpr int BUF_SIZE = 256;
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
called as write_coeff command in input script
|
called as write_coeff command in input script
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
@ -47,7 +49,7 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
lmp->init();
|
lmp->init();
|
||||||
|
|
||||||
if (comm->me == 0) {
|
if (comm->me == 0) {
|
||||||
char str[256], coeff[256];
|
char str[BUF_SIZE], coeff[BUF_SIZE];
|
||||||
FILE *one = fopen(file, "wb+");
|
FILE *one = fopen(file, "wb+");
|
||||||
|
|
||||||
if (one == nullptr)
|
if (one == nullptr)
|
||||||
@ -88,7 +90,7 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int coeff_mode = REGULAR_MODE;
|
int coeff_mode = REGULAR_MODE;
|
||||||
if (fgets(str, 256, one) == nullptr) break;
|
if (fgets(str, BUF_SIZE, one) == nullptr) break;
|
||||||
|
|
||||||
// some coeffs need special treatment
|
// some coeffs need special treatment
|
||||||
if (strstr(str, "class2") != nullptr) {
|
if (strstr(str, "class2") != nullptr) {
|
||||||
@ -102,18 +104,18 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
|
|
||||||
const char * section = (const char *) ""; // NOLINT
|
const char * section = (const char *) ""; // NOLINT
|
||||||
fputs(str, two); // style
|
fputs(str, two); // style
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error); // coeff
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error); // coeff
|
||||||
int n = strlen(str);
|
int n = strlen(str);
|
||||||
strcpy(coeff, str);
|
strncpy(coeff, str, BUF_SIZE);
|
||||||
coeff[n - 1] = '\0';
|
coeff[n - 1] = '\0';
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
|
|
||||||
while (strcmp(str, "end\n") != 0) {
|
while (strcmp(str, "end\n") != 0) {
|
||||||
|
|
||||||
if (coeff_mode == REGULAR_MODE) {
|
if (coeff_mode == REGULAR_MODE) {
|
||||||
|
|
||||||
fprintf(two, "%s %s", coeff, str);
|
fprintf(two, "%s %s", coeff, str);
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
|
|
||||||
} else if (coeff_mode == CLASS2_MODE) {
|
} else if (coeff_mode == CLASS2_MODE) {
|
||||||
|
|
||||||
@ -125,7 +127,7 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
// all but the the last section end with an empty line.
|
// all but the the last section end with an empty line.
|
||||||
// skip it and read and parse the next section title
|
// skip it and read and parse the next section title
|
||||||
|
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
|
|
||||||
if (strcmp(str, "BondBond Coeffs\n") == 0)
|
if (strcmp(str, "BondBond Coeffs\n") == 0)
|
||||||
section = (const char *) "bb";
|
section = (const char *) "bb";
|
||||||
@ -145,8 +147,8 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
section = (const char *) "aa";
|
section = (const char *) "aa";
|
||||||
|
|
||||||
// gobble up one more empty line
|
// gobble up one more empty line
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse type number and skip over it
|
// parse type number and skip over it
|
||||||
@ -156,7 +158,7 @@ void WriteCoeff::command(int narg, char **arg)
|
|||||||
while ((*p != '\0') && isdigit(*p)) ++p;
|
while ((*p != '\0') && isdigit(*p)) ++p;
|
||||||
|
|
||||||
fprintf(two, "%s %d %s %s", coeff, type, section, p);
|
fprintf(two, "%s %d %s %s", coeff, type, section, p);
|
||||||
utils::sfgets(FLERR, str, 256, one, file, error);
|
utils::sfgets(FLERR, str, BUF_SIZE, one, file, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fputc('\n', two);
|
fputc('\n', two);
|
||||||
|
|||||||
Reference in New Issue
Block a user