mirror of
https://github.com/samba-team/samba.git
synced 2025-03-11 16:58:40 +03:00
librpc/ndr: Make ndr_push_compression_state_free() a talloc destructor
This means that the generic_mszip_free() will still be called on failure. Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
This commit is contained in:
parent
0ef71cf152
commit
c6981f6054
@ -236,8 +236,7 @@ static enum ndr_err_code ndr_push_folder_cfdata(struct ndr_push *ndr,
|
||||
SIVAL(ndr->data, csum_offset, csum);
|
||||
}
|
||||
|
||||
ndr_push_compression_state_free(ndr->cstate);
|
||||
ndr->cstate = NULL;
|
||||
TALLOC_FREE(ndr->cstate);
|
||||
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
@ -1066,6 +1066,23 @@ void ndr_pull_compression_state_free(struct ndr_compression_state *state)
|
||||
TALLOC_FREE(state);
|
||||
}
|
||||
|
||||
static int ndr_push_compression_state_free(struct ndr_compression_state *state)
|
||||
{
|
||||
switch (state->type) {
|
||||
case NDR_COMPRESSION_NONE:
|
||||
case NDR_COMPRESSION_MSZIP:
|
||||
case NDR_COMPRESSION_XPRESS:
|
||||
case NDR_COMPRESSION_XPRESS_HUFF_RAW:
|
||||
break;
|
||||
case NDR_COMPRESSION_MSZIP_CAB:
|
||||
generic_mszip_free(state);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr,
|
||||
enum ndr_compression_alg compression_alg,
|
||||
struct ndr_compression_state **state)
|
||||
@ -1112,28 +1129,10 @@ enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr,
|
||||
break;
|
||||
}
|
||||
|
||||
talloc_set_destructor(s, ndr_push_compression_state_free);
|
||||
|
||||
*state = s;
|
||||
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
void ndr_push_compression_state_free(struct ndr_compression_state *state)
|
||||
{
|
||||
if (state == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state->type) {
|
||||
case NDR_COMPRESSION_NONE:
|
||||
case NDR_COMPRESSION_MSZIP:
|
||||
case NDR_COMPRESSION_XPRESS:
|
||||
case NDR_COMPRESSION_XPRESS_HUFF_RAW:
|
||||
break;
|
||||
case NDR_COMPRESSION_MSZIP_CAB:
|
||||
generic_mszip_free(state);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
TALLOC_FREE(state);
|
||||
}
|
||||
|
@ -55,7 +55,6 @@ void ndr_pull_compression_state_free(struct ndr_compression_state *state);
|
||||
enum ndr_err_code ndr_push_compression_state_init(struct ndr_push *ndr,
|
||||
enum ndr_compression_alg compression_alg,
|
||||
struct ndr_compression_state **state);
|
||||
void ndr_push_compression_state_free(struct ndr_compression_state *state);
|
||||
|
||||
#undef _PRINTF_ATTRIBUTE
|
||||
#define _PRINTF_ATTRIBUTE(a1, a2)
|
||||
|
@ -527,7 +527,7 @@ sub ParseCompressionPushEnd($$$$$)
|
||||
my $alg = compression_alg($e, $l, $env);
|
||||
|
||||
$self->pidl("NDR_CHECK(ndr_push_compression_end($ndr, $comndr, $alg));");
|
||||
$self->pidl("NDR_CHECK(ndr_push_compression_state_free($ndr->cstate));");
|
||||
$self->pidl("TALLOC_FREE($ndr->cstate);");
|
||||
$self->deindent;
|
||||
$self->pidl("}");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user