]> git.sur5r.net Git - openldap/commitdiff
ITS#6758 Support rs_reinit(rs, rs->sr_type).
authorHallvard Furuseth <hallvard@openldap.org>
Fri, 21 Jan 2011 11:23:00 +0000 (11:23 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Fri, 21 Jan 2011 11:23:00 +0000 (11:23 +0000)
rs_reinit() looks like a function call, so it should act like one.

servers/slapd/proto-slap.h

index 158087610907ca074a09ee292cae5b2217f71a70..35b0fa1ed19f3fa1b0d0ea951c8756c0e44c20a4 100644 (file)
@@ -1557,8 +1557,11 @@ LDAP_SLAPD_F (void) (rs_assert_done)     LDAP_P(( const SlapReply *rs ));
 #define rs_reinit(rs, type)    do {                    \
                SlapReply *const rsRI = (rs);           \
                rs_assert_done( rsRI );                         \
-               memset( rsRI, 0, sizeof(*rsRI) );       \
                rsRI->sr_type = (type);                         \
+               /* Got type before memset in case of rs_reinit(rs, rs->sr_type) */ \
+               assert( !offsetof( SlapReply, sr_type ) );      \
+               memset( (slap_reply_t *) rsRI + 1, 0,           \
+                       sizeof(*rsRI) - sizeof(slap_reply_t) ); \
        } while ( 0 )
 LDAP_SLAPD_F (void) (rs_reinit)        LDAP_P(( SlapReply *rs, slap_reply_t type ));
 LDAP_SLAPD_F (void) rs_flush_entry LDAP_P(( Operation *op,