summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-03-29 18:19:31 +0100
committerVolker Lendecke <vl@samba.org>2008-05-16 23:18:50 +0200
commite58729f0eaefb5659396f7f0ecb6239806ee275f (patch)
tree6e2371f524858c6afb26e2ce7174a8fc048871c3 /source3
parent08971abdad82ce6b57a85ce77a8cb7906b0dab2f (diff)
downloadsamba-e58729f0eaefb5659396f7f0ecb6239806ee275f.tar.gz
samba-e58729f0eaefb5659396f7f0ecb6239806ee275f.tar.bz2
samba-e58729f0eaefb5659396f7f0ecb6239806ee275f.zip
Simplify fake_file logic
(This used to be commit 93111ea0a1191e8547ad6cf112e2699d3bb3799b)
Diffstat (limited to 'source3')
-rw-r--r--source3/include/fake_file.h16
-rw-r--r--source3/include/ntquotas.h2
-rw-r--r--source3/include/smb.h2
-rw-r--r--source3/smbd/fake_file.c68
-rw-r--r--source3/smbd/ntquotas.c29
-rw-r--r--source3/smbd/nttrans.c2
6 files changed, 46 insertions, 73 deletions
diff --git a/source3/include/fake_file.h b/source3/include/fake_file.h
index d8a53894c6..93da106030 100644
--- a/source3/include/fake_file.h
+++ b/source3/include/fake_file.h
@@ -31,19 +31,9 @@ we now get the unix name --metze
#define FAKE_FILE_NAME_QUOTA_WIN32 "\\$Extend\\$Quota:$Q:$INDEX_ALLOCATION"
#define FAKE_FILE_NAME_QUOTA_UNIX "$Extend/$Quota:$Q:$INDEX_ALLOCATION"
-typedef struct _FAKE_FILE_HANDLE {
+struct fake_file_handle {
enum FAKE_FILE_TYPE type;
- TALLOC_CTX *mem_ctx;
- void *pd; /* for private data */
- void (*free_pd)(void **pd); /* free private_data */
-} FAKE_FILE_HANDLE;
-
-typedef struct _FAKE_FILE {
- const char *name;
- enum FAKE_FILE_TYPE type;
- void *(*init_pd)(TALLOC_CTX *men_ctx);
- void (*free_pd)(void **pd);
-} FAKE_FILE;
-
+ void *private_data;
+};
#endif /* _FAKE_FILE_H */
diff --git a/source3/include/ntquotas.h b/source3/include/ntquotas.h
index 8fd54e8df9..5b92b666c2 100644
--- a/source3/include/ntquotas.h
+++ b/source3/include/ntquotas.h
@@ -91,6 +91,6 @@ typedef struct _SMB_NTQUOTA_HANDLE {
#define CHECK_NTQUOTA_HANDLE_OK(fsp,conn) (FNUM_OK(fsp,conn) &&\
(fsp)->fake_file_handle &&\
((fsp)->fake_file_handle->type == FAKE_FILE_TYPE_QUOTA) &&\
- (fsp)->fake_file_handle->pd)
+ (fsp)->fake_file_handle->private_data)
#endif /*_NTQUOTAS_H */
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 1d6aba9b69..d6b026d013 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -515,7 +515,7 @@ typedef struct files_struct {
char *fsp_name;
struct vfs_fsp_data *vfs_extension;
- FAKE_FILE_HANDLE *fake_file_handle;
+ struct fake_file_handle *fake_file_handle;
struct notify_change_buf *notify;
diff --git a/source3/smbd/fake_file.c b/source3/smbd/fake_file.c
index 0a54c85cd0..565b557dd3 100644
--- a/source3/smbd/fake_file.c
+++ b/source3/smbd/fake_file.c
@@ -21,52 +21,52 @@
extern struct current_user current_user;
-static FAKE_FILE fake_files[] = {
+struct fake_file_type {
+ const char *name;
+ enum FAKE_FILE_TYPE type;
+ void *(*init_pd)(TALLOC_CTX *mem_ctx);
+};
+
+static struct fake_file_type fake_files[] = {
#ifdef WITH_QUOTAS
- {FAKE_FILE_NAME_QUOTA_UNIX, FAKE_FILE_TYPE_QUOTA, init_quota_handle, destroy_quota_handle},
+ {FAKE_FILE_NAME_QUOTA_UNIX, FAKE_FILE_TYPE_QUOTA, init_quota_handle},
#endif /* WITH_QUOTAS */
- {NULL, FAKE_FILE_TYPE_NONE, NULL, NULL }
+ {NULL, FAKE_FILE_TYPE_NONE, NULL}
};
/****************************************************************************
Create a fake file handle
****************************************************************************/
-static struct _FAKE_FILE_HANDLE *init_fake_file_handle(enum FAKE_FILE_TYPE type)
+static struct fake_file_handle *init_fake_file_handle(enum FAKE_FILE_TYPE type)
{
- TALLOC_CTX *mem_ctx = NULL;
- FAKE_FILE_HANDLE *fh = NULL;
+ struct fake_file_handle *fh = NULL;
int i;
- for (i=0;fake_files[i].name!=NULL;i++) {
+ for (i=0; fake_files[i].name!=NULL; i++) {
if (fake_files[i].type==type) {
- DEBUG(5,("init_fake_file_handle: for [%s]\n",fake_files[i].name));
-
- if ((mem_ctx=talloc_init("fake_file_handle"))==NULL) {
- DEBUG(0,("talloc_init(fake_file_handle) failed.\n"));
- return NULL;
- }
+ break;
+ }
+ }
- if ((fh =TALLOC_ZERO_P(mem_ctx, FAKE_FILE_HANDLE))==NULL) {
- DEBUG(0,("TALLOC_ZERO() failed.\n"));
- talloc_destroy(mem_ctx);
- return NULL;
- }
+ if (fake_files[i].name == NULL) {
+ return NULL;
+ }
- fh->type = type;
- fh->mem_ctx = mem_ctx;
+ DEBUG(5,("init_fake_file_handle: for [%s]\n",fake_files[i].name));
- if (fake_files[i].init_pd) {
- fh->pd = fake_files[i].init_pd(fh->mem_ctx);
- }
+ fh = talloc(NULL, struct fake_file_handle);
+ if (fh == NULL) {
+ DEBUG(0,("TALLOC_ZERO() failed.\n"));
+ return NULL;
+ }
- fh->free_pd = fake_files[i].free_pd;
+ fh->type = type;
- return fh;
- }
+ if (fake_files[i].init_pd) {
+ fh->private_data = fake_files[i].init_pd(fh);
}
-
- return NULL;
+ return fh;
}
/****************************************************************************
@@ -147,18 +147,12 @@ NTSTATUS open_fake_file(connection_struct *conn,
return NT_STATUS_OK;
}
-void destroy_fake_file_handle(FAKE_FILE_HANDLE **fh)
+void destroy_fake_file_handle(struct fake_file_handle **fh)
{
- if (!fh||!(*fh)) {
+ if (!fh) {
return;
}
-
- if ((*fh)->free_pd) {
- (*fh)->free_pd(&(*fh)->pd);
- }
-
- talloc_destroy((*fh)->mem_ctx);
- (*fh) = NULL;
+ TALLOC_FREE(*fh);
}
NTSTATUS close_fake_file(files_struct *fsp)
diff --git a/source3/smbd/ntquotas.c b/source3/smbd/ntquotas.c
index fcccf9d9fc..c616c494dc 100644
--- a/source3/smbd/ntquotas.c
+++ b/source3/smbd/ntquotas.c
@@ -222,6 +222,13 @@ int vfs_get_user_ntquota_list(files_struct *fsp, SMB_NTQUOTA_LIST **qt_list)
return 0;
}
+static int quota_handle_destructor(SMB_NTQUOTA_HANDLE *handle)
+{
+ if (handle->quota_list)
+ free_ntquota_list(&handle->quota_list);
+ return 0;
+}
+
void *init_quota_handle(TALLOC_CTX *mem_ctx)
{
SMB_NTQUOTA_HANDLE *qt_handle;
@@ -235,24 +242,6 @@ void *init_quota_handle(TALLOC_CTX *mem_ctx)
return NULL;
}
- return (void *)qt_handle;
-}
-
-void destroy_quota_handle(void **pqt_handle)
-{
- SMB_NTQUOTA_HANDLE *qt_handle = NULL;
- if (!pqt_handle||!(*pqt_handle))
- return;
-
- qt_handle = (SMB_NTQUOTA_HANDLE *)(*pqt_handle);
-
-
- if (qt_handle->quota_list)
- free_ntquota_list(&qt_handle->quota_list);
-
- qt_handle->quota_list = NULL;
- qt_handle->tmp_list = NULL;
- qt_handle = NULL;
-
- return;
+ talloc_set_destructor(qt_handle, quota_handle_destructor);
+ return (void *)qt_handle;
}
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index b5546ea1e1..cbe1299cf7 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -2065,7 +2065,7 @@ static void call_nt_transact_get_user_quota(connection_struct *conn,
/* the NULL pointer checking for fsp->fake_file_handle->pd
* is done by CHECK_NTQUOTA_HANDLE_OK()
*/
- qt_handle = (SMB_NTQUOTA_HANDLE *)fsp->fake_file_handle->pd;
+ qt_handle = (SMB_NTQUOTA_HANDLE *)fsp->fake_file_handle->private_data;
level = SVAL(params,2);