示例#1
0
cdk_error_t
cdk_stream_flush (cdk_stream_t s)
{
    cdk_error_t rc;

    if (!s)
    {
        gnutls_assert ();
        return CDK_Inv_Value;
    }

    /* The user callback does not support flush */
    if (s->cbs_hd)
        return 0;

    /* For read-only streams, no flush is needed. */
    if (!s->flags.write)
        return 0;

    if (!s->flags.filtrated)
    {
        if (!cdk_stream_get_length (s))
            return 0;
        rc = cdk_stream_seek (s, 0);
        if (!rc)
            rc = stream_flush (s);
        if (!rc)
            rc = stream_filter_write (s);
        s->flags.filtrated = 1;
        if (rc)
        {
            s->error = rc;
            gnutls_assert ();
            return rc;
        }
    }
    return 0;
}
示例#2
0
cdk_error_t
cdk_stream_flush( cdk_stream_t s )
{
    int rc = 0;
  
    if( !s )
        return CDK_Inv_Value;

    if( !s->flags.filtrated ) {
        if( !cdk_stream_get_length( s ) )
            return 0;
        rc = cdk_stream_seek( s, 0 );
        if( !rc )
            rc = stream_flush( s );
        if( !rc ) {
            rc = stream_filter_write( s );
            if( rc )
                s->error = rc;
        }
        s->flags.filtrated = 1;
    }
    return rc;
}