On 25/10/12 15:10, Brian Candler wrote:
* Parse the string, if it contains quoted words then break into
Why not do it for everything? Why just quoted?
%s substitutions before passing to redisCommand. This would be the most transparent solution I think.
You can probably use the escape context stuff for this. Basically: 1. Define a struct for holding the command and arguments struct redis_command { char *arg[LEN]; int argnum; } 2. Modify the redis_escape function to save to the context: int resdis_escape(REQUEST *in, char *out, size_t outlen, const char *in, void *arg) { struct redis_command *c = arg; c->arg[c->argnum++] = strdup(in); *out++ = '%'; *out++ = 's'; *out++ = '\0'; return 2; } 3. In the command func, just call radius_xlat on the command string with a zero-ed struct: char query[256]; struct redis_command c; c.argnum = 0; radius_xlat(query, sizeof(query), fmt, request, redis_escape, &c); ...the escape func will collect all your arguments and substitute "%s". You then just need to collate the "arg" into a va_thingy struct and call the va_thingy variant of the function.