aboutsummaryrefslogtreecommitdiffstats
path: root/FICS/eco.c
diff options
context:
space:
mode:
Diffstat (limited to 'FICS/eco.c')
-rw-r--r--FICS/eco.c140
1 files changed, 93 insertions, 47 deletions
diff --git a/FICS/eco.c b/FICS/eco.c
index e561214..3598943 100644
--- a/FICS/eco.c
+++ b/FICS/eco.c
@@ -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);