#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