56 #define STR(x) vstring_str(x)
60 static const char *dict_random_lookup(
DICT *dict,
const char *unused_query)
70 static void dict_random_close(
DICT *dict)
90 #define DICT_RANDOM_RETURN(x) do { \
91 if (saved_name != 0) \
99 if (open_flags != O_RDONLY)
101 open_flags, dict_flags,
102 "%s:%s map requires O_RDONLY access mode",
109 || *(saved_name =
mystrndup(name + 1, len - 2)) == 0
113 open_flags, dict_flags,
114 "bad syntax: \"%s:%s\"; "
115 "need \"%s:{value...}\"",
124 dict_random->
dict.
lookup = dict_random_lookup;
125 dict_random->
dict.
close = dict_random_close;
ARGV * argv_free(ARGV *argvp)
void(* close)(struct DICT *)
#define DICT_RANDOM_RETURN(x)
#define DICT_OWNER_TRUSTED
ARGV * argv_splitq(const char *, const char *, const char *)
const char *(* lookup)(struct DICT *, const char *)
#define DICT_ERR_VAL_RETURN(dict, err, val)
#define DICT_FLAG_PATTERN
char * mystrndup(const char *str, ssize_t len)
size_t balpar(const char *string, const char *parens)
DICT * dict_random_open(const char *name, int open_flags, int dict_flags)
DICT * dict_alloc(const char *, const char *, ssize_t)
DICT * dict_surrogate(const char *dict_type, const char *dict_name, int open_flags, int dict_flags, const char *fmt,...)