/**
 * idmef_message_get_string:
 * @message: Pointer to an #idmef_message_t object.
 * @path: Path to retrieve the string from within @message.
 * @result: Pointer where the result should be stored.
 *
 * Retrieve the string stored within @path of @message and store it
 * in the user provided @result.
 *
 * The caller is responssible for freeing @result.
 *
 * Returns: A positive value in case @path was successfully retrieved
 * 0 if the path is empty, or a negative value if an error occured.
 */
int idmef_message_get_string(idmef_message_t *message, const char *path, char **result)
{
    int ret;
    idmef_value_t *iv;
    prelude_string_t *str;

    ret = idmef_message_get_value(message, path, &iv);
    if ( ret <= 0 )
        return ret;

    if ( idmef_value_get_type(iv) != IDMEF_VALUE_TYPE_STRING ) {
        ret = _idmef_value_cast(iv, IDMEF_VALUE_TYPE_STRING, 0);
        if ( ret < 0 )
            goto err;
    }

    if ( ! (str = idmef_value_get_string(iv)) ) {
        ret = -1;
        goto err;
    }

    if ( prelude_string_is_empty(str) ) {
        *result = NULL;
        return 0;
    }

    *result = strdup(prelude_string_get_string(str));
    ret = prelude_string_get_len(str);

err:
    idmef_value_destroy(iv);
    return ret;
}
static void send_string(prelude_msgbuf_t *msgbuf, prelude_string_t *out, int type)
{
        size_t len;

        len = prelude_string_is_empty(out) ? 0 : (prelude_string_get_len(out) + 1);
        if ( type == PRELUDE_MSG_OPTION_VALUE && ! len )
                return;

        prelude_msgbuf_set(msgbuf, type, len, prelude_string_get_string(out));
}
static int btime_print(const idmef_criterion_value_t *cv, prelude_io_t *fd)
{
        int ret;
        prelude_string_t *out;

        ret = prelude_string_new(&out);
        if ( ret < 0 )
                return ret;

        ret = btime_to_string(cv, out);
        if ( ret < 0 ) {
                prelude_string_destroy(out);
                return ret;
        }

        ret = prelude_io_write(fd, prelude_string_get_string(out), prelude_string_get_len(out));
        prelude_string_destroy(out);

        return ret;
}