Example #1
0
int
main(int argc, char *argv[])
{
	FILE *fp;
	char *buf = NULL, *p;
	char *file = NULL;
	size_t size = 0;
	int i;
	int r = 0;

	ARGBEGIN {
	case 'p':
		file = EARGF(usage());
		break;
	default:
		usage();
	} ARGEND;

	if (!file && argc < 1)
		usage();

	if (!file) {
		for (i = 0; i < argc; i++)
			if (parsepair(argv[i]) < 0)
				r = 1;
	} else {
		fp = fopen(file, "r");
		if (!fp)
			eprintf("fopen %s:", file);
		while (agetline(&buf, &size, fp) != -1) {
			p = buf;
			for (p = buf; *p == ' ' || *p == '\t'; p++)
				;
			if (*p == '#' || *p == '\n')
				continue;
			for (p = buf; *p; p++) {
				if (*p == '\n') {
					*p = '\0';
					break;
				}
			}
			p = buf;
			if (parsepair(p) < 0)
				r = 1;
		}
		if (ferror(fp))
			eprintf("%s: read error:", file);
		free(buf);
		fclose(fp);
	}

	return r;
}
Example #2
0
static int
parseobject(Parser *p, JSON *parent, JSON **prev)
{
	JSON *kprev = nil, *vprev = nil;
	JSON *v = inititem(p, parent, prev, '{');
	must(consume(p, "{"));
	skipws(p);
	if (*p->s != '}') {
		must(parsepair(p, v, &kprev, &vprev));
		for (skipws(p); *p->s == ','; skipws(p)) {
			p->s++; // consume ,
			skipws(p);
			must(parsepair(p, v, &kprev, &vprev));
		}
	}
	must(consume(p, "}"));
	if (v) {
		v->end = p->s;
	}
	return 1;
}