summaryrefslogtreecommitdiff
path: root/source4/ntvfs
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-27 01:36:19 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:20 -0500
commit5b44130afad1bb1764d986de3ef0e8e04b0e7357 (patch)
treeafea820fdfd1021b5ee55b2fa37ba1b32d334e46 /source4/ntvfs
parentf095a8e748a87de9f4cde117df13e8dccd8aeaa9 (diff)
downloadsamba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.gz
samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.bz2
samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.zip
r2671: we're getting too many errors caused by the talloc_realloc() API not
taking a context (so when you pass a NULL pointer you end up with memory in a top level context). Fixed it by changing the API to take a context. The context is only used if the pointer you are reallocing is NULL. (This used to be commit 8dc23821c9f54b2f13049b5e608a0cafb81aa540)
Diffstat (limited to 'source4/ntvfs')
-rw-r--r--source4/ntvfs/ipc/ipc_rap.c7
-rw-r--r--source4/ntvfs/ntvfs_base.c9
-rw-r--r--source4/ntvfs/posix/pvfs_dirlist.c7
-rw-r--r--source4/ntvfs/simple/svfs.h2
-rw-r--r--source4/ntvfs/simple/svfs_util.c4
5 files changed, 11 insertions, 18 deletions
diff --git a/source4/ntvfs/ipc/ipc_rap.c b/source4/ntvfs/ipc/ipc_rap.c
index 32b2fa2181..840c389d6c 100644
--- a/source4/ntvfs/ipc/ipc_rap.c
+++ b/source4/ntvfs/ipc/ipc_rap.c
@@ -178,9 +178,10 @@ static NTSTATUS rap_push_string(struct ndr_push *data_push,
NDR_CHECK(ndr_push_uint16(data_push, heap->offset));
NDR_CHECK(ndr_push_uint16(data_push, 0));
- heap->strings = talloc_realloc(heap->strings,
- sizeof(*heap->strings) *
- (heap->num_strings + 1));
+ heap->strings = talloc_realloc_p(heap->mem_ctx,
+ heap->strings,
+ const char *,
+ heap->num_strings + 1);
if (heap->strings == NULL)
return NT_STATUS_NO_MEMORY;
diff --git a/source4/ntvfs/ntvfs_base.c b/source4/ntvfs/ntvfs_base.c
index 03873ce697..72f4759cd5 100644
--- a/source4/ntvfs/ntvfs_base.c
+++ b/source4/ntvfs/ntvfs_base.c
@@ -153,11 +153,8 @@ NTSTATUS ntvfs_init_connection(struct smbsrv_request *req)
*/
void ntvfs_set_private(struct smbsrv_tcon *tcon, int depth, void *value)
{
- if (!tcon->ntvfs_private_list) {
- tcon->ntvfs_private_list = talloc_array_p(tcon, void *, depth+1);
- } else {
- tcon->ntvfs_private_list = talloc_realloc_p(tcon->ntvfs_private_list,
- void *, depth+1);
- }
+ tcon->ntvfs_private_list = talloc_realloc_p(tcon,
+ tcon->ntvfs_private_list,
+ void *, depth+1);
tcon->ntvfs_private_list[depth] = value;
}
diff --git a/source4/ntvfs/posix/pvfs_dirlist.c b/source4/ntvfs/posix/pvfs_dirlist.c
index 0137424dc4..85c307a1b2 100644
--- a/source4/ntvfs/posix/pvfs_dirlist.c
+++ b/source4/ntvfs/posix/pvfs_dirlist.c
@@ -89,11 +89,6 @@ NTSTATUS pvfs_list(struct pvfs_state *pvfs, struct pvfs_filename *name, struct p
return NT_STATUS_NO_MEMORY;
}
- dir->names = talloc(dir, 0);
- if (!dir->names) {
- return NT_STATUS_NO_MEMORY;
- }
-
odir = opendir(name->full_name);
if (!odir) {
return pvfs_map_errno(pvfs, errno);
@@ -110,7 +105,7 @@ NTSTATUS pvfs_list(struct pvfs_state *pvfs, struct pvfs_filename *name, struct p
if (dir->count >= allocated) {
allocated = (allocated + 100) * 1.2;
- dir->names = talloc_realloc_p(dir->names, const char *, allocated);
+ dir->names = talloc_realloc_p(dir, dir->names, const char *, allocated);
if (!dir->names) {
closedir(odir);
return NT_STATUS_NO_MEMORY;
diff --git a/source4/ntvfs/simple/svfs.h b/source4/ntvfs/simple/svfs.h
index 33b7cb7011..d3bafb42e3 100644
--- a/source4/ntvfs/simple/svfs.h
+++ b/source4/ntvfs/simple/svfs.h
@@ -17,7 +17,7 @@ struct svfs_private {
struct svfs_dir {
uint_t count;
char *unix_dir;
- struct {
+ struct svfs_dirfile {
char *name;
struct stat st;
} *files;
diff --git a/source4/ntvfs/simple/svfs_util.c b/source4/ntvfs/simple/svfs_util.c
index 2e64920fc8..b6b7171487 100644
--- a/source4/ntvfs/simple/svfs_util.c
+++ b/source4/ntvfs/simple/svfs_util.c
@@ -61,7 +61,7 @@ struct svfs_dir *svfs_list_unix(TALLOC_CTX *mem_ctx, struct smbsrv_request *req,
uint_t allocated = 0;
char *low_mask;
- dir = talloc(mem_ctx, sizeof(struct svfs_dir));
+ dir = talloc_p(mem_ctx, struct svfs_dir);
if (!dir) { return NULL; }
dir->count = 0;
@@ -105,7 +105,7 @@ struct svfs_dir *svfs_list_unix(TALLOC_CTX *mem_ctx, struct smbsrv_request *req,
if (dir->count >= allocated) {
allocated = (allocated + 100) * 1.2;
- dir->files = talloc_realloc(dir->files, allocated * sizeof(dir->files[0]));
+ dir->files = talloc_realloc_p(dir, dir->files, struct svfs_dirfile, allocated);
if (!dir->files) {
closedir(odir);
return NULL;