tools/thermal/thermometer/thermometer.c

Source file repositories/reference/linux-study-clean/tools/thermal/thermometer/thermometer.c

File Facts

System
Linux kernel
Corpus path
tools/thermal/thermometer/thermometer.c
Extension
.c
Size
12647 bytes
Lines
574
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct options {
	int loglvl;
	int logopt;
	int overwrite;
	int duration;
	const char *config;
	char postfix[PATH_MAX];
	char output[PATH_MAX];
};

struct tz_regex {
	regex_t regex;
	int polling;
};

struct configuration {
	struct tz_regex *tz_regex;
	int nr_tz_regex;

};

struct tz {
	FILE *file_out;
	int fd_temp;
	int fd_timer;
	int polling;
	const char *name;
};

struct thermometer {
	struct tz *tz;
	int nr_tz;
};

static struct tz_regex *configuration_tz_match(const char *expr,
					       struct configuration *config)
{
	int i;

	for (i = 0; i < config->nr_tz_regex; i++) {

		if (!regexec(&config->tz_regex[i].regex, expr, 0, NULL, 0))
			return &config->tz_regex[i];
	}

	return NULL;
}

static int configuration_default_init(struct configuration *config)
{
	config->tz_regex = realloc(config->tz_regex, sizeof(*config->tz_regex) *
				   (config->nr_tz_regex + 1));

	if (regcomp(&config->tz_regex[config->nr_tz_regex].regex, ".*",
		    REG_NOSUB | REG_EXTENDED)) {
		ERROR("Invalid regular expression\n");
		return -1;
	}

	config->tz_regex[config->nr_tz_regex].polling = 250;
	config->nr_tz_regex = 1;

	return 0;
}

static int configuration_init(const char *path, struct configuration *config)
{
	config_t cfg;

	config_setting_t *tz;
	int i, length;

	if (path && access(path, F_OK)) {
		ERROR("'%s' is not accessible\n", path);
		return -1;
	}

	if (!path && !config->nr_tz_regex) {
		INFO("No thermal zones configured, using wildcard for all of them\n");
		return configuration_default_init(config);
	}

	config_init(&cfg);

	if (!config_read_file(&cfg, path)) {
		ERROR("Failed to parse %s:%d - %s\n", config_error_file(&cfg),
		      config_error_line(&cfg), config_error_text(&cfg));

		return -1;
	}

Annotation

Implementation Notes