R_API char *r2p_cmdf(R2Pipe *r2p, const char *fmt, ...) { int ret, ret2; char *p, string[1024]; va_list ap, ap2; va_start (ap, fmt); va_start (ap2, fmt); ret = vsnprintf (string, sizeof (string)-1, fmt, ap); if (ret < 1 || ret >= sizeof (string)) { p = malloc (ret+2); if (!p) { va_end (ap2); va_end (ap); return NULL; } ret2 = vsnprintf (p, ret+1, fmt, ap2); if (ret2 < 1 || ret2 > ret+1) { free (p); va_end (ap2); va_end (ap); return NULL; } fmt = r2p_cmd (r2p, p); free (p); } else { fmt = r2p_cmd (r2p, string); } va_end (ap2); va_end (ap); return (char*)fmt; }
static void r2cmd(R2Pipe *r2, const char *cmd) { char *msg = r2p_cmd (r2, cmd); if (msg) { printf ("%s\n", msg); free (msg); } }