summaryrefslogtreecommitdiff
path: root/librabbitmq/amqp_mem.c
diff options
context:
space:
mode:
authorDavid Wragg <dpw@lshift.net>2010-05-30 23:31:40 +0100
committerDavid Wragg <dpw@lshift.net>2010-05-30 23:31:40 +0100
commit66a0a987914626fc0ea86067a0ea1dd7a2bebdd2 (patch)
tree0e400acdd2e7f35ed47b94d51308b142e82dbeac /librabbitmq/amqp_mem.c
parent7e8fbea4c9212774c101e33218d26a0dc992dc03 (diff)
downloadrabbitmq-c-github-ask-66a0a987914626fc0ea86067a0ea1dd7a2bebdd2.tar.gz
Make error codes returned by librabbitmq functions opaque
Windows doesn't generally use POSIX error codes, which poses a problem for librabbitmq's approach of using those error codes in its API. So make the librabbitmq error codes opaque: They are still be integers, but client code is not supposed to assume anything about them, except that they can be passed to a new amqp_error_string() function which returns the corresponding error message Internally, the error codes are either taken from a set of librabbitmq-specific values, or correspond to an OS-specific (POSIX or win32) error code, with a simple encoding to indicate which is which.
Diffstat (limited to 'librabbitmq/amqp_mem.c')
-rw-r--r--librabbitmq/amqp_mem.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/librabbitmq/amqp_mem.c b/librabbitmq/amqp_mem.c
index 6e52dc8..7783cbb 100644
--- a/librabbitmq/amqp_mem.c
+++ b/librabbitmq/amqp_mem.c
@@ -102,25 +102,24 @@ void empty_amqp_pool(amqp_pool_t *pool) {
empty_blocklist(&pool->pages);
}
+/* Returns 1 on success, 0 on failure */
static int record_pool_block(amqp_pool_blocklist_t *x, void *block) {
size_t blocklistlength = sizeof(void *) * (x->num_blocks + 1);
if (x->blocklist == NULL) {
x->blocklist = malloc(blocklistlength);
- if (x->blocklist == NULL) {
- return -ENOMEM;
- }
+ if (x->blocklist == NULL)
+ return 0;
} else {
void *newbl = realloc(x->blocklist, blocklistlength);
- if (newbl == NULL) {
- return -ENOMEM;
- }
+ if (newbl == NULL)
+ return 0;
x->blocklist = newbl;
}
x->blocklist[x->num_blocks] = block;
x->num_blocks++;
- return 0;
+ return 1;
}
void *amqp_pool_alloc(amqp_pool_t *pool, size_t amount) {
@@ -135,9 +134,8 @@ void *amqp_pool_alloc(amqp_pool_t *pool, size_t amount) {
if (result == NULL) {
return NULL;
}
- if (record_pool_block(&pool->large_blocks, result) != 0) {
+ if (!record_pool_block(&pool->large_blocks, result))
return NULL;
- }
return result;
}
@@ -156,9 +154,8 @@ void *amqp_pool_alloc(amqp_pool_t *pool, size_t amount) {
if (pool->alloc_block == NULL) {
return NULL;
}
- if (record_pool_block(&pool->pages, pool->alloc_block) != 0) {
+ if (!record_pool_block(&pool->pages, pool->alloc_block))
return NULL;
- }
pool->next_page = pool->pages.num_blocks;
} else {
pool->alloc_block = pool->pages.blocklist[pool->next_page];