summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-03-08 17:04:21 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-04-16 11:41:43 +0800
commitb838cf777ed3d21b166f8daddd4b11fc75e07307 (patch)
tree198e3450af8561c3806bd82c30f2daa10566ef70 /lib
parent80c072a44cb665495afe08ce37cbf4f2086d5529 (diff)
downloadtalos-petitboot-b838cf777ed3d21b166f8daddd4b11fc75e07307.tar.gz
talos-petitboot-b838cf777ed3d21b166f8daddd4b11fc75e07307.zip
pb-protocol: Don't allocate in deserialise functions
Curently, the protocol deserialise functions are allocating device and boot_command structures. This (implicitly) makes them responsible for initialisation of these structures too. Rather that making the protocol responsible for initialising the devices and boot commands, this change gives the deserialise functions an argument to an already-instanciated structure. This means that the creation is no longer implied by the deserialise. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/pb-protocol/pb-protocol.c20
-rw-r--r--lib/pb-protocol/pb-protocol.h4
2 files changed, 8 insertions, 16 deletions
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 */
OpenPOWER on IntegriCloud