/* Note that sanitizing the trailing part of (*inp)[ii].value was the responsibility of read_inpfile() */ gmx_int64_t get_eint64(int *ninp, t_inpfile **inp, const char *name, gmx_int64_t def, warninp_t wi) { char buf[32], *ptr, warn_buf[STRLEN]; int ii; gmx_int64_t ret; ii = get_einp(ninp, inp, name); if (ii == -1) { sprintf(buf, "%"GMX_PRId64, def); (*inp)[(*ninp)-1].value = gmx_strdup(buf); return def; } else { ret = str_to_int64_t((*inp)[ii].value, &ptr); if (*ptr != '\0') { sprintf(warn_buf, "Right hand side '%s' for parameter '%s' in parameter file is not an integer value\n", (*inp)[ii].value, (*inp)[ii].name); warning_error(wi, warn_buf); } return ret; } }
/* Same as above, but for large integer values */ static gmx_int64_t istepscan(int argc, char *argv[], int *i) { const char *const arg = argv[*i]; if (argc <= (*i)+1) { usage("an integer", arg); } const char *const value = argv[++(*i)]; char *endptr; gmx_int64_t var = str_to_int64_t(value, &endptr); if (*value == '\0' || *endptr != '\0') { usage("an integer", arg); } return var; }