summaryrefslogtreecommitdiff
path: root/source4/build
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-27 06:16:59 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:09:15 -0500
commit3dd17f128831e09c230a8d56e34495d3b31dbacb (patch)
tree962c0357cf7e14bf2c7950461185d0a9d35b1c96 /source4/build
parent00169404eddd859262ef6f0684143efbedcd7bf7 (diff)
downloadsamba-3dd17f128831e09c230a8d56e34495d3b31dbacb.tar.gz
samba-3dd17f128831e09c230a8d56e34495d3b31dbacb.tar.bz2
samba-3dd17f128831e09c230a8d56e34495d3b31dbacb.zip
r5034: - added a type mapping function in pidl, so the type names in our IDL
files don't need to match the type names in the generated headers - with this type mapping we no longer need definitions for the deprecated "int32", "uint8" etc form of types. We can now force everyone to use the standard types int32_t, uint8_t etc. - fixed all the code that used the deprecated types - converted the IDL types "int64" and "uint64" to "dlong" and "udlong". These are the 4 byte aligned 64 bit integers that Microsoft internally define as two 32 bit integers in a structure. After discussions with Ronnie Sahlberg we decided that calling these "int64" was confusing, as it implied a true 8 byte aligned type - fixed all the cases where we incorrectly used things like "NTTIME_hyper" in our C code. The generated API now uses a NTTIME for those. The fact that it is hyper-aligned on the wire is not relevant to the API, and should remain just a IDL property (This used to be commit f86521677d7ff16bdc4815f9524e5286026f10f3)
Diffstat (limited to 'source4/build')
-rw-r--r--source4/build/pidl/eparser.pm4
-rw-r--r--source4/build/pidl/header.pm4
-rw-r--r--source4/build/pidl/parser.pm2
-rw-r--r--source4/build/pidl/util.pm45
4 files changed, 43 insertions, 12 deletions
diff --git a/source4/build/pidl/eparser.pm b/source4/build/pidl/eparser.pm
index f6403992ad..1893a31573 100644
--- a/source4/build/pidl/eparser.pm
+++ b/source4/build/pidl/eparser.pm
@@ -445,10 +445,6 @@ sub RewriteHeader($$$)
s/^\#include\ \"librpc\/gen_ndr\/ndr_(.*?).h\"$
/\#include \"packet-dcerpc-$1.h\"/smgx;
- # Convert samba fixed width types to stdint types
-
- s/((u)?int)([0-9]+)/$1$3_t/smg;
-
# Rename struct ndr_pull to struct pidl_pull
s/struct ndr_pull \*ndr/struct pidl_pull \*ndr/smg;
diff --git a/source4/build/pidl/header.pm b/source4/build/pidl/header.pm
index 51983460ed..c1fb5e6619 100644
--- a/source4/build/pidl/header.pm
+++ b/source4/build/pidl/header.pm
@@ -191,7 +191,7 @@ sub HeaderType($$$)
my $bitmap = util::get_bitmap($e->{TYPE});
$res .= util::bitmap_type_decl($bitmap);
} elsif (util::is_scalar_type($data)) {
- $res .= "$data";
+ $res .= util::map_type($data);
} elsif (util::has_property($e, "switch_is")) {
$res .= "union $data";
} else {
@@ -349,7 +349,7 @@ sub HeaderFunction($)
HeaderFunctionInOut($fn, "out");
if ($fn->{RETURN_TYPE} && $fn->{RETURN_TYPE} ne "void") {
tabs();
- $res .= "$fn->{RETURN_TYPE} result;\n";
+ $res .= util::map_type($fn->{RETURN_TYPE}) . " result;\n";
}
$tab_depth--;
tabs();
diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm
index 1368099403..ac29fe0285 100644
--- a/source4/build/pidl/parser.pm
+++ b/source4/build/pidl/parser.pm
@@ -470,7 +470,7 @@ sub ParseElementPullSwitch($$$$)
if (!defined $utype ||
!util::has_property($utype, "nodiscriminant")) {
my $e2 = find_sibling($e, $switch);
- my $type_decl = $e2->{TYPE};
+ my $type_decl = util::map_type($e2->{TYPE});
pidl "\tif (($ndr_flags) & NDR_SCALARS) {\n";
if (util::is_enum($e2->{TYPE})) {
$type_decl = util::enum_type_decl($e2);
diff --git a/source4/build/pidl/util.pm b/source4/build/pidl/util.pm
index 48fd9469b8..277c6c0253 100644
--- a/source4/build/pidl/util.pm
+++ b/source4/build/pidl/util.pm
@@ -259,7 +259,7 @@ sub get_bitmap($)
return $bitmap_list{$name};
}
-sub bitmap_type_decl($)
+sub bitmap_type_fn($)
{
my $bitmap = shift;
@@ -273,12 +273,13 @@ sub bitmap_type_decl($)
return "uint32";
}
-sub bitmap_type_fn($)
+sub bitmap_type_decl($)
{
my $bitmap = shift;
- return bitmap_type_decl($bitmap);
+ return map_type(bitmap_type_fn($bitmap));
}
+
my %type_alignments =
(
"char" => 1,
@@ -291,8 +292,8 @@ my %type_alignments =
"long" => 4,
"int32" => 4,
"uint32" => 4,
- "int64" => 4,
- "uint64" => 4,
+ "dlong" => 4,
+ "udlong" => 4,
"NTTIME" => 4,
"NTTIME_1sec" => 4,
"time_t" => 4,
@@ -301,6 +302,7 @@ my %type_alignments =
"WERROR" => 4,
"boolean32" => 4,
"unsigned32" => 4,
+ "hyper" => 8,
"HYPER_T" => 8,
"NTTIME_hyper" => 8
);
@@ -519,5 +521,38 @@ sub make_str($)
return "\"" . $str . "\"";
}
+
+# provide mappings between IDL base types and types in our headers
+my %type_mappings =
+ (
+ "int8" => "int8_t",
+ "uint8" => "uint8_t",
+ "short" => "int16_t",
+ "wchar_t" => "uint16_t",
+ "int16" => "int16_t",
+ "uint16" => "uint16_t",
+ "int32" => "int32_t",
+ "uint32" => "uint32_t",
+ "int64" => "int64_t",
+ "uint64" => "uint64_t",
+ "dlong" => "int64_t",
+ "udlong" => "uint64_t",
+ "hyper" => "uint64_t",
+ "HYPER_T" => "uint64_t",
+ "hyper" => "uint64_t",
+ "NTTIME_1sec" => "NTTIME",
+ "NTTIME_hyper" => "NTTIME"
+ );
+
+# map from a IDL type to a C header type
+sub map_type($)
+{
+ my $name = shift;
+ if (my $ret = $type_mappings{$name}) {
+ return $ret;
+ }
+ return $name;
+}
+
1;