From: Rusty Russell Date: Wed, 26 Oct 2011 06:25:38 +0000 (+1030) Subject: strmap: set errno on strmap_add() failures. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=ed1b25bbd01f79b5b333fd28b53455d2c91b831f strmap: set errno on strmap_add() failures. --- diff --git a/ccan/strmap/strmap.c b/ccan/strmap/strmap.c index 7d03cca4..2b89fe0d 100644 --- a/ccan/strmap/strmap.c +++ b/ccan/strmap/strmap.c @@ -5,6 +5,7 @@ #include #include #include +#include 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; diff --git a/ccan/strmap/strmap.h b/ccan/strmap/strmap.h index 77197507..e85b8c8f 100644 --- a/ccan/strmap/strmap.h +++ b/ccan/strmap/strmap.h @@ -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. diff --git a/ccan/strmap/test/run.c b/ccan/strmap/test/run.c index 349ef4f7..34302846 100644 --- a/ccan/strmap/test/run.c +++ b/ccan/strmap/test/run.c @@ -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. */