SEXP_t *oval_value_to_sexp(struct oval_value *val, oval_datatype_t dtype) { SEXP_t *val_sexp = NULL; char *val_rptr = NULL; switch (dtype) { case OVAL_DATATYPE_EVR_STRING: case OVAL_DATATYPE_DEBIAN_EVR_STRING: case OVAL_DATATYPE_IPV4ADDR: case OVAL_DATATYPE_IPV6ADDR: case OVAL_DATATYPE_STRING: case OVAL_DATATYPE_VERSION: val_rptr = oval_value_get_text (val); if (val_rptr != NULL) { val_sexp = SEXP_string_newf("%s", val_rptr); } break; case OVAL_DATATYPE_FLOAT: val_sexp = SEXP_number_newf(oval_value_get_float(val)); break; case OVAL_DATATYPE_INTEGER: val_sexp = SEXP_number_newi_64(oval_value_get_integer(val)); break; case OVAL_DATATYPE_BOOLEAN: val_sexp = SEXP_number_newb(oval_value_get_boolean(val)); break; case OVAL_DATATYPE_BINARY: case OVAL_DATATYPE_FILESET_REVISION: case OVAL_DATATYPE_IOS_VERSION: // todo: oscap_seterr(OSCAP_EFAMILY_OVAL, "Unsupported datatype: %s.", dtype); val_sexp = NULL; break; default: oscap_seterr(OSCAP_EFAMILY_OVAL, "Unknown datatype: %s.", dtype); val_sexp = NULL; break; } return val_sexp; }
int main (void) { SEXP_t *s_exp; int8_t i8 = -1; uint8_t u8 = 1; int16_t i16 = -32000; uint16_t u16 = 65000; int32_t i32 = -100000; uint32_t u32 = 100000; int64_t i64 = -1 * (1 << 30); uint64_t u64 = (uint64_t)1 << 48; double f = 123.456; s_exp = SEXP_number_newi_8 (i8); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newu_8 (u8); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newi_16 (i16); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newu_16 (u16); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newi_32 (i32); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newu_32 (u32); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newi_64 (i64); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newu_64 (u64); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); s_exp = SEXP_number_newf (f); SEXP_fprintfa (stdout, s_exp); putc('\n', stdout); SEXP_free (s_exp); return (0); }