/* Copyright (c) 2016 Google Inc
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * Various option parsing utility functions. */

#include <parlib/opts.h>
#include <parlib/stdio.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

/* Parses an option file, calling parse() on individual lines.  We trim the
 * lines of any leading or trailing spaces first, and ignore anything after #.
 */
int parse_opts_file(char *opts_file, void (*parse)(char *))
{
	char *line = NULL;
	size_t len = 0;
	ssize_t read;
	FILE *fp;
	char *_line;

	if (!opts_file)
		return 0;
	fp = fopen(opts_file, "r");
	if (!fp)
		return -1;
	while ((read = getline(&line, &len, fp)) != -1) {
		_line = line;
		/* Drop comments */
		for (int i = 0; i < read; i++) {
			if (_line[i] == '#') {
				_line[i] = 0;
				read = i;
				break;
			}
		}
		if (!read)
			continue;
		/* Drop trailing spaces */
		for (int i = read - 1; i >= 0; i--) {
			if (isspace(_line[i]))
				_line[i] = 0;
			else
				break;
		}
		while (isspace(_line[read - 1])) {
			_line[read - 1] = 0;
			read--;
			if (!read)
				continue;
		}
		/* Drop leading spaces */
		while (isspace(_line[0]))
			_line++;
		parse(_line);
	}
	free(line);
	fclose(fp);
	return 0;
}
