1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

struct make "struct shadow_copy_data" its own talloc context

This commit is contained in:
Volker Lendecke 2011-05-30 12:11:53 +02:00
parent 0ec9a90c29
commit d77854fbb2
4 changed files with 7 additions and 19 deletions

View File

@ -78,7 +78,6 @@
typedef char SHADOW_COPY_LABEL[25];
struct shadow_copy_data {
TALLOC_CTX *mem_ctx;
/* Total number of shadow volumes currently mounted */
uint32 num_volumes;
/* Concatenated list of labels */

View File

@ -253,7 +253,7 @@ static int shadow_copy_get_shadow_copy_data(vfs_handle_struct *handle,
continue;
}
tlabels = (SHADOW_COPY_LABEL *)TALLOC_REALLOC(shadow_copy_data->mem_ctx,
tlabels = (SHADOW_COPY_LABEL *)TALLOC_REALLOC(shadow_copy_data,
shadow_copy_data->labels,
(shadow_copy_data->num_volumes+1)*sizeof(SHADOW_COPY_LABEL));
if (tlabels == NULL) {

View File

@ -918,7 +918,7 @@ static int shadow_copy2_get_shadow_copy2_data(vfs_handle_struct *handle,
continue;
}
tlabels = talloc_realloc(shadow_copy2_data->mem_ctx,
tlabels = talloc_realloc(shadow_copy2_data,
shadow_copy2_data->labels,
SHADOW_COPY_LABEL, shadow_copy2_data->num_volumes+1);
if (tlabels == NULL) {

View File

@ -2215,7 +2215,6 @@ static void call_nt_transact_ioctl(connection_struct *conn,
* it be deallocated when we return.
*/
struct shadow_copy_data *shadow_data = NULL;
TALLOC_CTX *shadow_mem_ctx = NULL;
bool labels = False;
uint32 labels_data_count = 0;
uint32 i;
@ -2236,29 +2235,19 @@ static void call_nt_transact_ioctl(connection_struct *conn,
labels = True;
}
shadow_mem_ctx = talloc_init("SHADOW_COPY_DATA");
if (shadow_mem_ctx == NULL) {
DEBUG(0,("talloc_init(SHADOW_COPY_DATA) failed!\n"));
reply_nterror(req, NT_STATUS_NO_MEMORY);
return;
}
shadow_data = TALLOC_ZERO_P(shadow_mem_ctx,
shadow_data = TALLOC_ZERO_P(talloc_tos(),
struct shadow_copy_data);
if (shadow_data == NULL) {
DEBUG(0,("TALLOC_ZERO() failed!\n"));
talloc_destroy(shadow_mem_ctx);
reply_nterror(req, NT_STATUS_NO_MEMORY);
return;
}
shadow_data->mem_ctx = shadow_mem_ctx;
/*
* Call the VFS routine to actually do the work.
*/
if (SMB_VFS_GET_SHADOW_COPY_DATA(fsp, shadow_data, labels)!=0) {
talloc_destroy(shadow_data->mem_ctx);
TALLOC_FREE(shadow_data);
if (errno == ENOSYS) {
DEBUG(5,("FSCTL_GET_SHADOW_COPY_DATA: connectpath %s, not supported.\n",
conn->connectpath));
@ -2283,14 +2272,14 @@ static void call_nt_transact_ioctl(connection_struct *conn,
if (max_data_count<data_count) {
DEBUG(0,("FSCTL_GET_SHADOW_COPY_DATA: max_data_count(%u) too small (%u) bytes needed!\n",
max_data_count,data_count));
talloc_destroy(shadow_data->mem_ctx);
TALLOC_FREE(shadow_data);
reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
return;
}
pdata = nttrans_realloc(ppdata, data_count);
if (pdata == NULL) {
talloc_destroy(shadow_data->mem_ctx);
TALLOC_FREE(shadow_data);
reply_nterror(req, NT_STATUS_NO_MEMORY);
return;
}
@ -2323,7 +2312,7 @@ static void call_nt_transact_ioctl(connection_struct *conn,
}
}
talloc_destroy(shadow_data->mem_ctx);
TALLOC_FREE(shadow_data);
send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
pdata, data_count);