#include "asn1fix_internal.h"

struct _cstring_pattern {
	char *start;
	int length;
};
static int _asn1f_cstring_find_line_pattern(char *s, struct _cstring_pattern *);

int
asn1f_fix_cstring(arg_t *arg) {
	asn1p_expr_t *expr = arg->expr;
	int r_value = 0;

	if(expr->value && expr->value->type == ATV_STRING) {
		struct _cstring_pattern cp;
		char *buf = expr->value->value.string.buf;
		int buflen = expr->value->value.string.size;
		int start = 0;

		DEBUG("%s(%s) for line %d", __func__,
			expr->Identifier, expr->_lineno);

		while(_asn1f_cstring_find_line_pattern(buf + start, &cp)) {
			assert(cp.length);
			memmove(cp.start, cp.start + cp.length,
				buflen - ((cp.start + cp.length) - buf));
			buflen -= cp.length;
			start = cp.start - buf;
			buf[buflen] = '\0';
		}
	}

	return r_value;
}

/*
 * If a string has a newline, the tabulation and spaces before and
 * after it must be eliminated.
 */
static int
_asn1f_cstring_find_line_pattern(char *s, struct _cstring_pattern *cp) {
	int newline_found = 0;

	cp->start = NULL;

	for(;;s++) {
		switch(*s) {
		case '\r': case '\n':
			newline_found = 1;
			/* Fall through */
		case ' ': case '\t':
			if(cp->start == NULL)
				cp->start = s;
			continue;
		case '\0':
		default:
			if(newline_found) {
				cp->length = s - cp->start;
				return 1;
			}

			cp->start = NULL;
			if(*s == '\0')
				break;
			continue;
		}
		break;
	}

	return 0;
}


