diff options
Diffstat (limited to 'FICS/eco.c')
-rw-r--r-- | FICS/eco.c | 140 |
1 files changed, 93 insertions, 47 deletions
@@ -21,6 +21,18 @@ #include <bsd/string.h> #endif +#define FENPOS_SIZE 73 +#define ONMOVE_SIZE 2 + +#define ECO_MAXFILENAME 1024 +#define ECO_MAXTMP 1024 + +#define SCAN_FP_AND_ONMOVE "%72[\x21-z] %1s" + +#define SCAN_ECO "%3[0-z]" +#define SCAN_NIC "%5[.-z]" +#define SCAN_LONG "%255[^*\n]" + PRIVATE char *book_dir = DEFAULT_BOOK; PRIVATE ECO_entry *ECO_book[1096]; @@ -121,10 +133,10 @@ ECO_init(void) { FILE *fp; char ECO[4] = {0,0,0,0}; - char FENpos[73] = { '\0' }; - char filename[1024] = { '\0' }; - char onMove[2] = {0,0}; - char tmp[1024] = { '\0' }; + char FENpos[FENPOS_SIZE] = { '\0' }; + char filename[ECO_MAXFILENAME] = { '\0' }; + char onMove[ONMOVE_SIZE] = {0,0}; + char tmp[ECO_MAXTMP] = { '\0' }; char *ptmp = tmp; int i = 0; @@ -135,21 +147,32 @@ ECO_init(void) while (!feof(fp)) { (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - - /* XXX */ - sscanf(ptmp, "%[\x21-z] %s", FENpos, onMove); - (void) strlcat(FENpos, " ", sizeof FENpos); - (void) strlcat(FENpos, onMove, sizeof FENpos); + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + + if (sscanf(ptmp, SCAN_FP_AND_ONMOVE, FENpos, onMove) != 2) { + warnx("%s: sscanf() error (%s:%d)", __func__, + filename, i); + break; + } else if (strlcat(FENpos, " ", sizeof FENpos) >= sizeof FENpos || + strlcat(FENpos, onMove, sizeof FENpos) >= sizeof FENpos) { + warnx("%s: strlcat() error (%s:%d)", __func__, + filename, i); + break; + } (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - sscanf(ptmp, "%[0-z]", ECO); + + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + else if (sscanf(ptmp, SCAN_ECO, ECO) != 1) { + warnx("%s: scan eco error (%s:%d)", __func__, + filename, i); + break; + } if ((ECO_book[i] = malloc(sizeof(ECO_entry))) == NULL) err(1, "Cound not alloc mem for ECO entry %d", i); @@ -180,11 +203,11 @@ PUBLIC void NIC_init(void) { FILE *fp; - char FENpos[73] = { '\0' }; + char FENpos[FENPOS_SIZE] = { '\0' }; char NIC[6] = {0,0,0,0,0,0}; - char filename[1024] = { '\0' }; - char onMove[2] = {0,0}; - char tmp[1024] = { '\0' }; + char filename[ECO_MAXFILENAME] = { '\0' }; + char onMove[ONMOVE_SIZE] = {0,0}; + char tmp[ECO_MAXTMP] = { '\0' }; char *ptmp = tmp; int i = 0; @@ -195,20 +218,32 @@ NIC_init(void) while (!feof(fp)) { (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - - sscanf(ptmp, "%[\x21-z] %s", FENpos, onMove); - (void) strlcat(FENpos, " ", sizeof FENpos); - (void) strlcat(FENpos, onMove, sizeof FENpos); + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + + if (sscanf(ptmp, SCAN_FP_AND_ONMOVE, FENpos, onMove) != 2) { + warnx("%s: sscanf() error (%s:%d)", __func__, + filename, i); + break; + } else if (strlcat(FENpos, " ", sizeof FENpos) >= sizeof FENpos || + strlcat(FENpos, onMove, sizeof FENpos) >= sizeof FENpos) { + warnx("%s: strlcat() error (%s:%d)", __func__, + filename, i); + break; + } (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - sscanf(ptmp, "%[.-z]", NIC); + + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + else if (sscanf(ptmp, SCAN_NIC, NIC) != 1) { + warnx("%s: scan nic error (%s:%d)", __func__, + filename, i); + break; + } if ((NIC_book[i] = malloc(sizeof(NIC_entry))) == NULL) err(1, "Cound not alloc mem for NIC entry %d", i); @@ -232,11 +267,11 @@ PUBLIC void LONG_init(void) { FILE *fp; - char FENpos[73] = { '\0' }; + char FENpos[FENPOS_SIZE] = { '\0' }; char LONG[256] = { '\0' }; - char filename[1024] = { '\0' }; - char onMove[2] = {0,0}; - char tmp[1024] = { '\0' }; + char filename[ECO_MAXFILENAME] = { '\0' }; + char onMove[ONMOVE_SIZE] = {0,0}; + char tmp[ECO_MAXTMP] = { '\0' }; char *ptmp = tmp; int i = 0; @@ -247,21 +282,32 @@ LONG_init(void) while (!feof(fp)) { (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - - /* XXX */ - sscanf(ptmp, "%[\x21-z] %s", FENpos, onMove); - (void) strlcat(FENpos, " ", sizeof FENpos); - (void) strlcat(FENpos, onMove, sizeof FENpos); + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + + if (sscanf(ptmp, SCAN_FP_AND_ONMOVE, FENpos, onMove) != 2) { + warnx("%s: sscanf() error (%s:%d)", __func__, + filename, i); + break; + } else if (strlcat(FENpos, " ", sizeof FENpos) >= sizeof FENpos || + strlcat(FENpos, onMove, sizeof FENpos) >= sizeof FENpos) { + warnx("%s: strlcat() error (%s:%d)", __func__, + filename, i); + break; + } (void) strlcpy(ptmp, "", sizeof tmp); - fgets(ptmp, 1024, fp); - if (feof(fp)) - continue; - sscanf(ptmp, "%[^*\n]", LONG); + + if (fgets(ptmp, sizeof tmp, fp) == NULL || + feof(fp)) + break; + else if (sscanf(ptmp, SCAN_LONG, LONG) != 1) { + warnx("%s: scan long error (%s:%d)", __func__, + filename, i); + break; + } if ((LONG_book[i] = malloc(sizeof(LONG_entry))) == NULL) err(1, "Cound not alloc mem for LONG entry %d", i); |