param: remove old callback code

Cleaned up remaining code. Reduced comment noise. Reverted
macro names back to the original.

Signed-off-by: Mark Beckwith <wythe@intrig.com>
This commit is contained in:
Mark Beckwith
2018-08-15 10:16:02 -05:00
committed by Rusty Russell
parent fa55e2cab0
commit a3178b8177
17 changed files with 189 additions and 320 deletions

View File

@@ -11,19 +11,16 @@ struct param {
const char *name;
bool is_set;
bool required;
param_cb cb;
param_cbx cbx;
void *arg;
size_t argsize;
};
static bool param_add(struct param **params,
const char *name, bool required, param_cb cb,
param_cbx cbx, void *arg,
size_t argsize)
const char *name, bool required,
param_cbx cbx, void *arg)
{
#if DEVELOPER
if (!(name && (cb || cbx) && arg))
if (!(name && cbx && arg))
return false;
#endif
struct param *last;
@@ -34,79 +31,18 @@ static bool param_add(struct param **params,
last->is_set = false;
last->name = name;
last->required = required;
last->cb = cb;
last->cbx = cbx;
last->arg = arg;
last->argsize = argsize;
/* Non-0 means we are supposed to allocate iff found */
if (last->argsize != 0)
*(void **)last->arg = NULL;
return true;
}
struct fail_format {
void *cb;
const char *format;
};
static struct fail_format fail_formats[] = {
{json_tok_wtx,
"'%s' should be 'all' or a positive integer greater than "
"545, not '%.*s'"},
{NULL, "'%s' of '%.*s' is invalid'"}
};
static const char *find_fail_format(param_cb cb)
{
struct fail_format *fmt = fail_formats;
while (fmt->cb != NULL) {
if (fmt->cb == cb)
break;
fmt++;
}
return fmt->format;
}
/* Create a json_result out of a jsmntok_t. */
static struct json_result *make_result(tal_t *ctx, const char *name, const char *buffer,
const jsmntok_t *tok)
{
struct json_result *data = new_json_result(ctx);
const char *val = tal_fmt(ctx, "%.*s", tok->end - tok->start,
buffer + tok->start);
json_object_start(data, NULL);
json_add_string(data, name, val);
json_object_end(data);
return data;
}
static bool make_callback(struct command *cmd,
struct param *def,
const char *buffer, const jsmntok_t *tok)
{
void *arg;
def->is_set = true;
if (def->cb) {
if (def->argsize) {
*(void **)def->arg
= arg
= tal_arr_label(cmd, char, def->argsize, "param");
} else
arg = def->arg;
if (!def->cb(buffer, tok, arg)) {
command_fail_detailed(cmd, JSONRPC2_INVALID_PARAMS,
make_result(cmd, def->name, buffer, tok),
find_fail_format(def->cb), def->name,
tok->end - tok->start,
buffer + tok->start);
return false;
}
} else {
return def->cbx(cmd, def->name, buffer, tok, def->arg);
}
return true;
return def->cbx(cmd, def->name, buffer, tok, def->arg);
}
static struct param *post_check(struct command *cmd, struct param *params)
@@ -317,12 +253,9 @@ bool param(struct command *cmd, const char *buffer,
va_start(ap, tokens);
while ((name = va_arg(ap, const char *)) != NULL) {
bool required = va_arg(ap, int);
bool advanced = va_arg(ap, int);
param_cb cb = advanced ? NULL : va_arg(ap, param_cb);
param_cbx cbx = advanced ? va_arg(ap, param_cbx) : NULL;
param_cbx cbx = va_arg(ap, param_cbx);
void *arg = va_arg(ap, void *);
size_t argsize = va_arg(ap, size_t);
if (!param_add(&params, name, required, cb, cbx, arg, argsize)) {
if (!param_add(&params, name, required, cbx, arg)) {
command_fail(cmd, PARAM_DEV_ERROR, "developer error");
va_end(ap);
return false;