summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--discover/discover-server.c7
-rw-r--r--lib/pb-protocol/pb-protocol.c20
-rw-r--r--lib/pb-protocol/pb-protocol.h4
-rw-r--r--ui/common/discover-client.c7
4 files changed, 18 insertions, 20 deletions
diff --git a/discover/discover-server.c b/discover/discover-server.c
index 6c80372..9ec3382 100644
--- a/discover/discover-server.c
+++ b/discover/discover-server.c
@@ -132,6 +132,7 @@ static int discover_server_process_message(void *arg)
struct pb_protocol_message *message;
struct boot_command *boot_command;
struct client *client = arg;
+ int rc;
message = pb_protocol_read_message(client, client->fd);
@@ -143,8 +144,10 @@ static int discover_server_process_message(void *arg)
return 0;
}
- boot_command = pb_protocol_deserialise_boot_command(client, message);
- if (!boot_command) {
+ boot_command = talloc(client, struct boot_command);
+
+ rc = pb_protocol_deserialise_boot_command(boot_command, message);
+ if (rc) {
pb_log("%s: no boot command?", __func__);
return 0;
}
diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c
index 31637c6..c6d8f63 100644
--- a/lib/pb-protocol/pb-protocol.c
+++ b/lib/pb-protocol/pb-protocol.c
@@ -338,10 +338,9 @@ struct pb_protocol_message *pb_protocol_read_message(void *ctx, int fd)
}
-struct device *pb_protocol_deserialise_device(void *ctx,
+int pb_protocol_deserialise_device(struct device *dev,
const struct pb_protocol_message *message)
{
- struct device *dev;
const char *pos;
int i, n_options;
unsigned int len;
@@ -349,8 +348,6 @@ struct device *pb_protocol_deserialise_device(void *ctx,
len = message->payload_len;
pos = message->payload;
- dev = talloc(ctx, struct device);
-
if (read_string(dev, &pos, &len, &dev->id))
goto out_err;
@@ -398,25 +395,21 @@ struct device *pb_protocol_deserialise_device(void *ctx,
list_add(&dev->boot_options, &opt->list);
}
- return dev;
+ return 0;
out_err:
- talloc_free(dev);
- return NULL;
+ return -1;
}
-struct boot_command *pb_protocol_deserialise_boot_command(void *ctx,
+int pb_protocol_deserialise_boot_command(struct boot_command *cmd,
const struct pb_protocol_message *message)
{
- struct boot_command *cmd;
const char *pos;
unsigned int len;
len = message->payload_len;
pos = message->payload;
- cmd = talloc(ctx, struct boot_command);
-
if (read_string(cmd, &pos, &len, &cmd->option_id))
goto out_err;
@@ -429,9 +422,8 @@ struct boot_command *pb_protocol_deserialise_boot_command(void *ctx,
if (read_string(cmd, &pos, &len, &cmd->boot_args))
goto out_err;
- return cmd;
+ return 0;
out_err:
- talloc_free(cmd);
- return NULL;
+ return -1;
}
diff --git a/lib/pb-protocol/pb-protocol.h b/lib/pb-protocol/pb-protocol.h
index 6068f05..de2ae7c 100644
--- a/lib/pb-protocol/pb-protocol.h
+++ b/lib/pb-protocol/pb-protocol.h
@@ -47,10 +47,10 @@ struct pb_protocol_message *pb_protocol_create_message(void *ctx,
struct pb_protocol_message *pb_protocol_read_message(void *ctx, int fd);
-struct device *pb_protocol_deserialise_device(void *ctx,
+int pb_protocol_deserialise_device(struct device *dev,
const struct pb_protocol_message *message);
-struct boot_command *pb_protocol_deserialise_boot_command(void *ctx,
+int pb_protocol_deserialise_boot_command(struct boot_command *cmd,
const struct pb_protocol_message *message);
#endif /* _PB_PROTOCOL_H */
diff --git a/ui/common/discover-client.c b/ui/common/discover-client.c
index f75cfb7..c0cfea0 100644
--- a/ui/common/discover-client.c
+++ b/ui/common/discover-client.c
@@ -83,6 +83,7 @@ static int discover_client_process(void *arg)
struct pb_protocol_message *message;
struct device *dev;
char *dev_id;
+ int rc;
message = pb_protocol_read_message(client, client->fd);
@@ -91,8 +92,10 @@ static int discover_client_process(void *arg)
switch (message->action) {
case PB_PROTOCOL_ACTION_ADD:
- dev = pb_protocol_deserialise_device(client, message);
- if (!dev) {
+ dev = talloc(client, struct device);
+
+ rc = pb_protocol_deserialise_device(dev, message);
+ if (rc) {
pb_log("%s: no device?\n", __func__);
return 0;
}
OpenPOWER on IntegriCloud