{
        struct sb_sasl_generic_data     *p;
        int                             ret;
-       ber_len_t                       len2, sent;
+       ber_len_t                       len2;
 
        assert( sbiod != NULL );
        assert( SOCKBUF_VALID( sbiod->sbiod_sb ) );
 
        p = (struct sb_sasl_generic_data *)sbiod->sbiod_pvt;
 
-       /* Are there anything left in the buffer? */
+       /* Is there anything left in the buffer? */
        if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) {
                ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );
                if ( ret < 0 ) return ret;
                return -1;
        }
 
-       sent = ber_pvt_sb_do_write( sbiod, &p->buf_out );
+       ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );
 
-       if ( sent < 0 ) {
+       if ( ret < 0 ) {
                /* error? */
-               len2 = sent;
-       } else if ( sent != p->buf_out.buf_end ) {
+               return ret;
+       } else if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) {
                /* partial write? */
                len2--;
                p->flags |= LDAP_PVT_SASL_PARTIAL_WRITE;