#include "common.h"
#include "mba/csv.h"

#include "mba/hexdump.h"

int
readline(FILE *in, char *src)
{
	char *start = src;
	int ch;

	while ((ch = fgetc(in)) != EOF) {
		if (ch == '\n' || ch == '\0') {
			*src = '\0';
			return src - start;
		}
		*src++ = ch;
	}

	return 0;
}

int
CsvExamples(int verbose, struct cfg *cfg, char *args[])
{
	unsigned char buf[4096], inbuf[4096], exbuf[4096], *row[100];
	FILE *in, *ex;
	int ret, i, j, sep, flags, count = 1;
	cfg = NULL;

	if ((in = fopen(args[0], "r")) == NULL) {
		PMNF(errno, ": %s", args[0]);
		return -1;
	}
	if ((ex = fopen(args[1], "r")) == NULL) {
		PMNF(errno, ": %s", args[1]);
		return -1;
	}

	flags = atoi(args[2]);
	sep = *args[3];
	while ((ret = csv_row_fread(in, buf, 4096, row, 100, sep, flags)) > 0) {
		if (readline(ex, exbuf) < 1) {
			break;
		}
		j = 0;
		for (i = 0; i < 100; i++) {
			if (row[i]) {
				inbuf[j++] = '{';
				strcpy(inbuf + j, row[i]);
				j += strlen(row[i]);
				inbuf[j++] = '}';
			}
		}
		inbuf[j++] = '\0';

		if (strcmp(inbuf, exbuf) != 0) {
			PMSG("Failed to match %d:\nin[%s]\nex[%s]", count, inbuf, exbuf);
/*
hexdump(stderr, inbuf, 32, 16);
hexdump(stderr, exbuf, 32, 16);
*/
			return -1;
		}

		tcase_printf(verbose, "%40s %40s\n", inbuf, exbuf);
		count++;
	}

	fclose(ex);
	fclose(in);

    return ret;
}


syntax highlighted by Code2HTML, v. 0.9.1