#include <vec/vec.h>
typedef int (*imap_cb)(void * data, void * args);
-typedef int (*imap_free_cb)(void * data);
+typedef void (*imap_free_cb)(void * data);
typedef void (*imap_update_cb)(
imap_t * dest,
siridb_t * siridb_new(const char * dbpath, int lock_flags);
siridb_t * siridb_get(llist_t * siridb_list, const char * dbname);
siridb_t * siridb_get_by_qp(llist_t * siridb_list, qp_obj_t * qp_dbname);
-void siridb_decref_cb(siridb_t * siridb, void * args);
+int siridb_decref_cb(siridb_t * siridb, void * args);
ssize_t siridb_get_file(char ** buffer, siridb_t * siridb);
int siridb_open_files(siridb_t * siridb);
int siridb_save(siridb_t * siridb);
#define SIRIDB_VERSION_MAJOR 2
#define SIRIDB_VERSION_MINOR 0
-#define SIRIDB_VERSION_PATCH 32
+#define SIRIDB_VERSION_PATCH 33
/*
* Use SIRIDB_VERSION_PRE_RELEASE for alpha release versions.
* Note that debian alpha packages should use versions like this:
* 2.0.30-0alpha0
*/
-#define SIRIDB_VERSION_PRE_RELEASE ""
+#define SIRIDB_VERSION_PRE_RELEASE "-alpha-0"
#ifndef NDEBUG
#define SIRIDB_VERSION_BUILD_RELEASE "+debug"
#define HELP_WIDTH 80 /* try to fit help within this screen width */
#define ARGPARSE_ERR_SIZE 1024 /* buffer size for building err msg */
-#define ARGPARSE_HELP_SIZE 255 /* buffer size for building help */
+#define ARGPARSE_HELP_SIZE 512 /* buffer size for building help */
/* static function definitions */
static void print_usage(argparse_parser_t * parser, const char * bname);
if (current->argument->shortcut)
{
snprintf(buffer, ARGPARSE_HELP_SIZE,
- " -%c,",
- current->argument->shortcut);
+ " -%c, --%s",
+ current->argument->shortcut,
+ current->argument->name);
+ }
+ else
+ {
+ snprintf(buffer, ARGPARSE_HELP_SIZE,
+ " --%s",
+ current->argument->name);
}
- snprintf(buffer, ARGPARSE_HELP_SIZE,
- "%s --%s",
- buffer,
- current->argument->name);
break;
case ARGPARSE_STORE_STRING:
case ARGPARSE_STORE_INT:
if (current->argument->shortcut)
{
snprintf(buffer, ARGPARSE_HELP_SIZE,
- " -%c %s,",
+ " -%c, --%s %s",
current->argument->shortcut,
+ current->argument->name,
+ uname);
+ }
+ else
+ {
+ snprintf(buffer, ARGPARSE_HELP_SIZE,
+ " --%s %s",
+ current->argument->name,
uname);
}
- snprintf(buffer, ARGPARSE_HELP_SIZE,
- "%s --%s %s",
- buffer,
- current->argument->name,
- uname);
break;
case ARGPARSE_STORE_STR_CHOICE:
if (current->argument->shortcut)
+ {
snprintf(buffer, ARGPARSE_HELP_SIZE,
- " -%c {%s},",
+ " -%c, --%s {%s},",
current->argument->shortcut,
+ current->argument->name,
current->argument->choices);
- snprintf(buffer, ARGPARSE_HELP_SIZE,
- "%s --%s {%s}",
- buffer,
+ }
+ else
+ {
+ snprintf(buffer, ARGPARSE_HELP_SIZE,
+ " --%s {%s}",
current->argument->name,
current->argument->choices);
+ }
break;
}
line_size = strlen(buffer);
#define BACKUP_LOOP_TIMEOUT 3000
static void BACKUP_cb(uv_timer_t * timer);
-static void BACKUP_walk(siridb_t * siridb, void * args);
+static int BACKUP_walk(siridb_t * siridb, void * args);
int siri_backup_init(siri_t * siri)
{
llist_walk((llist_t *) timer->data, (llist_cb) BACKUP_walk, NULL);
}
-static void BACKUP_walk(siridb_t * siridb, void * args __attribute__((unused)))
+static int BACKUP_walk(siridb_t * siridb, void * args __attribute__((unused)))
{
if ( siridb->replicate != NULL &&
siridb->replicate->status == REPLICATE_PAUSED &&
vec_free(shard_list);
}
+
+ return 0;
}
/*
* Sometimes we need a callback function and cannot use a macro expansion.
*/
-void siridb_decref_cb(siridb_t * siridb, void * args __attribute__((unused)))
+int siridb_decref_cb(siridb_t * siridb, void * args __attribute__((unused)))
{
siridb_decref(siridb);
+ return 0;
}
/*
#include <string.h>
#include <siri/err.h>
-static void POOLS_max_pool(siridb_server_t * server, uint16_t * max_pool);
-static void POOLS_arrange(siridb_server_t * server, siridb_t * siridb);
+static int POOLS_max_pool(siridb_server_t * server, uint16_t * max_pool);
+static int POOLS_arrange(siridb_server_t * server, siridb_t * siridb);
/*
* This function can raise an ALLOC signal.
}
-static void POOLS_max_pool(siridb_server_t * server, uint16_t * max_pool)
+static int POOLS_max_pool(siridb_server_t * server, uint16_t * max_pool)
{
if (server->pool > *max_pool)
{
*max_pool = server->pool;
}
+ return 0;
}
/*
* Signal can be raised by this function when a fifo buffer for an optional
* replica server can't be created.
*/
-static void POOLS_arrange(siridb_server_t * server, siridb_t * siridb)
+static int POOLS_arrange(siridb_server_t * server, siridb_t * siridb)
{
siridb_pool_t * pool = siridb->pools->pool + server->pool;
}
siridb_pool_add_server(pool, server);
+ return 0;
}
cproto_server_t err)
{
siridb_query_t * query = (siridb_query_t *) handle->data;
+
+ /* make sure the error message is null terminated in case the length has
+ * exceeded the max length.
+ */
+ query->err_msg[SIRIDB_MAX_SIZE_ERR_MSG-1] = '\0';
+
sirinet_pkg_t * package = sirinet_pkg_err(
query->pid,
strlen(query->err_msg),
*/
if (server->promises != NULL)
{
- imap_walk(server->promises, (imap_cb) SERVER_cancel_promise, NULL);
imap_free(server->promises, (imap_free_cb) SERVER_cancel_promise);
}
free(server->name);
#define SIRIDB_SERVERS_FN "servers.dat"
#define SIRIDB_SERVERS_SCHEMA 1
-static void SERVERS_walk_free(siridb_server_t * server, void * args);
+static int SERVERS_walk_free(siridb_server_t * server, void * args);
static int SERVERS_walk_save(siridb_server_t * server, qp_fpacker_t * fpacker);
/*
return 0;
}
-static void SERVERS_walk_free(
+static int SERVERS_walk_free(
siridb_server_t * server,
void * args __attribute__((unused)))
{
siridb_server_decref(server);
+ return 0;
}
static int SERVERS_walk_save(siridb_server_t * server, qp_fpacker_t * fpacker)
{
if (help_name[0] == '?')
{
- snprintf(
+ if (snprintf(
fn,
XPATH_MAX,
"%shelp/help%s.md",
path,
- help_name + 1);
+ help_name + 1) >= XPATH_MAX)
+ {
+ fn[XPATH_MAX-1] = '\0';
+ }
}
else
{
- snprintf(fn, XPATH_MAX, "%shelp/%s.md", path, help_name);
+ if (snprintf(
+ fn,
+ XPATH_MAX,
+ "%shelp/%s.md",
+ path,
+ help_name) >= XPATH_MAX)
+ {
+ fn[XPATH_MAX-1] = '\0';
+ }
}
log_debug("Reading help file: '%s'", fn);
if (fp == NULL)
{
- snprintf(
+ if (snprintf(
err_msg,
SIRIDB_MAX_SIZE_ERR_MSG,
"Cannot open help file: '%s'",
- fn);
+ fn) >= SIRIDB_MAX_SIZE_ERR_MSG)
+ {
+ err_msg[SIRIDB_MAX_SIZE_ERR_MSG-1] = '\0';
+ }
}
else
{
if (*content == NULL)
{
- snprintf(
+ if (snprintf(
err_msg,
SIRIDB_MAX_SIZE_ERR_MSG,
"Memory allocation error while reading help "
"file: '%s'",
- fn);
+ fn) >= SIRIDB_MAX_SIZE_ERR_MSG)
+ {
+ err_msg[SIRIDB_MAX_SIZE_ERR_MSG-1] = '\0';
+ }
}
else if (fread(*content, 1, size, fp) != size)
{
- snprintf(
+ if (snprintf(
err_msg,
SIRIDB_MAX_SIZE_ERR_MSG,
"Error while reading help file: '%s'",
- fn);
+ fn) >= SIRIDB_MAX_SIZE_ERR_MSG)
+ {
+ err_msg[SIRIDB_MAX_SIZE_ERR_MSG-1] = '\0';
+ }
free(*content);
*content = NULL;
}
static imap_t * imap_dst;
static imap_t * imap_tmp;
-static int test__imap_decref_cb(char * series)
+static void test__imap_decref_cb(char * series)
{
((vec_object_t *) series)->ref--;
- return 1;
}
static int test__imap_id_count_cb(