示例#1
0
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, &lt) )
                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(&lt);

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