summaryrefslogtreecommitdiff
path: root/source3/rpc_parse/parse_prs.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2005-12-03 06:46:46 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:05:42 -0500
commitd1f91f7c723733113b4e9792042101c80dfc064c (patch)
tree51943d49138b8e91334756ce602849ed27bbb1c5 /source3/rpc_parse/parse_prs.c
parent03b77baa6f20b8eaa450e67b0e0e1ad6f5b686be (diff)
downloadsamba-d1f91f7c723733113b4e9792042101c80dfc064c.tar.gz
samba-d1f91f7c723733113b4e9792042101c80dfc064c.tar.bz2
samba-d1f91f7c723733113b4e9792042101c80dfc064c.zip
r12043: It's amazing the warnings you find when compiling on a 64-bit
box with gcc4 and -O6... Fix a bunch of C99 dereferencing type-punned pointer will break strict-aliasing rules errors. Also added prs_int32 (not uint32...) as it's needed in one place. Find places where prs_uint32 was being used to marshall/unmarshall a time_t (a big no no on 64-bits). More warning fixes to come. Thanks to Volker for nudging me to compile like this. Jeremy. (This used to be commit c65b752604f8f58abc4e7ae8514dc2c7f086271c)
Diffstat (limited to 'source3/rpc_parse/parse_prs.c')
-rw-r--r--source3/rpc_parse/parse_prs.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/source3/rpc_parse/parse_prs.c b/source3/rpc_parse/parse_prs.c
index 77f0e6d5c8..7c84ee800b 100644
--- a/source3/rpc_parse/parse_prs.c
+++ b/source3/rpc_parse/parse_prs.c
@@ -708,6 +708,35 @@ BOOL prs_uint32(const char *name, prs_struct *ps, int depth, uint32 *data32)
}
/*******************************************************************
+ Stream an int32.
+ ********************************************************************/
+
+BOOL prs_int32(const char *name, prs_struct *ps, int depth, int32 *data32)
+{
+ char *q = prs_mem_get(ps, sizeof(int32));
+ if (q == NULL)
+ return False;
+
+ if (UNMARSHALLING(ps)) {
+ if (ps->bigendian_data)
+ *data32 = RIVALS(q,0);
+ else
+ *data32 = IVALS(q,0);
+ } else {
+ if (ps->bigendian_data)
+ RSIVALS(q,0,*data32);
+ else
+ SIVALS(q,0,*data32);
+ }
+
+ DEBUG(5,("%s%04x %s: %08x\n", tab_depth(depth), ps->data_offset, name, *data32));
+
+ ps->data_offset += sizeof(int32);
+
+ return True;
+}
+
+/*******************************************************************
Stream a NTSTATUS
********************************************************************/