summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2016-01-28 01:14:04 +0000
committerBen Hutchings <ben@decadent.org.uk>2016-01-28 13:30:45 +0000
commit7b22e48fbf23d20d92a4bae581f39ac3704d8bb2 (patch)
treea6ee10763a203daf0fe61a3f8acaeb86d76c6614 /src
parentfe22a82fa0bd187a39d130d593c4d56d4749a174 (diff)
downloadodhcp6c-7b22e48fbf23d20d92a4bae581f39ac3704d8bb2.tar.gz
Change odhcp6c_insert_state to return a success/failure indicator
Some callers will need to free resources on failure. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'src')
-rw-r--r--src/odhcp6c.c6
-rw-r--r--src/odhcp6c.h2
2 files changed, 5 insertions, 3 deletions
diff --git a/src/odhcp6c.c b/src/odhcp6c.c
index 133ade7..1714d62 100644
--- a/src/odhcp6c.c
+++ b/src/odhcp6c.c
@@ -516,11 +516,11 @@ void odhcp6c_add_state(enum odhcp6c_state state, const void *data, size_t len)
memcpy(n, data, len);
}
-void odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, const void *data, size_t len)
+int odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, const void *data, size_t len)
{
ssize_t len_after = state_len[state] - offset;
if (len_after < 0)
- return;
+ return -1;
uint8_t *n = odhcp6c_resize_state(state, len);
if (n) {
@@ -529,6 +529,8 @@ void odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, const void *d
memmove(sdata + offset + len, sdata + offset, len_after);
memcpy(sdata + offset, data, len);
}
+
+ return 0;
}
size_t odhcp6c_remove_state(enum odhcp6c_state state, size_t offset, size_t len)
diff --git a/src/odhcp6c.h b/src/odhcp6c.h
index d202790..928f82f 100644
--- a/src/odhcp6c.h
+++ b/src/odhcp6c.h
@@ -335,7 +335,7 @@ bool odhcp6c_is_bound(void);
void odhcp6c_clear_state(enum odhcp6c_state state);
void odhcp6c_add_state(enum odhcp6c_state state, const void *data, size_t len);
void odhcp6c_append_state(enum odhcp6c_state state, const void *data, size_t len);
-void odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, const void *data, size_t len);
+int odhcp6c_insert_state(enum odhcp6c_state state, size_t offset, const void *data, size_t len);
size_t odhcp6c_remove_state(enum odhcp6c_state state, size_t offset, size_t len);
void* odhcp6c_move_state(enum odhcp6c_state state, size_t *len);
void* odhcp6c_get_state(enum odhcp6c_state state, size_t *len);