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); }
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 ; }
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); }
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); }
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); }
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); }