return rv;
}
-static int
-remoteDispatchDomainPinVcpu(struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_pin_vcpu_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- virDomainPtr dom = NULL;
- int rv = -1;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (args->cpumap.cpumap_len > REMOTE_CPUMAP_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("cpumap_len > REMOTE_CPUMAP_MAX"));
- goto cleanup;
- }
-
- if (virDomainPinVcpu(dom, args->vcpu,
- (unsigned char *) args->cpumap.cpumap_val,
- args->cpumap.cpumap_len) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
-static int
-remoteDispatchDomainPinVcpuFlags(struct qemud_server *server ATTRIBUTE_UNUSED,
- struct qemud_client *client ATTRIBUTE_UNUSED,
- virConnectPtr conn,
- remote_message_header *hdr ATTRIBUTE_UNUSED,
- remote_error *rerr,
- remote_domain_pin_vcpu_flags_args *args,
- void *ret ATTRIBUTE_UNUSED)
-{
- virDomainPtr dom = NULL;
- int rv = -1;
-
- if (!conn) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
- goto cleanup;
- }
-
- if (!(dom = get_nonnull_domain(conn, args->dom)))
- goto cleanup;
-
- if (args->cpumap.cpumap_len > REMOTE_CPUMAP_MAX) {
- virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("cpumap_len > REMOTE_CPUMAP_MAX"));
- goto cleanup;
- }
-
- if (virDomainPinVcpuFlags(dom,
- args->vcpu,
- (unsigned char *) args->cpumap.cpumap_val,
- args->cpumap.cpumap_len,
- args->flags) < 0)
- goto cleanup;
-
- rv = 0;
-
-cleanup:
- if (rv < 0)
- remoteDispatchError(rerr);
- if (dom)
- virDomainFree(dom);
- return rv;
-}
-
static int
remoteDispatchDomainGetMemoryParameters(struct qemud_server *server
ATTRIBUTE_UNUSED,
" virDomainSnapshotFree(snapshot);\n" .
" if (dom)\n" .
" virDomainFree(dom);");
- } elsif ($args_member =~ m/^(remote_string|remote_nonnull_string|remote_uuid|opaque) (\S+)<\S+>;/) {
+ } elsif ($args_member =~ m/^(?:remote_string|remote_uuid) (\S+)<\S+>;/) {
if (! @args_list) {
push(@args_list, "conn");
}
- if ($call->{ProcName} eq "SecretSetValue") {
- push(@args_list, "(const unsigned char *)args->$2.$2_val");
- } elsif ($call->{ProcName} eq "CPUBaseline") {
- push(@args_list, "(const char **)args->$2.$2_val");
- } else {
- push(@args_list, "args->$2.$2_val");
+ push(@args_list, "args->$1.$1_val");
+ push(@args_list, "args->$1.$1_len");
+ } elsif ($args_member =~ m/^(?:opaque|remote_nonnull_string) (\S+)<\S+>;(.*)$/) {
+ if (! @args_list) {
+ push(@args_list, "conn");
+ }
+
+ my $cast = "";
+ my $arg_name = $1;
+ my $annotation = $2;
+
+ if ($annotation ne "") {
+ if ($annotation =~ m/\s*\/\*\s*(.*)\s*\*\//) {
+ $cast = $1;
+ } else {
+ die "malformed cast annotation for argument: $args_member";
+ }
}
- push(@args_list, "args->$2.$2_len");
+ push(@args_list, "${cast}args->$arg_name.${arg_name}_val");
+ push(@args_list, "args->$arg_name.${arg_name}_len");
} elsif ($args_member =~ m/^(?:unsigned )?int (\S+)<\S+>;/) {
if (! @args_list) {
push(@args_list, "conn");
} elsif ($args_member =~ m/^remote_string (\S+);/) {
push(@args_list, "const char *$1");
push(@setters_list, "args.$1 = $1 ? (char **)&$1 : NULL;");
- } elsif ($args_member =~ m/^remote_nonnull_string (\S+)<(\S+)>;/) {
- push(@args_list, "const char **$1");
- push(@args_list, "unsigned int ${1}len");
- push(@setters_list, "args.$1.${1}_val = (char **)$1;");
- push(@setters_list, "args.$1.${1}_len = ${1}len;");
- push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 });
+ } elsif ($args_member =~ m/^remote_nonnull_string (\S+)<(\S+)>;(.*)$/) {
+ my $type_name = "const char **";
+ my $arg_name = $1;
+ my $limit = $2;
+ my $annotation = $3;
+
+ if ($annotation ne "") {
+ if ($annotation =~ m/\s*\/\*\s*\((.*)\)\s*\*\//) {
+ $type_name = $1;
+ } else {
+ die "malformed cast annotation for argument: $args_member";
+ }
+ }
+
+ push(@args_list, "$type_name$arg_name");
+ push(@args_list, "unsigned int ${arg_name}len");
+ push(@setters_list, "args.$arg_name.${arg_name}_val = (char **)$arg_name;");
+ push(@setters_list, "args.$arg_name.${arg_name}_len = ${arg_name}len;");
+ push(@args_check_list, { name => "\"$arg_name\"", arg => "${arg_name}len", limit => $2 });
} elsif ($args_member =~ m/^remote_nonnull_string (\S+);/) {
push(@args_list, "const char *$1");
push(@setters_list, "args.$1 = (char *)$1;");
- } elsif ($args_member =~ m/^(remote_string|opaque) (\S+)<(\S+)>;/) {
- my $type_name = $1;
- my $arg_name = $2;
- my $limit = $3;
+ } elsif ($args_member =~ m/^opaque (\S+)<(\S+)>;(.*)$/) {
+ my $type_name = "const char *";
+ my $arg_name = $1;
+ my $limit = $2;
+ my $annotation = $3;
+
+ if ($annotation ne "") {
+ if ($annotation =~ m/\s*\/\*\s*\((.*)\)\s*\*\//) {
+ $type_name = $1;
+ } else {
+ die "malformed cast annotation for argument: $args_member";
+ }
+ }
+
+ push(@args_list, "$type_name$arg_name");
if ($call->{ProcName} eq "SecretSetValue") {
- push(@args_list, "const unsigned char *$arg_name");
+ # SPECIAL: virSecretSetValue uses size_t instead of int
push(@args_list, "size_t ${arg_name}len");
- } elsif ($call->{ProcName} eq "DomainPinVcpu") {
- push(@args_list, "unsigned char *$arg_name");
- push(@args_list, "int ${arg_name}len");
- } elsif ($call->{ProcName} eq "DomainPinVcpuFlags") {
- push(@args_list, "unsigned char *$arg_name");
- push(@args_list, "int ${arg_name}len");
} else {
- push(@args_list, "const char *$arg_name");
push(@args_list, "int ${arg_name}len");
}
+ push(@setters_list, "args.$arg_name.${arg_name}_val = (char *)$arg_name;");
+ push(@setters_list, "args.$arg_name.${arg_name}_len = ${arg_name}len;");
+ push(@args_check_list, { name => "\"$arg_name\"", arg => "${arg_name}len", limit => $limit });
+ } elsif ($args_member =~ m/^remote_string (\S+)<(\S+)>;/) {
+ my $arg_name = $1;
+ my $limit = $2;
+
+ push(@args_list, "const char *$arg_name");
+ push(@args_list, "int ${arg_name}len");
push(@setters_list, "args.$arg_name.${arg_name}_val = (char *)$arg_name;");
push(@setters_list, "args.$arg_name.${arg_name}_len = ${arg_name}len;");
push(@args_check_list, { name => "\"$arg_name\"", arg => "${arg_name}len", limit => $limit });
* If the 'remote_CALL_ret' maps to a struct in the public API then it is
* also filled via call-by-reference and must be annotated with a
* insert@<offset> comment to indicate the offset in the parameter list of
- * the function to be called. */
+ * the function to be called.
+ *
+ * Dynamic opaque and remote_nonnull_string arrays can be annotated with an
+ * optional typecast */
struct remote_open_args {
/* NB. "name" might be NULL although in practice you can't
struct remote_domain_pin_vcpu_args {
remote_nonnull_domain dom;
unsigned int vcpu;
- opaque cpumap<REMOTE_CPUMAP_MAX>;
+ opaque cpumap<REMOTE_CPUMAP_MAX>; /* (unsigned char *) */
};
struct remote_domain_pin_vcpu_flags_args {
remote_nonnull_domain dom;
unsigned int vcpu;
- opaque cpumap<REMOTE_CPUMAP_MAX>;
+ opaque cpumap<REMOTE_CPUMAP_MAX>; /* (unsigned char *) */
unsigned int flags;
};
struct remote_secret_set_value_args {
remote_nonnull_secret secret;
- opaque value<REMOTE_SECRET_VALUE_MAX>;
+ opaque value<REMOTE_SECRET_VALUE_MAX>; /* (const unsigned char *) */
unsigned int flags;
};
struct remote_cpu_baseline_args {
- remote_nonnull_string xmlCPUs<REMOTE_CPU_BASELINE_MAX>;
+ remote_nonnull_string xmlCPUs<REMOTE_CPU_BASELINE_MAX>; /* (const char **) */
unsigned int flags;
};
REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME = 23, /* autogen autogen */
REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID = 24, /* autogen autogen */
REMOTE_PROC_NUM_OF_DEFINED_DOMAINS = 25, /* autogen autogen */
- REMOTE_PROC_DOMAIN_PIN_VCPU = 26, /* skipgen autogen */
+ REMOTE_PROC_DOMAIN_PIN_VCPU = 26, /* autogen autogen */
REMOTE_PROC_DOMAIN_REBOOT = 27, /* autogen autogen */
REMOTE_PROC_DOMAIN_RESUME = 28, /* autogen autogen */
REMOTE_PROC_DOMAIN_SET_AUTOSTART = 29, /* autogen autogen */
REMOTE_PROC_INTERFACE_CHANGE_ROLLBACK = 222, /* autogen autogen */
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS_FLAGS = 223, /* skipgen autogen */
REMOTE_PROC_DOMAIN_EVENT_CONTROL_ERROR = 224, /* skipgen skipgen */
- REMOTE_PROC_DOMAIN_PIN_VCPU_FLAGS = 225, /* skipgen autogen */
+ REMOTE_PROC_DOMAIN_PIN_VCPU_FLAGS = 225, /* autogen autogen */
REMOTE_PROC_DOMAIN_SEND_KEY = 226, /* autogen autogen */
REMOTE_PROC_NODE_GET_CPU_STATS = 227, /* skipgen skipgen */
REMOTE_PROC_NODE_GET_MEMORY_STATS = 228, /* skipgen skipgen */