Ejemplo n.º 1
0
static SIZE_OR_ERROR OWQ_parse_output_float(struct one_wire_query *owq)
{
	/* should only need suglen+1, but uClibc's snprintf()
	   seem to trash 'len' if not increased */
	int len;
	char c[PROPERTY_LENGTH_FLOAT + 2];
	_FLOAT F;

	switch (OWQ_pn(owq).selected_filetype->format) {
	case ft_pressure:
		F = Pressure(OWQ_F(owq), PN(owq));
		break;
	case ft_temperature:
		F = Temperature(OWQ_F(owq), PN(owq));
		break;
	case ft_tempgap:
		F = TemperatureGap(OWQ_F(owq), PN(owq));
		break;
	default:
		F = OWQ_F(owq);
		break;
	}

	UCLIBCLOCK;
	if ( ShouldTrim(PN(owq)) ) {
		len = snprintf(c, PROPERTY_LENGTH_FLOAT + 1, "%1G", F);
	} else {
		len = snprintf(c, PROPERTY_LENGTH_FLOAT + 1, "%*G", PROPERTY_LENGTH_FLOAT, F);
	}
	UCLIBCUNLOCK;
	if ((len < 0) || ((size_t) len > PROPERTY_LENGTH_FLOAT)) {
		return -EMSGSIZE;
	}
	return OWQ_parse_output_offset_and_size(c, len, owq);
}
Ejemplo n.º 2
0
ZERO_OR_ERROR OWQ_format_output_offset_and_size(const char *string, size_t length, struct one_wire_query *owq)
{
	SIZE_OR_ERROR ret = OWQ_parse_output_offset_and_size(string,length,owq) ;
	if ( ret > 0 ) {
		return 0 ;
	}
	return ret ;
}
Ejemplo n.º 3
0
static SIZE_OR_ERROR OWQ_parse_output_date(struct one_wire_query *owq)
{
	char c[PROPERTY_LENGTH_DATE + 2];
	if (OWQ_size(owq) < PROPERTY_LENGTH_DATE) {
		return -EMSGSIZE;
	}
	ctime_r(&OWQ_D(owq), c);
	return OWQ_parse_output_offset_and_size(c, PROPERTY_LENGTH_DATE, owq);
}
Ejemplo n.º 4
0
static SIZE_OR_ERROR OWQ_parse_output_unsigned(struct one_wire_query *owq)
{
	/* should only need suglen+1, but uClibc's snprintf()
	   seem to trash 'len' if not increased */
	int len;
	char c[PROPERTY_LENGTH_UNSIGNED + 2];

	UCLIBCLOCK;
	len = snprintf(c, PROPERTY_LENGTH_UNSIGNED + 1, "%*u", PROPERTY_LENGTH_UNSIGNED, OWQ_U(owq));
	UCLIBCUNLOCK;
	if ((len < 0) || ((size_t) len > PROPERTY_LENGTH_UNSIGNED)) {
		return -EMSGSIZE;
	}
	return OWQ_parse_output_offset_and_size(c, PROPERTY_LENGTH_UNSIGNED, owq);
}
Ejemplo n.º 5
0
static SIZE_OR_ERROR OWQ_parse_output_integer(struct one_wire_query *owq)
{
	/* should only need suglen+1, but uClibc's snprintf()
	   seem to trash 'len' if not increased */
	int len;
	char c[PROPERTY_LENGTH_INTEGER + 2];

	UCLIBCLOCK;
	if ( ShouldTrim(PN(owq)) ) {
		len = snprintf(c, PROPERTY_LENGTH_INTEGER + 1, "%1d", OWQ_I(owq));
	} else {
		len = snprintf(c, PROPERTY_LENGTH_INTEGER + 1, "%*d", PROPERTY_LENGTH_INTEGER, OWQ_I(owq));
	}
	UCLIBCUNLOCK;
	if ((len < 0) || ((size_t) len > PROPERTY_LENGTH_INTEGER)) {
		return -EMSGSIZE;
	}
	return OWQ_parse_output_offset_and_size(c, len, owq);
}
Ejemplo n.º 6
0
static SIZE_OR_ERROR OWQ_parse_output_offset_and_size_z(const char *string, struct one_wire_query *owq)
{
	return OWQ_parse_output_offset_and_size(string, strlen(string), owq);
}