pidl: Use portable format specifiers
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Mon, 10 May 2021 22:27:33 +0000 (10:27 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 27 Sep 2023 02:43:28 +0000 (02:43 +0000)
Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index a4d3eb5e0a37c47fa5a292a107ddcbfe170d39e1..1ec037628a728d3b04f17bfdc5ba378e65a041c1 100644 (file)
@@ -438,7 +438,7 @@ sub ParseArrayPullHeader($$$$$$)
        if ($array_length ne $array_size) {
                $self->pidl("if ($array_length > $array_size) {");
                $self->indent;
-               $self->pidl("return ndr_pull_error($ndr, NDR_ERR_ARRAY_SIZE, \"Bad array size %u should exceed array length %u\", $array_size, $array_length);");
+               $self->pidl("return ndr_pull_error($ndr, NDR_ERR_ARRAY_SIZE, \"Bad array size %\"PRIu32\": should exceed array length %\"PRIu32\"\", $array_size, $array_length);");
                $self->deindent;
                $self->pidl("}");
        }
@@ -926,7 +926,7 @@ sub ParseElementPrint($$$$$)
                        } else {
                                my $counter = "cntr_$e->{NAME}_$l->{LEVEL_INDEX}";
 
-                               $self->pidl("$ndr->print($ndr, \"\%s: ARRAY(\%d)\", \"$e->{NAME}\", (int)$length);");
+                               $self->pidl("$ndr->print($ndr, \"%s: ARRAY(%\"PRIu32\")\", \"$e->{NAME}\", (uint32_t)$length);");
                                $self->pidl("$ndr->depth++;");
                                $self->pidl("for ($counter = 0; $counter < ($length); $counter++) {");
                                $self->indent;
@@ -1968,7 +1968,7 @@ sub ParseUnionPushPrimitives($$$$)
        }
        if (! $have_default) {
                $self->pidl("default:");
-               $self->pidl("\treturn ndr_push_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value \%u\", level);");
+               $self->pidl("\treturn ndr_push_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %\"PRIu32, level);");
        }
        $self->deindent;
        $self->pidl("}");
@@ -2003,7 +2003,7 @@ sub ParseUnionPushDeferred($$$$)
        }
        if (! $have_default) {
                $self->pidl("default:");
-               $self->pidl("\treturn ndr_push_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value \%u\", level);");
+               $self->pidl("\treturn ndr_push_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %\"PRIu32, level);");
        }
        $self->deindent;
        $self->pidl("}");
@@ -2099,9 +2099,17 @@ sub ParseUnionPullPrimitives($$$$$)
                        $self->pidl("NDR_CHECK(ndr_pull_union_align($ndr, $e->{ALIGN}));");
                }
 
+               my $data_type = mapTypeName($switch_type);
+               my $fmt = mapTypeSpecifier($data_type);
+
+               if (!defined($fmt)) {
+                       $data_type = "int";
+                       $fmt = "%d";
+               }
+
                $self->pidl("NDR_CHECK(ndr_pull_$switch_type($ndr, NDR_SCALARS, &_level));");
                $self->pidl("if (_level != level) {"); 
-               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %u for $varname at \%s\", _level, __location__);");
+               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %$fmt for $varname at \%s\", ($data_type)_level, __location__);");
                $self->pidl("}");
        }
 
@@ -2138,7 +2146,7 @@ sub ParseUnionPullPrimitives($$$$$)
        }
        if (! $have_default) {
                $self->pidl("default:");
-               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value \%u at \%s\", level, __location__);");
+               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %\"PRIu32\" at %s\", level, __location__);");
        }
        $self->deindent;
        $self->pidl("}");
@@ -2172,7 +2180,7 @@ sub ParseUnionPullDeferred($$$$)
        }
        if (! $have_default) {
                $self->pidl("default:");
-               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value \%u at \%s\", level, __location__);");
+               $self->pidl("\treturn ndr_pull_error($ndr, NDR_ERR_BAD_SWITCH, \"Bad switch value %\"PRIu32\" at %s\", level, __location__);");
        }
        $self->deindent;
        $self->pidl("}");