r2987: added support for signed 32 bit integers in pidl
authorAndrew Tridgell <tridge@samba.org>
Fri, 15 Oct 2004 07:19:09 +0000 (07:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:54 +0000 (12:59 -0500)
source/build/pidl/util.pm
source/librpc/ndr/ndr_basic.c

index e3f3b0d40db452239339e1ed2ff2c0934342e6d6..5934f8a7e1484e1ff116d125657d29068a4bba29 100644 (file)
@@ -219,6 +219,7 @@ sub type_align($)
     return 8, if ($type eq "HYPER_T");
     return 2, if ($type eq "wchar_t");
     return 4, if ($type eq "DATA_BLOB");
+    return 4, if ($type eq "int32");
 
     # it must be an external type - all we can do is guess 
     return 4;
index 04b788acf3f3faf30f4e51748b2d28016bfd20a0..61ad722cb15859b35e98b9475421b7643836afbf 100644 (file)
 #define NDR_BE(ndr) (((ndr)->flags & (LIBNDR_FLAG_BIGENDIAN|LIBNDR_FLAG_LITTLE_ENDIAN)) == LIBNDR_FLAG_BIGENDIAN)
 #define NDR_SVAL(ndr, ofs) (NDR_BE(ndr)?RSVAL(ndr->data,ofs):SVAL(ndr->data,ofs))
 #define NDR_IVAL(ndr, ofs) (NDR_BE(ndr)?RIVAL(ndr->data,ofs):IVAL(ndr->data,ofs))
+#define NDR_IVALS(ndr, ofs) (NDR_BE(ndr)?RIVALS(ndr->data,ofs):IVALS(ndr->data,ofs))
 #define NDR_SSVAL(ndr, ofs, v) do { if (NDR_BE(ndr))  { RSSVAL(ndr->data,ofs,v); } else SSVAL(ndr->data,ofs,v); } while (0)
 #define NDR_SIVAL(ndr, ofs, v) do { if (NDR_BE(ndr))  { RSIVAL(ndr->data,ofs,v); } else SIVAL(ndr->data,ofs,v); } while (0)
+#define NDR_SIVALS(ndr, ofs, v) do { if (NDR_BE(ndr))  { RSIVALS(ndr->data,ofs,v); } else SIVALS(ndr->data,ofs,v); } while (0)
 
 
 /*
@@ -90,6 +92,18 @@ NTSTATUS ndr_pull_uint32(struct ndr_pull *ndr, uint32_t *v)
        return NT_STATUS_OK;
 }
 
+/*
+  parse a int32_t
+*/
+NTSTATUS ndr_pull_int32(struct ndr_pull *ndr, int32_t *v)
+{
+       NDR_PULL_ALIGN(ndr, 4);
+       NDR_PULL_NEED_BYTES(ndr, 4);
+       *v = NDR_IVALS(ndr, ndr->offset);
+       ndr->offset += 4;
+       return NT_STATUS_OK;
+}
+
 /*
   parse a pointer
 */
@@ -284,6 +298,18 @@ NTSTATUS ndr_push_uint32(struct ndr_push *ndr, uint32_t v)
        return NT_STATUS_OK;
 }
 
+/*
+  push a int32_t
+*/
+NTSTATUS ndr_push_int32(struct ndr_push *ndr, int32_t v)
+{
+       NDR_PUSH_ALIGN(ndr, 4);
+       NDR_PUSH_NEED_BYTES(ndr, 4);
+       NDR_SIVALS(ndr, ndr->offset, v);
+       ndr->offset += 4;
+       return NT_STATUS_OK;
+}
+
 /*
   push a uint64
 */
@@ -847,6 +873,11 @@ void ndr_print_uint32(struct ndr_print *ndr, const char *name, uint32_t v)
        ndr->print(ndr, "%-25s: 0x%08x (%u)", name, v, v);
 }
 
+void ndr_print_int32(struct ndr_print *ndr, const char *name, int32_t v)
+{
+       ndr->print(ndr, "%-25s: %d", name, v);
+}
+
 void ndr_print_uint64(struct ndr_print *ndr, const char *name, uint64_t v)
 {
        ndr->print(ndr, "%-25s: 0x%08x%08x", name, (uint32_t)(v >> 32), (uint32_t)(v & 0xFFFFFFFF));