Add support to return the return value from custom fakes when it is a non-void function
diff --git a/fakegen.rb b/fakegen.rb
index aea1d51..4a04bc9 100644
--- a/fakegen.rb
+++ b/fakegen.rb
@@ -280,8 +280,11 @@
   putd "    HISTORY_DROPPED(FUNCNAME);\\"
   putd "}\\"
   putd "INCREMENT_CALL_COUNT(FUNCNAME); \\"
-  putd "if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)}); \\"
   putd "REGISTER_CALL(FUNCNAME); \\"
+  
+  return_type = is_value_function ? "return" : ""
+  putd "if (FUNCNAME##_fake.custom_fake) #{return_type} FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)}); \\"
+  
   putd "RETURN_FAKE_RESULT(FUNCNAME)  \\" if is_value_function
 end
 
diff --git a/fff.h b/fff.h
index 63f7f7d..e62e403 100644
--- a/fff.h
+++ b/fff.h
@@ -113,8 +113,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -147,8 +147,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -184,8 +184,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -224,8 +224,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -267,8 +267,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -313,8 +313,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -362,8 +362,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -414,8 +414,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -469,8 +469,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -527,8 +527,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake)  FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
     END_EXTERN_C \
@@ -559,8 +559,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -595,8 +595,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -634,8 +634,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -676,8 +676,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -721,8 +721,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -769,8 +769,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -820,8 +820,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -874,8 +874,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -931,8 +931,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -991,8 +991,8 @@
                 HISTORY_DROPPED(FUNCNAME);\
             }\
             INCREMENT_CALL_COUNT(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
             REGISTER_CALL(FUNCNAME); \
+            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
             RETURN_FAKE_RESULT(FUNCNAME)  \
         } \
         DEFINE_RESET_FUNCTION(FUNCNAME) \