예제 #1
0
파일: log.c 프로젝트: saper/em400
// -----------------------------------------------------------------------
// I was bored.
// And then I suddenly felt like moving some chars around, hardcore style.
int log_setup_levels(char *levels)
{
	if (!levels || (*levels == '\0')) return 0;

	char *str = levels;
	const int buf_max = 8;
	char level_str[buf_max];
	char comp_name[buf_max];
	char *buf = comp_name;
	int i = 0;
	int have_comp = 0;
	int found = 0;

	while (1) {
		if (i > buf_max) {
			goto bail;
		}

		if (*str == '=') {
			if (!have_comp && (i > 0)) {
				buf[i] = '\0';
				buf = level_str;
				i = 0;
				have_comp = 1;
			} else {
				goto bail;
			}
		} else if ((*str == ',') || (*str == '\0')) {
			if (have_comp && (i > 0)) {
				buf[i] = '\0';
				buf = comp_name;
				i = 0;
				have_comp = 0;
				char *endptr;
				int level = strtol(level_str, &endptr, 10);
				if ((*endptr != '\0') || (level > 9)) {
					goto bail;
				}
				int comp_id = log_get_component_id(comp_name);
				if (comp_id < 0) {
					goto bail;
				}
				if (log_set_level(comp_id, level)) {
					goto bail;
				}
				found++;
			} else {
				goto bail;
			}
			if (*str == '\0') {
				break;
			}
		} else {
			buf[i] = *str;
			i++;
		}

		str++;
	}

	return found;

bail:
	return -(str - levels + 1);
}
예제 #2
0
파일: cpu.c 프로젝트: jakubfi/em400
// -----------------------------------------------------------------------
int ectl_log_component_id(char *name)
{
	return log_get_component_id(name);
}