Author: metze
Date: 2006-05-16 16:28:36 +0000 (Tue, 16 May 2006)
New Revision: 15638

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15638

Log:
add a usefull macro to get a pointer the smb_handle union
of smb_open, as it's not nicely alligned for all levels,

If someone has an idea for a better solution where we can access
it via op->generic.out.file.* please let me know:-)

metze
Modified:
   branches/SAMBA_4_0/source/libcli/raw/interfaces.h


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/raw/interfaces.h
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/interfaces.h   2006-05-16 16:07:41 UTC 
(rev 15637)
+++ branches/SAMBA_4_0/source/libcli/raw/interfaces.h   2006-05-16 16:28:36 UTC 
(rev 15638)
@@ -1173,6 +1173,48 @@
 
 /* union for open() backend call */
 union smb_open {
+/* 
+ * because the *.out.file structs are not aligned to the same offset for each 
level
+ * we provide a hepler macro that should be used to find the current 
smb_handle structure
+ */
+#define SMB_OPEN_OUT_FILE(op, file) do { \
+       switch (op->generic.level) { \
+       case RAW_OPEN_OPEN: \
+               file = &op->openold.out.file; \
+               break; \
+       case RAW_OPEN_OPENX: \
+               file = &op->openx.out.file; \
+               break; \
+       case RAW_OPEN_MKNEW: \
+               file = &op->mknew.out.file; \
+               break; \
+       case RAW_OPEN_CREATE: \
+               file = &op->create.out.file; \
+               break; \
+       case RAW_OPEN_CTEMP: \
+               file = &op->ctemp.out.file; \
+               break; \
+       case RAW_OPEN_SPLOPEN: \
+               file = &op->splopen.out.file; \
+               break; \
+       case RAW_OPEN_NTCREATEX: \
+               file = &op->ntcreatex.out.file; \
+               break; \
+       case RAW_OPEN_T2OPEN: \
+               file = &op->t2open.out.file; \
+               break; \
+       case RAW_OPEN_NTTRANS_CREATE: \
+               file = &op->nttrans.out.file; \
+               break; \
+       case RAW_OPEN_OPENX_READX: \
+               file = &op->openxreadx.out.file; \
+               break; \
+       default: \
+               /* this must be a programmer error */ \
+               file = NULL; \
+               break; \
+       } \
+} while (0)
        /* SMBNTCreateX interface */
        struct {
                enum smb_open_level level;
@@ -1212,7 +1254,7 @@
                        uint16_t ipc_state;
                        uint8_t  is_directory;
                } out;
-       } ntcreatex, generic;
+       } ntcreatex, nttrans, generic;
 
        /* TRANS2_OPEN interface */
        struct {

Reply via email to