--- /dev/null
+#
+# Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
+# Written by David Howells (dhowells@redhat.com)
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public Licence
+# as published by the Free Software Foundation; either version
+# 2 of the Licence, or (at your option) any later version.
+#
+
+###############################################################################
+#
+# Emit structure encoders and decoders
+#
+###############################################################################
+sub emit_struct_encdec ($@) {
+ my ($struct, @members) = @_;
+
+ # Dump the banner comment block
+ print RXOUT "\n";
+ print RXOUT @{shift @members};
+
+ # Write an encoding function
+ print RXOUT "static net_xdr_t *rxgen_encode_", $struct, "(net_xdr_t *xdr, const struct $struct *p)\n";
+ print RXOUT "{\n";
+
+ foreach my $m (@members) {
+ my ($type, $name, $array_size, $max_size) = @{$m};
+ if ($array_size != -1) {
+ print RXOUT "\tint i;\n\n";
+ last;
+ }
+ }
+
+ foreach my $m (@members) {
+ my ($type, $name, $array_size, $max_size) = @{$m};
+ if ($array_size != -1) {
+ print RXOUT "\tfor (i = 0; i < ", $array_size, "; i++)\n";
+ print RXOUT "\t\t*xdr++ = htonl(p->", $name, "[i]);\n";
+ } else {
+ print RXOUT "\t*xdr++ = htonl(p->", $name, ");\n";
+ }
+ }
+
+ print RXOUT "\treturn xdr;\n";
+ print RXOUT "}\n";
+ print RXOUT "\n";
+
+ # Write a decoding function
+ print RXOUT "static const net_xdr_t *rxgen_decode_", $struct, "(struct $struct *p, const net_xdr_t *xdr)\n";
+ print RXOUT "{\n";
+
+ foreach my $m (@members) {
+ my ($type, $name, $array_size, $max_size) = @{$m};
+ if ($array_size != -1) {
+ print RXOUT "\tint i;\n\n";
+ last;
+ }
+ }
+
+ foreach my $m (@members) {
+ my ($type, $name, $array_size, $max_size) = @{$m};
+ if ($array_size != -1) {
+ print RXOUT "\tfor (i = 0; i < ", $array_size, "; i++)\n";
+ print RXOUT "\t\tp->", $name, "[i] = ntohl(*xdr++);\n";
+ } else {
+ print RXOUT "\tp->", $name, " = ntohl(*xdr++);\n";
+ }
+ }
+
+ print RXOUT "\treturn xdr;\n";
+ print RXOUT "}\n";
+ print RXOUT "\n";
+ print RXOUT "/* XDR size ", $struct_sizes{$struct}, " */\n"
+}
+
+1;
use strict;
use lib "rxgen";
+use emit_c_struct;
use emit_py_types;
use emit_py_sync_funcs;
use emit_py_module;
print PYOUT "#include <arpa/inet.h>\n";
print PYOUT "#include \"py_rxgen.h\"\n";
-###############################################################################
-#
-# Emit structure encoders and decoders
-#
-###############################################################################
-sub emit_struct_encdec ($@) {
- my ($struct, @members) = @_;
-
- # Dump the banner comment block
- print RXOUT "\n";
- print RXOUT @{shift @members};
-
- # Write an encoding function
- print RXOUT "static net_xdr_t *rxgen_encode_", $struct, "(net_xdr_t *xdr, const struct $struct *p)\n";
- print RXOUT "{\n";
-
- foreach my $m (@members) {
- my ($type, $name, $array_size, $max_size) = @{$m};
- if ($array_size != -1) {
- print RXOUT "\tint i;\n\n";
- last;
- }
- }
-
- foreach my $m (@members) {
- my ($type, $name, $array_size, $max_size) = @{$m};
- if ($array_size != -1) {
- print RXOUT "\tfor (i = 0; i < ", $array_size, "; i++)\n";
- print RXOUT "\t\t*xdr++ = htonl(p->", $name, "[i]);\n";
- } else {
- print RXOUT "\t*xdr++ = htonl(p->", $name, ");\n";
- }
- }
-
- print RXOUT "\treturn xdr;\n";
- print RXOUT "}\n";
- print RXOUT "\n";
-
- # Write a decoding function
- print RXOUT "static const net_xdr_t *rxgen_decode_", $struct, "(struct $struct *p, const net_xdr_t *xdr)\n";
- print RXOUT "{\n";
-
- foreach my $m (@members) {
- my ($type, $name, $array_size, $max_size) = @{$m};
- if ($array_size != -1) {
- print RXOUT "\tint i;\n\n";
- last;
- }
- }
-
- foreach my $m (@members) {
- my ($type, $name, $array_size, $max_size) = @{$m};
- if ($array_size != -1) {
- print RXOUT "\tfor (i = 0; i < ", $array_size, "; i++)\n";
- print RXOUT "\t\tp->", $name, "[i] = ntohl(*xdr++);\n";
- } else {
- print RXOUT "\tp->", $name, " = ntohl(*xdr++);\n";
- }
- }
-
- print RXOUT "\treturn xdr;\n";
- print RXOUT "}\n";
- print RXOUT "\n";
- print RXOUT "/* XDR size ", $struct_sizes{$struct}, " */\n"
-}
-
foreach my $s (@structs) {
my @members = @{$s};
my $struct = shift @members;