+/* Licensed under GPLv3+ - see LICENSE file for details */
#ifndef CCAN_OPT_H
#define CCAN_OPT_H
#include <ccan/compiler/compiler.h>
char *opt_set_ulongval(const char *arg, unsigned long *ul);
void opt_show_ulongval(char buf[OPT_SHOW_LEN], const unsigned long *ul);
+/* the following setting functions accept k, M, G, T, P, or E suffixes, which
+ multiplies the numeric value by the corresponding power of 1000 or 1024
+ (for the _si and _bi versions, respectively).
+ */
+char *opt_set_intval_bi(const char *arg, int *i);
+char *opt_set_intval_si(const char *arg, int *i);
+char *opt_set_uintval_bi(const char *arg, unsigned int *u);
+char *opt_set_uintval_si(const char *arg, unsigned int *u);
+char *opt_set_longval_bi(const char *arg, long *l);
+char *opt_set_longval_si(const char *arg, long *l);
+char *opt_set_ulongval_bi(const char *arg, unsigned long *ul);
+char *opt_set_ulongval_si(const char *arg, unsigned long *ul);
+char *opt_set_longlongval_bi(const char *arg, long long *ll);
+char *opt_set_longlongval_si(const char *arg, long long *ll);
+char *opt_set_ulonglongval_bi(const char *arg, unsigned long long *ll);
+char *opt_set_ulonglongval_si(const char *arg, unsigned long long *ll);
+
/* Increment. */
char *opt_inc_intval(int *i);
/* Resolves to the four parameters for non-arg callbacks. */
#define OPT_CB_NOARG(cb, arg) \
OPT_NOARG, \
- cast_if_any(char *(*)(void *), (cb), 0?(cb):(cb),\
- char *(*)(typeof(*(arg))*), \
- char *(*)(const typeof(*(arg))*), \
- char *(*)(const void *)), \
+ typesafe_cb_cast3(char *(*)(void *), \
+ char *(*)(typeof(*(arg))*), \
+ char *(*)(const typeof(*(arg))*), \
+ char *(*)(const void *), (cb)), \
NULL, NULL
/* Resolves to the four parameters for arg callbacks. */
#define OPT_CB_ARG(cb, show, arg) \
OPT_HASARG, NULL, \
- cast_if_any(char *(*)(const char *,void *), (cb), 0?(cb):(cb), \
- char *(*)(const char *, typeof(*(arg))*), \
- char *(*)(const char *, const typeof(*(arg))*), \
- char *(*)(const char *, const void *)), \
- cast_if_type(void (*)(char buf[], const void *), (show), \
- 0?(show):(show), \
- void (*)(char buf[], const typeof(*(arg))*))
+ typesafe_cb_cast3(char *(*)(const char *,void *), \
+ char *(*)(const char *, typeof(*(arg))*), \
+ char *(*)(const char *, const typeof(*(arg))*), \
+ char *(*)(const char *, const void *), \
+ (cb)), \
+ typesafe_cb_cast(void (*)(char buf[], const void *), \
+ void (*)(char buf[], const typeof(*(arg))*), (show))
/* Non-typesafe register function. */
void _opt_register(const char *names, enum opt_type type,