From 7cb667102d393d306ab349a680826c192d8b170b Mon Sep 17 00:00:00 2001 From: "Rubio R. C. Terra" Date: Mon, 6 Feb 2017 18:10:45 -0200 Subject: [PATCH] Adding a section explaining how to fake variadic functions --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 2526170..5a03a19 100644 --- a/README.md +++ b/README.md @@ -329,6 +329,23 @@ The fake will call your custom functions in the order specified by the SET_CUSTO macro. When the last custom fake is reached the fake will keep calling the last custom fake in the sequence. This macro works much like the SET_RETURN_SEQ macro. +## Variadic Functions + +You can fake variadic functions using the macros FAKE_VALUE_FUNC_VARARG +and FAKE_VOID_FUNC_VARARG. For instance: + + FAKE_VALUE_FUNC_VARARG(int, fprintf, FILE *, const char*, ...); + +In order to access the variadic parameters from a custom fake function, declare a +va_list parameter. For instance, a custom fake for fprintf() +could call the real fprintf() like this: + + int fprintf_custom(FILE *stream, const char *format, va_list ap) { + if (fprintf0_fake.return_val < 0) // should we fail? + return fprintf0_fake.return_val; + return vfprintf(stream, format, ap); + } + ## How do I fake a function that returns a value by reference? The basic mechanism that FFF provides you in this case is the custom_fake field described in the *Custom Return Value Delegate* example above.