static void cast_int32(void) { idmef_value_t *value; assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT64, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_INT64); assert(idmef_value_get_int64(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_FLOAT, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_FLOAT); assert(idmef_value_get_float(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DOUBLE, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DOUBLE); assert(idmef_value_get_double(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DATA, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DATA); assert((int) idmef_data_get_uint32(idmef_value_get_data(value)) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MAX) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_TIME, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_TIME); assert(idmef_time_get_sec(idmef_value_get_time(value)) == INT32_MAX); idmef_value_destroy(value); }
static int do_btime_match(const idmef_criterion_value_t *cv, idmef_criterion_operator_t op, idmef_value_t *value) { time_t sec, wanted, matched; struct tm lt, *comp = cv->value; if ( idmef_value_get_type(value) != IDMEF_VALUE_TYPE_TIME ) return -1; sec = idmef_time_get_sec(idmef_value_get_time(value)); if ( ! gmtime_r(&sec, <) ) return prelude_error_from_errno(errno); /* * Apply mask */ if ( comp->tm_sec < 0 ) lt.tm_sec = -1; if ( comp->tm_min < 0 ) lt.tm_min = -1; if ( comp->tm_mon < 0 ) lt.tm_mon = -1; if ( comp->tm_hour < 0 ) lt.tm_hour = -1; if ( comp->tm_mday < 0 ) lt.tm_mday = -1; if ( comp->tm_year < 0 ) lt.tm_year = -1; if ( comp->tm_wday < 0 ) lt.tm_wday = -1; if ( comp->tm_yday < 0 ) lt.tm_yday = -1; wanted = timegm(comp); matched = timegm(<); if ( op & IDMEF_CRITERION_OPERATOR_EQUAL && matched == wanted ) return 1; if ( op & IDMEF_CRITERION_OPERATOR_LESSER && matched < wanted) return 1; if ( op & IDMEF_CRITERION_OPERATOR_GREATER && matched > wanted ) return 1; return 0; }