Check-in [2d9592486f]
Overview
Comment:Updated to use string for minirivet parsing
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | pure-c
Files: files | file ages | folders
SHA3-256: 2d9592486f3bc02b185a75f8732bef97c94c4d48f0ffab6d19030184cb1ca288
User & Date: rkeene on 2019-12-02 03:09:33
Other Links: branch diff | manifest | tags
Context
2019-12-03
17:59
Made Tcl and C version of "xvfs-create" more similar by re-ordering output check-in: 36d0805e0e user: rkeene tags: pure-c
2019-12-02
03:09
Updated to use string for minirivet parsing check-in: 2d9592486f user: rkeene tags: pure-c
02:53
Silence a warning check-in: 9f07de5ec5 user: rkeene tags: pure-c
Changes

Modified xvfs-create-c.c from [a3ef943f52] to [6584aa9678].

324
325
326
327
328
329
330
331

332
333
334

335
336
337
338
339
340
341
342
343
344
345
346
347

348
349
350
351
352
353
354
324
325
326
327
328
329
330

331
332

333
334
335
336
337





338
339
340
341

342
343
344
345
346
347
348
349







-
+

-

+



-
-
-
-
-




-
+







	} else {
		fprintf(outfp, "@INVALID@%s@INVALID@", buffer_p);
	}

	return;
}

static int parse_xvfs_minirivet(FILE *outfp, const char * const file, const struct options * const options) {
static int parse_xvfs_minirivet(FILE *outfp, const char * const template, const struct options * const options) {
	struct xvfs_state xvfs_state;
	FILE *fp;
	int ch, ch_buf;
	int template_idx = 0;
	char tcl_buffer[8192], *tcl_buffer_p;
	enum xvfs_minirivet_mode mode;

	fp = fopen(file, "r");
	if (!fp) {
		return(0);
	}

	xvfs_state.child_count = 0;
	xvfs_state.child_len   = 65536;
	xvfs_state.children    = malloc(sizeof(*xvfs_state.children) * xvfs_state.child_len);

#define parse_xvfs_minirivet_getbyte(var) var = fgetc(fp); if (var == EOF) { break; }
#define parse_xvfs_minirivet_getbyte(var) var = template[template_idx]; template_idx++; if (var == 0) { break; }

	mode = XVFS_MINIRIVET_MODE_COPY;
	tcl_buffer_p = NULL;
	while (1) {
		parse_xvfs_minirivet_getbyte(ch);

		switch (mode) {
410
411
412
413
414
415
416




















417

418
419
420


421






422
423















424
425
426
427
428
429
430
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431

432
433


434
435
436
437
438
439
440
441
442


443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+

-
-
+
+

+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







				tcl_buffer_p++;
				break;
		}
	}

#undef parse_xvfs_minirivet_getbyte

	return(1);
}

static int xvfs_create(FILE *outfp, const struct options * const options) {
	const int template_len = 65536;
	const char * const template_file = "lib/xvfs/xvfs.c.rvt";
	FILE *fp;
	char *template, *template_p;
	int template_remain;
	size_t fread_ret;
	int retval;

	fp = fopen(template_file, "r");
	if (!fp) {
		return(0);
	}

	template = malloc(template_len);
	template_remain = template_len;
	if (!template) {
	fclose(fp);
		fclose(fp);

	return(1);
}
		return(0);
	}

	template_p = template;
	while (1) {
		fread_ret = fread(template_p, 1, template_remain, fp);
		if (fread_ret <= 0) {
			break;
		}
static int xvfs_create(FILE *outfp, const struct options * const options) {
	return(parse_xvfs_minirivet(outfp, "lib/xvfs/xvfs.c.rvt", options));

		template_p += fread_ret;
		template_remain -= fread_ret;
	}
	if (template_remain > 0) {
		*template_p = '\0';
	}

	fclose(fp);

	retval = parse_xvfs_minirivet(outfp, template, options);

	free(template);

	return(retval);
}

/*
 * Parse command line options
 */
static int parse_options(int argc, char **argv, struct options *options) {
	char *arg;