Commit ed1b25bb authored by Rusty Russell's avatar Rusty Russell

strmap: set errno on strmap_add() failures.

parent 2d31e99c
......@@ -5,6 +5,7 @@
#include <ccan/ilog/ilog.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
struct node {
/* These point to strings or nodes. */
......@@ -72,6 +73,7 @@ bool strmap_add_(struct strmap *map, const char *member, const void *value)
for (byte_num = 0; n->u.s[byte_num] == member[byte_num]; byte_num++) {
if (member[byte_num] == '\0') {
/* All identical! */
errno = EEXIST;
return false;
}
}
......@@ -86,7 +88,7 @@ bool strmap_add_(struct strmap *map, const char *member, const void *value)
/* Allocate new node. */
newn = malloc(sizeof(*newn));
if (!newn) {
/* FIXME */
errno = ENOMEM;
return false;
}
newn->byte_num = byte_num;
......
......@@ -94,8 +94,8 @@ void *strmap_get_(const struct strmap *map, const char *member);
* @member: the string to place in the map.
* @v: the (non-NULL) value.
*
* This returns false if we run out of memory, or (more normally) if that
* string already appears in the map.
* This returns false if we run out of memory (errno = ENOMEM), or
* (more normally) if that string already appears in the map (EEXIST).
*
* Note that the pointer is placed in the map, the string is not copied. If
* you want a copy in the map, use strdup(). Similarly for the value.
......
......@@ -14,7 +14,7 @@ int main(void)
char *v;
/* This is how many tests you plan to run */
plan_tests(31);
plan_tests(32);
strmap_init(&map);
......@@ -31,6 +31,7 @@ int main(void)
/* Add a duplicate should fail. */
ok1(!strmap_add(&map, dup, val));
ok1(errno == EEXIST);
ok1(strmap_get(&map, dup) == val);
/* Delete should return original string. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment