summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt19
-rw-r--r--include/alarm-internal.h55
-rw-r--r--include/alarm.h3
-rw-r--r--lib/alarm-lib-dbus.c161
-rw-r--r--lib/alarm-lib.c415
-rw-r--r--mock/aul_mock.cc30
-rw-r--r--mock/aul_mock.h48
-rw-r--r--mock/dbus_mock.cc106
-rw-r--r--mock/dbus_mock.h74
-rw-r--r--mock/fff.h6493
-rw-r--r--mock/gio_fake.h79
-rwxr-xr-xmock/glib_fake.h35
-rw-r--r--mock/glib_mock.cc (renamed from mock/aul_fake.h)18
-rw-r--r--mock/glib_mock.h (renamed from mock/notification_fake.h)27
-rw-r--r--mock/mock.cc96
-rw-r--r--mock/mock_hook.h45
-rw-r--r--mock/module_mock.h25
-rw-r--r--mock/notification_mock.cc26
-rw-r--r--mock/notification_mock.h39
-rw-r--r--mock/pkgmgr_info_fake.h40
-rw-r--r--mock/pkgmgr_info_mock.cc66
-rw-r--r--mock/pkgmgr_info_mock.h54
-rw-r--r--mock/test_fixture.cc (renamed from mock/mock.h)9
-rw-r--r--mock/test_fixture.h53
-rw-r--r--mock/tzplatform_config_mock.cc24
-rw-r--r--mock/tzplatform_config_mock.h37
-rw-r--r--packaging/alarm-manager.spec70
-rw-r--r--packaging/alarm-server.service1
-rwxr-xr-xserver/CMakeLists.txt13
-rw-r--r--server/alarm-manager-db-migration.c112
-rw-r--r--server/alarm-manager-db.c780
-rw-r--r--server/alarm-manager-db.cc864
-rw-r--r--server/alarm-manager-db.h12
-rw-r--r--server/alarm-manager-dbus.c109
-rw-r--r--server/alarm-manager-schedule.c55
-rw-r--r--server/alarm-manager-timer.c4
-rw-r--r--server/alarm-manager-util.c64
-rw-r--r--server/alarm-manager-util.h1
-rw-r--r--server/alarm-manager.c844
-rwxr-xr-xserver/alarm-service.conf.in6
-rw-r--r--server/plugin/platform/src/alarm-server-plugin.c5
-rw-r--r--session-agent/CMakeLists.txt2
-rwxr-xr-xsession-agent/agent.c26
-rw-r--r--tool/alarmmgr_add_periodic_alarm_withcb.c4
-rw-r--r--tool/alarmmgr_add_reference_periodic_alarm_withcb.c4
-rwxr-xr-xunittest/CMakeLists.txt15
-rw-r--r--[-rwxr-xr-x]unittest/alarm_manager_unittest.cpp493
-rwxr-xr-xunittest/alarmlib_unittest.cpp866
-rwxr-xr-xunittest/unittest.cpp37
49 files changed, 3219 insertions, 9245 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 09ed2a6..0b72eff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(alarm C CXX)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+PROJECT(alarm)
INCLUDE(FindPkgConfig)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
@@ -27,16 +27,19 @@ IF(_APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG)
INSTALL(FILES ${CMAKE_SOURCE_DIR}/alarmmgr_log_dump.sh DESTINATION ${TZ_SYS_ETC}/dump.d/module.d/)
ENDIF(_APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG)
-IF(BUILD_GTESTS)
+IF(BUILD_GCOV)
SET(EXTRA_CFLAGS "-Werror-implicit-function-declaration")
-ELSE(BUILD_GTESTS)
+ELSE(BUILD_GCOV)
SET(EXTRA_CFLAGS "-Werror-implicit-function-declaration -fvisibility=hidden")
-ENDIF(BUILD_GTESTS)
+ENDIF(BUILD_GCOV)
IF(BUILD_GCOV)
ADD_DEFINITIONS("-DTIZEN_TEST_GCOV")
ENDIF(BUILD_GCOV)
-IF(BUILD_GTESTS)
- ADD_SUBDIRECTORY(unittest)
-ENDIF(BUILD_GTESTS)
+SET(GTEST_TEST "gtest-alarmmgr")
+ADD_SUBDIRECTORY(unittest)
+
+ENABLE_TESTING()
+ADD_TEST(NAME ${GTEST_TEST} COMMAND ${GTEST_TEST}
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/unittest)
diff --git a/include/alarm-internal.h b/include/alarm-internal.h
index b64299d..eca3ae4 100644
--- a/include/alarm-internal.h
+++ b/include/alarm-internal.h
@@ -38,12 +38,15 @@ extern "C" {
#define MAX_PKG_NAME_LEN MAX_SERVICE_NAME_LEN-8
#define MAX_PKG_ID_LEN 512
#define MAX_APP_ID_LEN 256
-#define MIN_INEXACT_INTERVAL 600
+#define MIN_INEXACT_INTERVAL 900
#define REGULAR_UID_MIN 5000
+#define MAX_APPID_CACHE_SIZE 100
#define BILLION 1000000000 /* for calculating nano seconds */
#define MILLION 1000000 /* for calculating micro seconds */
+#define INEXACT_INTERVAL_QUANTUM 900
+
typedef struct {
GDBusConnection *connection;
GDBusConnection *session_conn;
@@ -61,33 +64,26 @@ enum async_param_type {
SET_SYSTIME_WITH_PROPAGATION_DELAY,
};
-typedef enum {
- PROFILE_UNKNOWN = 0,
- PROFILE_MOBILE,
- PROFILE_WEARABLE,
- PROFILE_TV,
- PROFILE_IVI,
- PROFILE_COMMON,
-} profile_t;
-
#define ALARM_TYPE_RELATIVE 0x80000000 /**< relative */
#define ALARM_TYPE_WITHCB 0x40000000 /**< withcb */
#define ALARM_TYPE_PERIOD 0x10000000 /**< periodic */
-bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm,
+#define base_info_t alarm_info_t
+
+bool _send_alarm_create(alarm_context_t context, base_info_t *base,
alarm_id_t *id, const char *dst_service_name, const char *dst_service_name_mod, int *error_code);
-bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info,
+bool _send_alarm_create_appsvc(alarm_context_t context, base_info_t *base_info,
alarm_id_t *alarm_id, bundle *b, int *error_code);
-bool _send_alarm_create_noti(alarm_context_t context, alarm_info_t *alarm_info,
+bool _send_alarm_create_noti(alarm_context_t context, base_info_t *base_info,
alarm_id_t *alarm_id, notification_h noti, int *error_code);
bool _send_alarm_update(alarm_context_t context, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code);
+ base_info_t *base_info, int update_flag, int *error_code);
bool _send_alarm_delete(alarm_context_t context, alarm_id_t alarm_id, int *error_code);
bool _send_alarm_delete_all(alarm_context_t context, int *error_code);
bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
GVariantIter **iter, int *num_of_ids, int *error_code);
bool _send_alarm_get_number_of_ids(alarm_context_t context, int *num_of_ids, int *error_code);
-bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id, alarm_info_t *alarm_info, int *error_code);
+bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id, base_info_t *base_info, int *error_code);
bool _send_alarm_get_next_duetime(alarm_context_t context, alarm_id_t alarm_id, time_t* duetime, int *error_code);
bool _send_alarm_get_all_info(alarm_context_t context, char ** db_path, int *error_code);
bool _send_alarm_reset(alarm_context_t context, int *error_code);
@@ -124,7 +120,7 @@ typedef struct {
char *bundle;
char *noti;
- alarm_info_t alarm_info;
+ base_info_t base_info;
periodic_method_e method;
long requested_interval;
@@ -165,7 +161,7 @@ typedef struct _bg_category_cb_info_t {
bool has_bg;
} bg_category_cb_info_t;
-void _release_alarm_info_t();
+void _release_alarm_info_t(__alarm_info_t *entry);
void _alarm_set_next_duetime(__alarm_info_t *alarm_info);
void _alarm_schedule();
@@ -183,23 +179,24 @@ bool _can_skip_expired_cb(alarm_id_t alarm_id);
void _alarm_expired();
void _rtc_set();
-int alarm_manager_alarm_create(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id);
-int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id);
-int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id);
-int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id);
-int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid);
-int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid);
-int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid);
-int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, int *num_of_ids);
-int alarm_manager_alarm_get_list_of_ids(GVariant *parameters, uid_t uid, pid_t pid, GVariant **alarm_array, int *num_of_alarm);
+int alarm_manager_alarm_create(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender, int *alarm_id);
+int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender, int *alarm_id);
+int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender, int *alarm_id);
+int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender, int *alarm_id);
+int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender);
+int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender);
+int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender);
+int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, const gchar *sender, int *num_of_ids);
+int alarm_manager_alarm_get_list_of_ids(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender,
+ GVariantBuilder *alarm_array, int *num_of_alarm);
int alarm_manager_alarm_get_appsvc_info(GVariant *parameters, uid_t uid, gchar **b_data);
int alarm_manager_alarm_get_noti_info(GVariant *parameters, uid_t uid, gchar **noti_data);
-int alarm_manager_alarm_get_info(GVariant *parameters, uid_t uid, alarm_info_t *alarm_info);
+int alarm_manager_alarm_get_info(GVariant *parameters, uid_t uid, base_info_t *base_info);
int alarm_manager_alarm_get_next_duetime(GVariant *parameters, uid_t uid, time_t *duetime);
int alarm_manager_alarm_get_all_info(uid_t uid, char **db_path);
int alarm_manager_alarm_set_rtc_time(GVariant *parameters);
-int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid);
-int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters, pid_t pid);
+int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid, const gchar *sender);
+int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters, pid_t pid, const gchar *sender);
int alarm_manager_alarm_set_timezone(GVariant* parameters);
int alarm_manager_alarm_set_global(GVariant *parameters, uid_t uid);
int alarm_manager_alarm_get_global(GVariant *parameters, gboolean *global);
diff --git a/include/alarm.h b/include/alarm.h
index e6cac64..3c5e29a 100644
--- a/include/alarm.h
+++ b/include/alarm.h
@@ -1701,6 +1701,9 @@ int alarmmgr_add_reference_periodic_alarm_withcb(int interval, alarm_cb_t handle
int alarmmgr_update_alarm(alarm_id_t alarm_id,
alarm_entry_t *alarm, int update_flag);
+int alarmmgr_add_alarm_withcb_with_localtime(alarm_entry_t *alarm,
+ alarm_cb_t handler, void *user_param, alarm_id_t *alarm_id);
+
#ifdef __cplusplus
}
#endif
diff --git a/lib/alarm-lib-dbus.c b/lib/alarm-lib-dbus.c
index 6c763a2..7916b1b 100644
--- a/lib/alarm-lib-dbus.c
+++ b/lib/alarm-lib-dbus.c
@@ -48,7 +48,7 @@ static int __dbus_call_sync(GDBusProxy *proxy, const gchar *method_name,
return error_code;
}
-bool _send_alarm_create_noti(alarm_context_t context, alarm_info_t *alarm_info,
+bool _send_alarm_create_noti(alarm_context_t context, base_info_t *base_info,
alarm_id_t *alarm_id, notification_h noti, int *error_code)
{
int return_code = -1;
@@ -78,20 +78,20 @@ bool _send_alarm_create_noti(alarm_context_t context, alarm_info_t *alarm_info,
noti_data = g_base64_encode((guchar *)data, datalen);
param = g_variant_new("(iiiiiiiiiixiixs)",
- alarm_info->start.year,
- alarm_info->start.month,
- alarm_info->start.day,
- alarm_info->start.hour,
- alarm_info->start.min,
- alarm_info->start.sec,
- alarm_info->end.year,
- alarm_info->end.month,
- alarm_info->end.day,
- alarm_info->mode.u_interval.day_of_week,
- (gint64)alarm_info->mode.u_interval.interval,
- alarm_info->mode.repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
+ base_info->start.year,
+ base_info->start.month,
+ base_info->start.day,
+ base_info->start.hour,
+ base_info->start.min,
+ base_info->start.sec,
+ base_info->end.year,
+ base_info->end.month,
+ base_info->end.day,
+ base_info->mode.u_interval.day_of_week,
+ (gint64)base_info->mode.u_interval.interval,
+ base_info->mode.repeat,
+ base_info->alarm_type,
+ (gint64)base_info->reserved_info,
(char *)noti_data);
if (noti_data)
@@ -125,7 +125,7 @@ bool _send_alarm_create_noti(alarm_context_t context, alarm_info_t *alarm_info,
return true;
}
-bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info,
+bool _send_alarm_create_appsvc(alarm_context_t context, base_info_t *base_info,
alarm_id_t *alarm_id, bundle *b, int *error_code)
{
int return_code = -1;
@@ -142,20 +142,20 @@ bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info
}
param = g_variant_new("(iiiiiiiiiixiixs)",
- alarm_info->start.year,
- alarm_info->start.month,
- alarm_info->start.day,
- alarm_info->start.hour,
- alarm_info->start.min,
- alarm_info->start.sec,
- alarm_info->end.year,
- alarm_info->end.month,
- alarm_info->end.day,
- alarm_info->mode.u_interval.day_of_week,
- (gint64)alarm_info->mode.u_interval.interval,
- alarm_info->mode.repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
+ base_info->start.year,
+ base_info->start.month,
+ base_info->start.day,
+ base_info->start.hour,
+ base_info->start.min,
+ base_info->start.sec,
+ base_info->end.year,
+ base_info->end.month,
+ base_info->end.day,
+ base_info->mode.u_interval.day_of_week,
+ (gint64)base_info->mode.u_interval.interval,
+ base_info->mode.repeat,
+ base_info->alarm_type,
+ (gint64)base_info->reserved_info,
(char *)b_data);
if (b_data)
@@ -186,7 +186,7 @@ bool _send_alarm_create_appsvc(alarm_context_t context, alarm_info_t *alarm_info
return true;
}
-bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info,
+bool _send_alarm_create(alarm_context_t context, base_info_t *base_info,
alarm_id_t *alarm_id, const char *dst_service_name, const char *dst_service_name_mod,
int *error_code)
{
@@ -197,7 +197,7 @@ bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info,
/*TODO: Dbus bus name validation is must & will be added to avoid alarm-server crash*/
if (context.app_service_name == NULL
&& strlen(dst_service_name) == 4
- && strncmp(dst_service_name, "null", 4) == 0) {
+ && strcmp(dst_service_name, "null") == 0) {
LOGE("Invalid arg. Provide valid destination or call alarmmgr_init()\n");
if (error_code)
*error_code = ERR_ALARM_INVALID_PARAM;
@@ -207,20 +207,20 @@ bool _send_alarm_create(alarm_context_t context, alarm_info_t *alarm_info,
param = g_variant_new("(ssiiiiiiiiiiiiixss)",
context.app_service_name,
context.app_service_name_mod,
- alarm_info->start.year,
- alarm_info->start.month,
- alarm_info->start.day,
- alarm_info->start.hour,
- alarm_info->start.min,
- alarm_info->start.sec,
- alarm_info->msec,
- alarm_info->end.year,
- alarm_info->end.month,
- alarm_info->end.day,
- alarm_info->mode.u_interval.day_of_week,
- alarm_info->mode.repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
+ base_info->start.year,
+ base_info->start.month,
+ base_info->start.day,
+ base_info->start.hour,
+ base_info->start.min,
+ base_info->start.sec,
+ base_info->msec,
+ base_info->end.year,
+ base_info->end.month,
+ base_info->end.day,
+ base_info->mode.u_interval.day_of_week,
+ base_info->mode.repeat,
+ base_info->alarm_type,
+ (gint64)base_info->reserved_info,
dst_service_name, dst_service_name_mod);
return_code = __dbus_call_sync(context.proxy, "alarm_create",
@@ -332,7 +332,7 @@ bundle *_send_alarm_get_appsvc_info(alarm_context_t context, alarm_id_t alarm_id
notification_h _send_alarm_get_noti_info(alarm_context_t context, alarm_id_t alarm_id, int *error_code)
{
int return_code = -1;
- int datalen;
+ gsize datalen;
GVariant *noti_gv = NULL;
GVariant *body = NULL;
notification_h noti = NULL;
@@ -360,7 +360,7 @@ notification_h _send_alarm_get_noti_info(alarm_context_t context, alarm_id_t ala
if (error_code)
*error_code = return_code;
} else {
- data = g_base64_decode(noti_data, (gsize *)&datalen);
+ data = g_base64_decode(noti_data, &datalen);
noti_gv = g_variant_new_from_data(G_VARIANT_TYPE("(v)"),
data, datalen,
@@ -485,7 +485,6 @@ bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
{
int return_code = -1;
GVariantIter *iter_temp = NULL;
- GVariant *arr = NULL;
GVariant *param = NULL;
GVariant *reply = NULL;
@@ -499,8 +498,7 @@ bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
return false;
}
- g_variant_get(reply, "(@aiii)", &arr, num_of_ids, &return_code);
- g_variant_get(arr, "ai", &iter_temp);
+ g_variant_get(reply, "(a(i)ii)", &iter_temp, num_of_ids, &return_code);
LOGD("alarm_get_list_of_ids() dbus sync success. return_code[%d].",
return_code);
@@ -509,6 +507,7 @@ bool _send_alarm_get_list_of_ids(alarm_context_t context, int maxnum_of_ids,
if (error_code)
*error_code = return_code;
+ g_variant_iter_free(iter_temp);
g_variant_unref(reply);
return false;
}
@@ -553,7 +552,7 @@ bool _send_alarm_get_number_of_ids(alarm_context_t context, int *num_of_ids,
}
bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int *error_code)
+ base_info_t *base_info, int *error_code)
{
int return_code = -1;
GVariant *param = NULL;
@@ -570,21 +569,21 @@ bool _send_alarm_get_info(alarm_context_t context, alarm_id_t alarm_id,
}
g_variant_get(reply, "(iiiiiiiiiiiixi)",
- &alarm_info->start.year,
- &alarm_info->start.month,
- &alarm_info->start.day,
- &alarm_info->start.hour,
- &alarm_info->start.min,
- &alarm_info->start.sec,
- &alarm_info->end.year,
- &alarm_info->end.month,
- &alarm_info->end.day,
- &alarm_info->mode.u_interval.day_of_week,
- &alarm_info->mode.repeat,
- &alarm_info->alarm_type,
+ &base_info->start.year,
+ &base_info->start.month,
+ &base_info->start.day,
+ &base_info->start.hour,
+ &base_info->start.min,
+ &base_info->start.sec,
+ &base_info->end.year,
+ &base_info->end.month,
+ &base_info->end.day,
+ &base_info->mode.u_interval.day_of_week,
+ &base_info->mode.repeat,
+ &base_info->alarm_type,
&tmp_reserved_info,
&return_code);
- alarm_info->reserved_info = (time_t)tmp_reserved_info;
+ base_info->reserved_info = (time_t)tmp_reserved_info;
LOGD("alarm_get_info() dbus sync success. return_code[%d].",
return_code);
@@ -910,6 +909,7 @@ bool _send_alarm_get_global(alarm_context_t context, const alarm_id_t alarm_id,
int return_code = -1;
GVariant *param = NULL;
GVariant *reply = NULL;
+ gboolean is_global = FALSE;
param = g_variant_new("(i)", alarm_id);
@@ -921,7 +921,8 @@ bool _send_alarm_get_global(alarm_context_t context, const alarm_id_t alarm_id,
return false;
}
- g_variant_get(reply, "(bi)", global, &return_code);
+ g_variant_get(reply, "(bi)", &is_global, &return_code);
+ *global = is_global ? true : false;
LOGD("alarm_get_global dbus sync() success. alarm_id[%d], global[%d]\
return_code[%d]", alarm_id, *global, return_code);
@@ -939,7 +940,7 @@ bool _send_alarm_get_global(alarm_context_t context, const alarm_id_t alarm_id,
}
bool _send_alarm_update(alarm_context_t context, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code)
+ base_info_t *base_info, int update_flag, int *error_code)
{
int return_code = -1;
GVariant *param = NULL;
@@ -947,19 +948,19 @@ bool _send_alarm_update(alarm_context_t context, alarm_id_t alarm_id,
param = g_variant_new("(iiiiiiiiiixiixi)",
alarm_id,
- alarm_info->start.year,
- alarm_info->start.month,
- alarm_info->start.day,
- alarm_info->start.hour,
- alarm_info->start.min,
- alarm_info->start.sec,
- alarm_info->end.year,
- alarm_info->end.month,
- alarm_info->end.day,
- (gint64)alarm_info->mode.u_interval.interval,
- alarm_info->mode.repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
+ base_info->start.year,
+ base_info->start.month,
+ base_info->start.day,
+ base_info->start.hour,
+ base_info->start.min,
+ base_info->start.sec,
+ base_info->end.year,
+ base_info->end.month,
+ base_info->end.day,
+ (gint64)base_info->mode.u_interval.interval,
+ base_info->mode.repeat,
+ base_info->alarm_type,
+ (gint64)base_info->reserved_info,
update_flag);
return_code = __dbus_call_sync(context.proxy, "alarm_update",
diff --git a/lib/alarm-lib.c b/lib/alarm-lib.c
index 1f53853..d1e06e0 100644
--- a/lib/alarm-lib.c
+++ b/lib/alarm-lib.c
@@ -33,7 +33,6 @@
#include <gio/gio.h>
#include <pkgmgr-info.h>
#include <notification.h>
-#include <tzplatform_config.h>
#ifndef EXPORT_API
#define EXPORT_API __attribute__ ((visibility("default")))
@@ -74,7 +73,7 @@ struct alarm_async_param_t {
static alarm_cb_info_t *alarmcb_head;
-guint registration_id;
+static guint registration_id;
static GDBusNodeInfo *introspection_data;
@@ -95,7 +94,7 @@ static const GDBusInterfaceVTable interface_vtable = {
NULL
};
-void _initialize_alarm_info(alarm_info_t *alarm_info, int alarm_type,
+void _initialize_alarm_info(base_info_t *base_info, int alarm_type,
time_t trigger_at_time, time_t interval, bool precision)
{
struct timespec current_time;
@@ -103,10 +102,10 @@ void _initialize_alarm_info(alarm_info_t *alarm_info, int alarm_type,
clock_gettime(CLOCK_REALTIME, &current_time);
- memset(alarm_info, 0, sizeof(alarm_info_t));
+ memset(base_info, 0, sizeof(base_info_t));
- alarm_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
- alarm_info->alarm_type = alarm_type;
+ base_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ base_info->alarm_type = alarm_type;
if (current_time.tv_nsec > (BILLION / 2)) {
/* When the nanosecond part of the current_time is bigger than 500ms,
@@ -115,40 +114,40 @@ void _initialize_alarm_info(alarm_info_t *alarm_info, int alarm_type,
} else {
current_time.tv_sec += trigger_at_time;
}
- alarm_info->reserved_info = current_time.tv_sec;
+ base_info->reserved_info = current_time.tv_sec;
tzset(); /* Processes the TZ environment variable, and Set timezone, daylight, and tzname. */
localtime_r(&current_time.tv_sec, &duetime_tm);
- alarm_info->start.year = duetime_tm.tm_year + 1900;
- alarm_info->start.month = duetime_tm.tm_mon + 1;
- alarm_info->start.day = duetime_tm.tm_mday;
+ base_info->start.year = duetime_tm.tm_year + 1900;
+ base_info->start.month = duetime_tm.tm_mon + 1;
+ base_info->start.day = duetime_tm.tm_mday;
- alarm_info->end.year = 0;
- alarm_info->end.month = 0;
- alarm_info->end.day = 0;
+ base_info->end.year = 0;
+ base_info->end.month = 0;
+ base_info->end.day = 0;
- alarm_info->start.hour = duetime_tm.tm_hour;
- alarm_info->start.min = duetime_tm.tm_min;
- alarm_info->start.sec = duetime_tm.tm_sec;
+ base_info->start.hour = duetime_tm.tm_hour;
+ base_info->start.min = duetime_tm.tm_min;
+ base_info->start.sec = duetime_tm.tm_sec;
if (interval <= 0) {
- alarm_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
- alarm_info->mode.u_interval.interval = 0;
+ base_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ base_info->mode.u_interval.interval = 0;
} else {
- alarm_info->mode.repeat = ALARM_REPEAT_MODE_REPEAT;
- alarm_info->mode.u_interval.interval = interval;
+ base_info->mode.repeat = ALARM_REPEAT_MODE_REPEAT;
+ base_info->mode.u_interval.interval = interval;
}
- alarm_info->msec = precision ? (int)current_time.tv_nsec / MILLION : 0;
+ base_info->msec = precision ? (int)current_time.tv_nsec / MILLION : 0;
LOGD("trigger_at_time(%ld), start(%d-%d-%d, %02d:%02d:%02d),\
repeat(%d), interval(%ld), type(%d)",
- trigger_at_time, alarm_info->start.day, alarm_info->start.month,
- alarm_info->start.year, alarm_info->start.hour,
- alarm_info->start.min, alarm_info->start.sec,
- alarm_info->mode.repeat, alarm_info->mode.u_interval.interval,
- alarm_info->alarm_type);
+ trigger_at_time, base_info->start.day, base_info->start.month,
+ base_info->start.year, base_info->start.hour,
+ base_info->start.min, base_info->start.sec,
+ base_info->mode.repeat, base_info->mode.u_interval.interval,
+ base_info->alarm_type);
}
static void __add_resultcb(alarm_id_t alarm_id, alarm_cb_t cb_func, void *data)
@@ -329,21 +328,21 @@ static bool __alarm_validate_time(alarm_date_t *date, int *error_code)
return true;
}
-static int __check_validation(alarm_info_t *alarm_info, const char *function)
+static int __check_validation(base_info_t *base_info, const char *function)
{
int error_code;
- if (!__alarm_validate_date(&alarm_info->start, &error_code)) {
+ if (!__alarm_validate_date(&base_info->start, &error_code)) {
LOGE("%s : start date error\n", function);
return error_code;
}
- if (!__alarm_validate_time(&alarm_info->start, &error_code)) {
+ if (!__alarm_validate_time(&base_info->start, &error_code)) {
LOGE("%s : start time error\n", function);
return error_code;
}
- if (!__alarm_validate_date(&alarm_info->end, &error_code)) {
+ if (!__alarm_validate_date(&base_info->end, &error_code)) {
LOGE("%s : end date error\n", function);
return error_code;
}
@@ -386,8 +385,10 @@ static void __bus_get_for_async_api(GObject *source_object, GAsyncResult *res,
alarm_context.connection = g_bus_get_finish(res, &error);
if (!alarm_context.connection) {
- LOGE("dbus error message: %s", error->message);
- g_error_free(error);
+ if (error) {
+ LOGE("dbus error message: %s", error->message);
+ g_error_free(error);
+ }
g_variant_unref(param->v);
g_free(param);
pthread_mutex_unlock(&init_lock);
@@ -438,17 +439,12 @@ static int __sub_init()
return ALARMMGR_RESULT_SUCCESS;
}
-#if !(GLIB_CHECK_VERSION(2, 32, 0))
- g_thread_init(NULL);
-#endif
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
-
alarm_context.connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
if (alarm_context.connection == NULL) {
- LOGE("g_bus_get_sync() is failed. error: %s", error->message);
- g_error_free(error);
+ if (error) {
+ LOGE("g_bus_get_sync() is failed. error: %s", error->message);
+ g_error_free(error);
+ }
pthread_mutex_unlock(&init_lock);
return ERR_ALARM_SYSTEM_FAIL;
}
@@ -464,7 +460,7 @@ static int __compare_api_version(int *result, uid_t uid)
int ret = 0;
pkgmgrinfo_pkginfo_h pkginfo = NULL;
char pkgid[MAX_PKG_ID_LEN] = {0, };
- char *pkg_version;
+ char *pkg_version = NULL;
if (aul_app_get_pkgid_bypid_for_uid(getpid(), pkgid, sizeof(pkgid), uid) != AUL_R_OK) {
LOGE("aul_app_get_pkgid_bypid() is failed. PID %d may not be app.", getpid());
@@ -474,8 +470,11 @@ static int __compare_api_version(int *result, uid_t uid)
LOGE("Failed to get pkginfo\n");
} else {
ret = pkgmgrinfo_pkginfo_get_api_version(pkginfo, &pkg_version);
- if (ret != PMINFO_R_OK)
+ if (ret != PMINFO_R_OK) {
LOGE("Failed to check api version [%d]\n", ret);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
+ return ret;
+ }
*result = strverscmp(pkg_version, "2.4");
pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
@@ -484,7 +483,7 @@ static int __compare_api_version(int *result, uid_t uid)
return ret;
}
-static void __adjust_current_milliseconds(alarm_info_t *alarm_info)
+static void __adjust_current_milliseconds(base_info_t *base_info)
{
struct timespec current_time;
struct tm start_tm;
@@ -495,12 +494,12 @@ static void __adjust_current_milliseconds(alarm_info_t *alarm_info)
/* When the nanosecond part of the current_time is bigger than 500ms,
* the duetime increases by extra 1sec. */
- start_tm.tm_year = alarm_info->start.year - 1900;
- start_tm.tm_mon = alarm_info->start.month - 1;
- start_tm.tm_mday = alarm_info->start.day;
- start_tm.tm_hour = alarm_info->start.hour;
- start_tm.tm_min = alarm_info->start.min;
- start_tm.tm_sec = alarm_info->start.sec;
+ start_tm.tm_year = base_info->start.year - 1900;
+ start_tm.tm_mon = base_info->start.month - 1;
+ start_tm.tm_mday = base_info->start.day;
+ start_tm.tm_hour = base_info->start.hour;
+ start_tm.tm_min = base_info->start.min;
+ start_tm.tm_sec = base_info->start.sec;
start_tm.tm_isdst = -1;
start = timegm(&start_tm);
@@ -508,17 +507,18 @@ static void __adjust_current_milliseconds(alarm_info_t *alarm_info)
if (current_time.tv_sec == start) {
start += 1;
+ tzset();
localtime_r(&start, &start_tm);
- alarm_info->start.year = start_tm.tm_year + 1900;
- alarm_info->start.month = start_tm.tm_mon + 1;
- alarm_info->start.day = start_tm.tm_mday;
- alarm_info->start.hour = start_tm.tm_hour;
- alarm_info->start.min = start_tm.tm_min;
- alarm_info->start.sec = start_tm.tm_sec;
+ base_info->start.year = start_tm.tm_year + 1900;
+ base_info->start.month = start_tm.tm_mon + 1;
+ base_info->start.day = start_tm.tm_mday;
+ base_info->start.hour = start_tm.tm_hour;
+ base_info->start.min = start_tm.tm_min;
+ base_info->start.sec = start_tm.tm_sec;
LOGW("adjusted start(%d-%d-%d, %02d:%02d:%02d),",
- alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
- alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec);
+ base_info->start.day, base_info->start.month, base_info->start.year,
+ base_info->start.hour, base_info->start.min, base_info->start.sec);
}
}
}
@@ -541,10 +541,10 @@ EXPORT_API int alarmmgr_init(const char *appid)
char service_name[MAX_SERVICE_NAME_LEN] = { 0 };
char service_name_mod[MAX_SERVICE_NAME_LEN] = { 0 };
int ret;
- int len = 0;
+ size_t len = 0;
guint owner_id = 0;
- int i = 0;
- int j = 0;
+ size_t i = 0;
+ size_t j = 0;
bool is_user = false;
if (appid == NULL) {
@@ -677,11 +677,15 @@ EXPORT_API void alarmmgr_fini()
alarm_context.session_conn = NULL;
}
- if (alarm_context.app_service_name)
+ if (alarm_context.app_service_name) {
free(alarm_context.app_service_name);
- if (alarm_context.app_service_name_mod)
- free(alarm_context.app_service_name_mod);
+ alarm_context.app_service_name = NULL;
+ }
+ if (alarm_context.app_service_name_mod) {
+ free(alarm_context.app_service_name_mod);
+ alarm_context.app_service_name_mod = NULL;
+ }
b_initialized = false;
sub_initialized = false;
@@ -706,37 +710,37 @@ EXPORT_API int alarmmgr_set_cb(alarm_cb_t handler, void *user_param)
EXPORT_API alarm_entry_t *alarmmgr_create_alarm(void)
{
- alarm_info_t *alarm = (alarm_info_t *)malloc(sizeof(alarm_info_t));
+ base_info_t *base_info = (base_info_t *)malloc(sizeof(base_info_t));
- if (alarm == NULL) {
+ if (base_info == NULL) {
LOGE("alarm is null");
return NULL;
}
- alarm->start.year = 0;
- alarm->start.month = 0;
- alarm->start.day = 0;
- alarm->start.hour = 0;
- alarm->start.min = 0;
- alarm->start.sec = 0;
+ base_info->start.year = 0;
+ base_info->start.month = 0;
+ base_info->start.day = 0;
+ base_info->start.hour = 0;
+ base_info->start.min = 0;
+ base_info->start.sec = 0;
- alarm->msec = 0;
+ base_info->msec = 0;
- alarm->end.year = 0;
- alarm->end.month = 0;
- alarm->end.day = 0;
- alarm->end.hour = 0;
- alarm->end.min = 0;
- alarm->end.sec = 0;
+ base_info->end.year = 0;
+ base_info->end.month = 0;
+ base_info->end.day = 0;
+ base_info->end.hour = 0;
+ base_info->end.min = 0;
+ base_info->end.sec = 0;
- alarm->mode.repeat = ALARM_REPEAT_MODE_ONCE;
- alarm->mode.u_interval.interval = 0;
+ base_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ base_info->mode.u_interval.interval = 0;
- alarm->alarm_type = ALARM_TYPE_DEFAULT;
+ base_info->alarm_type = ALARM_TYPE_DEFAULT;
- alarm->reserved_info = 0;
+ base_info->reserved_info = 0;
- return (alarm_entry_t *) alarm;
+ return (alarm_entry_t *) base_info;
}
EXPORT_API int alarmmgr_free_alarm(alarm_entry_t *alarm)
@@ -753,7 +757,7 @@ EXPORT_API int alarmmgr_free_alarm(alarm_entry_t *alarm)
EXPORT_API int alarmmgr_set_time(alarm_entry_t *alarm, alarm_date_t time)
{
- alarm_info_t *alarm_info;
+ base_info_t *base_info;
int error_code;
if (alarm == NULL) {
@@ -761,7 +765,7 @@ EXPORT_API int alarmmgr_set_time(alarm_entry_t *alarm, alarm_date_t time)
return ERR_ALARM_INVALID_PARAM;
}
- alarm_info = (alarm_info_t *)alarm;
+ base_info = (base_info_t *)alarm;
if (!__alarm_validate_date(&time, &error_code)) {
LOGE("start date error\n");
return error_code;
@@ -772,7 +776,7 @@ EXPORT_API int alarmmgr_set_time(alarm_entry_t *alarm, alarm_date_t time)
return error_code;
}
- memcpy(&alarm_info->start, &time, sizeof(alarm_date_t));
+ memcpy(&base_info->start, &time, sizeof(alarm_date_t));
return ALARMMGR_RESULT_SUCCESS;
}
@@ -780,15 +784,14 @@ EXPORT_API int alarmmgr_set_time(alarm_entry_t *alarm, alarm_date_t time)
EXPORT_API int alarmmgr_get_time(const alarm_entry_t *alarm,
alarm_date_t *time)
{
- alarm_info_t *alarm_info = (alarm_info_t *)alarm;
-
- if (alarm == NULL) {
- LOGE("alarm is null");
+ if (alarm == NULL || time == NULL) {
+ LOGE("alarm or time is null");
return ERR_ALARM_INVALID_PARAM;
}
- if (time != NULL)
- memcpy(time, &alarm_info->start, sizeof(alarm_date_t));
+ base_info_t *base_info = (base_info_t *)alarm;
+
+ memcpy(time, &base_info->start, sizeof(alarm_date_t));
return ALARMMGR_RESULT_SUCCESS;
}
@@ -796,20 +799,20 @@ EXPORT_API int alarmmgr_get_time(const alarm_entry_t *alarm,
EXPORT_API int alarmmgr_set_repeat_mode(alarm_entry_t *alarm,
alarm_repeat_mode_t repeat, int interval)
{
- alarm_info_t *alarm_info = (alarm_info_t *)alarm;
+ base_info_t *base_info = (base_info_t *)alarm;
if (repeat >= ALARM_REPEAT_MODE_MAX) {
LOGE("repeat value is invalid");
return ERR_ALARM_INVALID_PARAM;
}
- alarm_info->mode.repeat = repeat;
+ base_info->mode.repeat = repeat;
if (repeat == ALARM_REPEAT_MODE_REPEAT
|| repeat == ALARM_REPEAT_MODE_WEEKLY) {
if (interval <= 0)
return ERR_ALARM_INVALID_PARAM;
- alarm_info->mode.u_interval.interval = interval;
+ base_info->mode.u_interval.interval = interval;
}
return ALARMMGR_RESULT_SUCCESS;
@@ -818,48 +821,44 @@ EXPORT_API int alarmmgr_set_repeat_mode(alarm_entry_t *alarm,
EXPORT_API int alarmmgr_get_repeat_mode(const alarm_entry_t *alarm,
alarm_repeat_mode_t *repeat, int *interval)
{
- alarm_info_t *alarm_info = (alarm_info_t *)alarm;
-
- if (alarm == NULL) {
- LOGE("alarm is null");
+ if (alarm == NULL || repeat == NULL || interval == NULL) {
+ LOGE("alarm or repeat or interval is null");
return ERR_ALARM_INVALID_PARAM;
}
- if (repeat != NULL)
- *repeat = alarm_info->mode.repeat;
- if (interval != NULL)
- *interval = alarm_info->mode.u_interval.interval;
+ base_info_t *base_info = (base_info_t *)alarm;
+ *repeat = base_info->mode.repeat;
+ *interval = base_info->mode.u_interval.interval;
return ALARMMGR_RESULT_SUCCESS;
}
EXPORT_API int alarmmgr_set_type(alarm_entry_t *alarm, int alarm_type)
{
- alarm_info_t *alarm_info;
+ base_info_t *base_info;
if (alarm == NULL) {
LOGE("alarm is null");
return ERR_ALARM_INVALID_PARAM;
}
- alarm_info = (alarm_info_t *)alarm;
- alarm_info->alarm_type = alarm_type;
- alarm_info->alarm_type &= (~ALARM_TYPE_RELATIVE);
+ base_info = (base_info_t *)alarm;
+ base_info->alarm_type = alarm_type;
+ base_info->alarm_type &= (~ALARM_TYPE_RELATIVE);
return ALARMMGR_RESULT_SUCCESS;
}
EXPORT_API int alarmmgr_get_type(const alarm_entry_t *alarm, int *alarm_type)
{
- alarm_info_t *alarm_info = (alarm_info_t *)alarm;
-
- if (alarm == NULL) {
- LOGE("alarm is null");
+ if (alarm == NULL || alarm_type == NULL) {
+ LOGE("alarm or alarm_type is null");
return ERR_ALARM_INVALID_PARAM;
}
- if (alarm_type != NULL)
- *alarm_type = alarm_info->alarm_type;
+ base_info_t *base_info = (base_info_t *)alarm;
+
+ *alarm_type = base_info->alarm_type;
return ALARMMGR_RESULT_SUCCESS;
}
@@ -908,6 +907,9 @@ EXPORT_API int alarmmgr_get_alarm_noti_info(alarm_id_t alarm_id, notification_h
{
int ret = 0;
+ if (noti == NULL)
+ return ERR_ALARM_INVALID_PARAM;
+
ret = __sub_init();
if (ret < 0)
return ret;
@@ -962,7 +964,7 @@ EXPORT_API int alarmmgr_set_rtc_time(alarm_date_t *time)
EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, void *bundle_data, alarm_id_t *alarm_id)
{
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
alarm_mode_t *mode;
const char *operation = NULL;
int error_code = 0;
@@ -971,13 +973,13 @@ EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, vo
LOGD("[alarm-lib]:alarm_create() is called\n");
- alarm_info = (alarm_info_t *)alarm;
- if (alarm_info == NULL || alarm_id == NULL) {
+ base_info = (base_info_t *)alarm;
+ if (base_info == NULL || alarm_id == NULL) {
LOGE("Invalid parameter\n");
return ERR_ALARM_INVALID_PARAM;
}
- __adjust_current_milliseconds(alarm_info);
+ __adjust_current_milliseconds(base_info);
b = (bundle *)bundle_data;
if (b == NULL) {
@@ -996,30 +998,30 @@ EXPORT_API int alarmmgr_add_alarm_appsvc_with_localtime(alarm_entry_t *alarm, vo
appid = appsvc_get_appid(b);
if (appid == NULL) {
- if ((alarm_info->alarm_type & ALARM_TYPE_NOLAUNCH) ||
+ if ((base_info->alarm_type & ALARM_TYPE_NOLAUNCH) ||
(operation && !strcmp(operation, APPSVC_OPERATION_DEFAULT))) {
LOGE("appid is invalid");
return ERR_ALARM_INVALID_PARAM;
}
}
- mode = &alarm_info->mode;
+ mode = &base_info->mode;
LOGW("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
- alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
- alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec,
- alarm_info->end.year, alarm_info->end.month, alarm_info->end.day,
- alarm_info->mode.repeat, alarm_info->mode.u_interval.interval, alarm_info->alarm_type);
+ base_info->start.day, base_info->start.month, base_info->start.year,
+ base_info->start.hour, base_info->start.min, base_info->start.sec,
+ base_info->end.year, base_info->end.month, base_info->end.day,
+ base_info->mode.repeat, base_info->mode.u_interval.interval, base_info->alarm_type);
/* TODO: This should be changed to > ALARM_REPEAT_MODE_MAX ? */
if (mode->repeat >= ALARM_REPEAT_MODE_MAX)
return ERR_ALARM_INVALID_PARAM;
- error_code = __check_validation(alarm_info, __FUNCTION__);
+ error_code = __check_validation(base_info, __FUNCTION__);
if (error_code != ALARMMGR_RESULT_SUCCESS)
return error_code;
- if (!_send_alarm_create_appsvc(alarm_context, alarm_info, alarm_id, b, &error_code))
+ if (!_send_alarm_create_appsvc(alarm_context, base_info, alarm_id, b, &error_code))
return error_code;
return ALARMMGR_RESULT_SUCCESS;
@@ -1031,12 +1033,12 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
{
char dst_service_name[MAX_SERVICE_NAME_LEN] = { 0 };
char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = { 0 };
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
alarm_mode_t *mode;
int ret;
int error_code;
- int i = 0;
- int j = 0;
+ size_t i = 0;
+ size_t j = 0;
LOGD("[alarm-lib]:alarm_create() is called\n");
@@ -1045,25 +1047,25 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
return ERR_ALARM_INVALID_PARAM;
}
- alarm_info = (alarm_info_t *) alarm;
- if (alarm_info == NULL || alarm_id == NULL) {
+ base_info = (base_info_t *) alarm;
+ if (base_info == NULL || alarm_id == NULL) {
LOGE("Invalid parameter bundle\n");
return ERR_ALARM_INVALID_PARAM;
}
- __adjust_current_milliseconds(alarm_info);
+ __adjust_current_milliseconds(base_info);
- mode = &alarm_info->mode;
+ mode = &base_info->mode;
ret = __sub_init();
if (ret < 0)
return ret;
LOGD("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
- alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
- alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec,
- alarm_info->end.year, alarm_info->end.month, alarm_info->end.day,
- alarm_info->mode.repeat, alarm_info->mode.u_interval.interval, alarm_info->alarm_type);
+ base_info->start.day, base_info->start.month, base_info->start.year,
+ base_info->start.hour, base_info->start.min, base_info->start.sec,
+ base_info->end.year, base_info->end.month, base_info->end.day,
+ base_info->mode.repeat, base_info->mode.u_interval.interval, base_info->alarm_type);
/* TODO: This should be changed to > ALARM_REPEAT_MODE_MAX ? */
if (mode->repeat >= ALARM_REPEAT_MODE_MAX) {
@@ -1076,7 +1078,7 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
return ERR_ALARM_INVALID_PARAM;
}
- error_code = __check_validation(alarm_info, __FUNCTION__);
+ error_code = __check_validation(base_info, __FUNCTION__);
if (error_code != ALARMMGR_RESULT_SUCCESS)
return error_code;
@@ -1095,52 +1097,77 @@ EXPORT_API int alarmmgr_add_alarm_with_localtime(alarm_entry_t *alarm,
j++;
}
- if (!_send_alarm_create(alarm_context, alarm_info, alarm_id, dst_service_name, dst_service_name_mod, &error_code))
+ if (!_send_alarm_create(alarm_context, base_info, alarm_id, dst_service_name, dst_service_name_mod, &error_code))
return error_code;
} else {
- if (!_send_alarm_create(alarm_context, alarm_info, alarm_id, "null", "null", &error_code))
+ if (!_send_alarm_create(alarm_context, base_info, alarm_id, "null", "null", &error_code))
return error_code;
}
return ALARMMGR_RESULT_SUCCESS;
}
+EXPORT_API int alarmmgr_add_alarm_withcb_with_localtime(alarm_entry_t *alarm,
+ alarm_cb_t handler, void *user_param, alarm_id_t *alarm_id)
+{
+ int ret;
+
+ if (alarm == NULL || handler == NULL || alarm_id == NULL) {
+ LOGE("Invalid Parameter");
+ return ERR_ALARM_INVALID_PARAM;
+ }
+
+ __check_appid();
+ ret = alarmmgr_init(g_appid);
+ if (ret < 0)
+ return ret;
+
+ alarm->alarm_type |= ALARM_TYPE_WITHCB;
+ ret = alarmmgr_add_alarm_with_localtime(alarm, NULL, alarm_id);
+ if (ret != ALARMMGR_RESULT_SUCCESS)
+ return ret;
+
+ __add_resultcb(*alarm_id, handler, user_param);
+
+ return ALARMMGR_RESULT_SUCCESS;
+}
+
EXPORT_API int alarmmgr_add_alarm_noti_with_localtime(alarm_entry_t *alarm, notification_h noti, alarm_id_t *alarm_id)
{
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
int error_code = 0;
- alarm_info = (alarm_info_t *)alarm;
+ base_info = (base_info_t *)alarm;
alarm_mode_t *mode;
- if (alarm_info == NULL || alarm_id == NULL) {
+ if (base_info == NULL || alarm_id == NULL) {
LOGE("Invalid parameter\n");
return ERR_ALARM_INVALID_PARAM;
}
- __adjust_current_milliseconds(alarm_info);
+ __adjust_current_milliseconds(base_info);
if (__alarmmgr_init_appsvc() < 0) {
LOGE("Unable to initialize dbus!!!\n");
return ERR_ALARM_SYSTEM_FAIL;
}
- mode = &alarm_info->mode;
+ mode = &base_info->mode;
LOGW("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
- alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
- alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec,
- alarm_info->end.year, alarm_info->end.month, alarm_info->end.day,
- alarm_info->mode.repeat, alarm_info->mode.u_interval.interval, alarm_info->alarm_type);
+ base_info->start.day, base_info->start.month, base_info->start.year,
+ base_info->start.hour, base_info->start.min, base_info->start.sec,
+ base_info->end.year, base_info->end.month, base_info->end.day,
+ base_info->mode.repeat, base_info->mode.u_interval.interval, base_info->alarm_type);
/* TODO: This should be changed to > ALARM_REPEAT_MODE_MAX ? */
if (mode->repeat >= ALARM_REPEAT_MODE_MAX)
return ERR_ALARM_INVALID_PARAM;
- error_code = __check_validation(alarm_info, __FUNCTION__);
+ error_code = __check_validation(base_info, __FUNCTION__);
if (error_code != ALARMMGR_RESULT_SUCCESS)
return error_code;
- if (!_send_alarm_create_noti(alarm_context, alarm_info, alarm_id, noti, &error_code))
+ if (!_send_alarm_create_noti(alarm_context, base_info, alarm_id, noti, &error_code))
return error_code;
return ALARMMGR_RESULT_SUCCESS;
@@ -1153,7 +1180,7 @@ EXPORT_API int alarmmgr_add_alarm_appsvc(int alarm_type, time_t trigger_at_time,
int error_code = 0;
int result = 0;
int modified_alarm_type = 0;
- alarm_info_t alarm_info;
+ base_info_t base_info;
const char *operation = NULL;
const char *appid = NULL;
bundle *b;
@@ -1202,16 +1229,16 @@ EXPORT_API int alarmmgr_add_alarm_appsvc(int alarm_type, time_t trigger_at_time,
modified_alarm_type ^= ALARM_TYPE_INEXACT;
}
- _initialize_alarm_info(&alarm_info, modified_alarm_type | ALARM_TYPE_RELATIVE,
+ _initialize_alarm_info(&base_info, modified_alarm_type | ALARM_TYPE_RELATIVE,
trigger_at_time, interval, false);
- if ((alarm_info.alarm_type & ALARM_TYPE_INEXACT) &&
- alarm_info.mode.u_interval.interval < MIN_INEXACT_INTERVAL) {
- alarm_info.mode.u_interval.interval = MIN_INEXACT_INTERVAL;
- alarm_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
+ if ((base_info.alarm_type & ALARM_TYPE_INEXACT) &&
+ base_info.mode.u_interval.interval < MIN_INEXACT_INTERVAL) {
+ base_info.mode.u_interval.interval = MIN_INEXACT_INTERVAL;
+ base_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
}
- if (!_send_alarm_create_appsvc(alarm_context, &alarm_info, alarm_id, b, &error_code))
+ if (!_send_alarm_create_appsvc(alarm_context, &base_info, alarm_id, b, &error_code))
return error_code;
@@ -1225,7 +1252,7 @@ EXPORT_API int alarmmgr_add_alarm_noti(int alarm_type, time_t trigger_at_time,
alarm_id_t *alarm_id)
{
int error_code = 0;
- alarm_info_t alarm_info;
+ base_info_t base_info;
if (__alarmmgr_init_appsvc() < 0) {
LOGE("Unable to initialize dbus!!!\n");
@@ -1242,16 +1269,16 @@ EXPORT_API int alarmmgr_add_alarm_noti(int alarm_type, time_t trigger_at_time,
return ERR_ALARM_INVALID_PARAM;
}
- _initialize_alarm_info(&alarm_info, alarm_type | ALARM_TYPE_RELATIVE,
+ _initialize_alarm_info(&base_info, alarm_type | ALARM_TYPE_RELATIVE,
trigger_at_time, interval, false);
- if ((alarm_info.alarm_type & ALARM_TYPE_INEXACT) &&
- alarm_info.mode.u_interval.interval < MIN_INEXACT_INTERVAL) {
- alarm_info.mode.u_interval.interval = MIN_INEXACT_INTERVAL;
- alarm_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
+ if ((base_info.alarm_type & ALARM_TYPE_INEXACT) &&
+ base_info.mode.u_interval.interval < MIN_INEXACT_INTERVAL) {
+ base_info.mode.u_interval.interval = MIN_INEXACT_INTERVAL;
+ base_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
}
- if (!_send_alarm_create_noti(alarm_context, &alarm_info, alarm_id, noti, &error_code))
+ if (!_send_alarm_create_noti(alarm_context, &base_info, alarm_id, noti, &error_code))
return error_code;
return ALARMMGR_RESULT_SUCCESS;
@@ -1264,10 +1291,10 @@ static int _alarmmgr_add_alarm(int alarm_type,
{
char dst_service_name[MAX_SERVICE_NAME_LEN] = { 0 };
char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = { 0 };
- int i = 0;
- int j = 0;
+ size_t i = 0;
+ size_t j = 0;
int error_code;
- alarm_info_t alarm_info;
+ base_info_t base_info;
int ret;
ret = __sub_init();
@@ -1289,7 +1316,7 @@ static int _alarmmgr_add_alarm(int alarm_type,
return ERR_ALARM_INVALID_PARAM;
}
- _initialize_alarm_info(&alarm_info, alarm_type | ALARM_TYPE_RELATIVE,
+ _initialize_alarm_info(&base_info, alarm_type | ALARM_TYPE_RELATIVE,
trigger_at_time, interval, precision);
if (destination != NULL) {
@@ -1310,13 +1337,13 @@ static int _alarmmgr_add_alarm(int alarm_type,
j++;
}
- if (!_send_alarm_create(alarm_context, &alarm_info,
+ if (!_send_alarm_create(alarm_context, &base_info,
alarm_id, dst_service_name,
dst_service_name_mod,
&error_code))
return error_code;
} else {
- if (!_send_alarm_create(alarm_context, &alarm_info, alarm_id,
+ if (!_send_alarm_create(alarm_context, &base_info, alarm_id,
"null", "null", &error_code))
return error_code;
}
@@ -1346,7 +1373,7 @@ static int _alarmmgr_add_alarm_withcb(int alarm_type, time_t trigger_at_time,
alarm_id_t *alarm_id, bool precision)
{
int error_code = 0;
- alarm_info_t alarm_info;
+ base_info_t base_info;
int ret = 0;
__check_appid();
@@ -1366,11 +1393,11 @@ static int _alarmmgr_add_alarm_withcb(int alarm_type, time_t trigger_at_time,
return ERR_ALARM_INVALID_PARAM;
}
- _initialize_alarm_info(&alarm_info,
+ _initialize_alarm_info(&base_info,
alarm_type | ALARM_TYPE_RELATIVE | ALARM_TYPE_WITHCB,
trigger_at_time, interval, precision);
- if (!_send_alarm_create(alarm_context, &alarm_info, alarm_id, "null", "null", &error_code))
+ if (!_send_alarm_create(alarm_context, &base_info, alarm_id, "null", "null", &error_code))
return error_code;
__add_resultcb(*alarm_id, handler, user_param);
@@ -1461,7 +1488,7 @@ EXPORT_API int alarmmgr_enum_alarm_ids(alarm_enum_fn_t fn, void *user_param)
if (!_send_alarm_get_list_of_ids(alarm_context, maxnum_of_ids, &iter, &num_of_ids, &return_code))
return return_code;
- while (g_variant_iter_loop(iter, "i", &alarm_id)) {
+ while (g_variant_iter_loop(iter, "(i)", &alarm_id)) {
LOGD("alarm_id (%d)", alarm_id);
(*fn)(alarm_id, user_param);
}
@@ -1473,7 +1500,7 @@ EXPORT_API int alarmmgr_enum_alarm_ids(alarm_enum_fn_t fn, void *user_param)
EXPORT_API int alarmmgr_get_info(alarm_id_t alarm_id, alarm_entry_t *alarm)
{
int error_code;
- alarm_info_t *alarm_info = (alarm_info_t *) alarm;
+ base_info_t *base_info = (base_info_t *) alarm;
int ret;
ret = __sub_init();
@@ -1482,12 +1509,12 @@ EXPORT_API int alarmmgr_get_info(alarm_id_t alarm_id, alarm_entry_t *alarm)
LOGD("[alarm-lib]:alarm_get_info() is called\n");
- if (alarm_id < 0 || alarm_info == NULL) {
- LOGE("[alarm-lib]:alarm_info is null or alar_id is invalid[%d].", alarm_id);
+ if (alarm_id < 0 || base_info == NULL) {
+ LOGE("[alarm-lib]:base_info is null or alar_id is invalid[%d].", alarm_id);
return ERR_ALARM_INVALID_PARAM;
}
- if (!_send_alarm_get_info(alarm_context, alarm_id, alarm_info, &error_code))
+ if (!_send_alarm_get_info(alarm_context, alarm_id, base_info, &error_code))
return error_code;
return ALARMMGR_RESULT_SUCCESS;
@@ -1638,12 +1665,6 @@ EXPORT_API int alarmmgr_set_systime64_async(time_t new_time, alarm_set_time_cb_t
result_cb, user_param))
return ERR_ALARM_SYSTEM_FAIL;
} else {
-#if !(GLIB_CHECK_VERSION(2, 32, 0))
- g_thread_init(NULL);
-#endif
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
param = g_try_new0(struct alarm_async_param_t, 1);
if (param == NULL) {
LOGE("Failed to alloc param");
@@ -1689,12 +1710,6 @@ EXPORT_API int alarmmgr_set_systime_with_propagation_delay_async(struct timespec
new_time, req_time, result_cb, user_param))
return ERR_ALARM_SYSTEM_FAIL;
} else {
-#if !(GLIB_CHECK_VERSION(2, 32, 0))
- g_thread_init(NULL);
-#endif
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
param = g_try_new0(struct alarm_async_param_t, 1);
if (param == NULL) {
LOGE("Failed to alloc param");
@@ -1770,7 +1785,7 @@ EXPORT_API int alarmmgr_get_global(const alarm_id_t alarm_id,
EXPORT_API int alarmmgr_update_alarm(alarm_id_t alarm_id,
alarm_entry_t *alarm, int update_flag)
{
- alarm_info_t *alarm_info;
+ base_info_t *base_info;
int ret;
LOGD("[alarm-lib]:alarmmgr_update_alarm() is called\n");
@@ -1780,8 +1795,8 @@ EXPORT_API int alarmmgr_update_alarm(alarm_id_t alarm_id,
return ERR_ALARM_INVALID_PARAM;
}
- alarm_info = (alarm_info_t *) alarm;
- if (alarm_info == NULL || alarm_id <= 0) {
+ base_info = (base_info_t *) alarm;
+ if (base_info == NULL || alarm_id <= 0) {
LOGE("[alarm-lib]:alarm is NULL or invalid alarm_id[%d]\n", alarm_id);
return ERR_ALARM_INVALID_PARAM;
}
@@ -1793,18 +1808,18 @@ EXPORT_API int alarmmgr_update_alarm(alarm_id_t alarm_id,
return ret;
LOGD("start(%d-%d-%d, %02d:%02d:%02d), end(%d-%d-%d), repeat(%d), interval(%ld), type(%d)",
- alarm_info->start.day, alarm_info->start.month, alarm_info->start.year,
- alarm_info->start.hour, alarm_info->start.min, alarm_info->start.sec,
- alarm_info->end.year, alarm_info->end.month, alarm_info->end.day,
- alarm_info->mode.repeat, alarm_info->mode.u_interval.interval, alarm_info->alarm_type);
+ base_info->start.day, base_info->start.month, base_info->start.year,
+ base_info->start.hour, base_info->start.min, base_info->start.sec,
+ base_info->end.year, base_info->end.month, base_info->end.day,
+ base_info->mode.repeat, base_info->mode.u_interval.interval, base_info->alarm_type);
if (update_flag == ALARM_UPDATE_FLAG_TIME) {
- error_code = __check_validation(alarm_info, __FUNCTION__);
+ error_code = __check_validation(base_info, __FUNCTION__);
if (error_code != ALARMMGR_RESULT_SUCCESS)
return error_code;
}
- if (!_send_alarm_update(alarm_context, alarm_id, alarm_info, update_flag, &error_code))
+ if (!_send_alarm_update(alarm_context, alarm_id, base_info, update_flag, &error_code))
return error_code;
return ALARMMGR_RESULT_SUCCESS;
diff --git a/mock/aul_mock.cc b/mock/aul_mock.cc
new file mode 100644
index 0000000..521dc1b
--- /dev/null
+++ b/mock/aul_mock.cc
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "aul_mock.h"
+
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" int aul_app_get_appid_bypid(int arg1, char* arg2, int arg3) {
+ return MOCK_HOOK_P3(AulMock, aul_app_get_appid_bypid, arg1, arg2, arg3);
+}
+
+extern "C" int aul_app_get_pkgid_bypid_for_uid(int arg1, char* arg2, int arg3,
+ uid_t arg4) {
+ return MOCK_HOOK_P4(AulMock, aul_app_get_pkgid_bypid_for_uid, arg1, arg2,
+ arg3, arg4);
+}
diff --git a/mock/aul_mock.h b/mock/aul_mock.h
new file mode 100644
index 0000000..ce34f54
--- /dev/null
+++ b/mock/aul_mock.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_AUL_MOCK_H_
+#define UNIT_TESTS_MOCK_AUL_MOCK_H_
+
+#include <aul.h>
+#include <bundle.h>
+#include <bundle_cpp.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class AulMock : public virtual ModuleMock {
+ public:
+ AulMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+
+ ON_CALL(*this, aul_app_get_appid_bypid(_, _, _))
+ .WillByDefault(Invoke([&](int pid, char *appid, int len) -> int {
+ snprintf(appid, len, "test_appid");
+ return 0;
+ }));
+ }
+
+ virtual ~AulMock() {}
+
+ MOCK_METHOD3(aul_app_get_appid_bypid, int (int, char*, int));
+ MOCK_METHOD4(aul_app_get_pkgid_bypid_for_uid, int (int, char*, int, uid_t));
+};
+
+#endif // UNIT_TESTS_MOCK_AUL_MOCK_H_
+
diff --git a/mock/dbus_mock.cc b/mock/dbus_mock.cc
new file mode 100644
index 0000000..77ff661
--- /dev/null
+++ b/mock/dbus_mock.cc
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dbus_mock.h"
+
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" GDBusConnection* g_bus_get_sync(GBusType bus_type,
+ GCancellable* cancellable, GError** error) {
+ return MOCK_HOOK_P3(DbusMock, g_bus_get_sync, bus_type, cancellable, error);
+}
+
+extern "C" GDBusProxy* g_dbus_proxy_new_sync(GDBusConnection* arg1,
+ GDBusProxyFlags arg2, GDBusInterfaceInfo* arg3, const gchar* arg4,
+ const gchar* arg5, const gchar* arg6, GCancellable* arg7, GError** arg8) {
+ return MOCK_HOOK_P8(DbusMock, g_dbus_proxy_new_sync, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7, arg8);
+}
+
+extern "C" GDBusNodeInfo* g_dbus_node_info_new_for_xml(const gchar* arg1,
+ GError** arg2) {
+ return MOCK_HOOK_P2(DbusMock, g_dbus_node_info_new_for_xml, arg1, arg2);
+}
+
+extern "C" guint g_bus_own_name_on_connection(GDBusConnection* arg1,
+ const gchar* arg2, GBusNameOwnerFlags arg3, GBusNameAcquiredCallback arg4,
+ GBusNameLostCallback arg5, gpointer arg6, GDestroyNotify arg7) {
+ return MOCK_HOOK_P7(DbusMock, g_bus_own_name_on_connection, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7);
+}
+
+extern "C" guint g_dbus_connection_register_object(GDBusConnection* arg1,
+ const gchar* arg2, GDBusInterfaceInfo* arg3,
+ const GDBusInterfaceVTable* arg4, gpointer arg5, GDestroyNotify arg6,
+ GError** arg7) {
+ return MOCK_HOOK_P7(DbusMock, g_dbus_connection_register_object, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7);
+}
+
+extern "C" gboolean g_dbus_connection_unregister_object(GDBusConnection* arg1,
+ guint arg2) {
+ return MOCK_HOOK_P2(DbusMock, g_dbus_connection_unregister_object, arg1,
+ arg2);
+}
+
+extern "C" void g_dbus_method_invocation_return_value(
+ GDBusMethodInvocation* arg1, GVariant* arg2) {
+ MOCK_HOOK_P2(DbusMock, g_dbus_method_invocation_return_value, arg1, arg2);
+}
+
+extern "C" void g_bus_unown_name(guint arg1) {
+ MOCK_HOOK_P1(DbusMock, g_bus_unown_name, arg1);
+}
+
+extern "C" gboolean g_dbus_connection_emit_signal(GDBusConnection* arg1,
+ const gchar* arg2, const gchar* arg3, const gchar* arg4, const gchar* arg5,
+ GVariant* arg6, GError** arg7) {
+ return MOCK_HOOK_P7(DbusMock, g_dbus_connection_emit_signal, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7);
+}
+
+extern "C" gboolean g_dbus_connection_flush_sync(GDBusConnection* arg1,
+ GCancellable* arg2, GError** arg3) {
+ return MOCK_HOOK_P3(DbusMock, g_dbus_connection_flush_sync, arg1, arg2,
+ arg3);
+}
+
+extern "C" void g_dbus_node_info_unref(GDBusNodeInfo* arg1) {
+ MOCK_HOOK_P1(DbusMock, g_dbus_node_info_unref, arg1);
+}
+
+extern "C" guint g_dbus_connection_signal_subscribe(GDBusConnection* arg1,
+ const gchar* arg2, const gchar* arg3, const gchar* arg4, const gchar* arg5,
+ const gchar* arg6, GDBusSignalFlags arg7, GDBusSignalCallback arg8,
+ gpointer arg9, GDestroyNotify arg10) {
+ return MOCK_HOOK_P10(DbusMock, g_dbus_connection_signal_subscribe, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
+}
+
+extern "C" GVariant* g_dbus_proxy_call_sync(GDBusProxy* arg1,
+ const gchar* arg2, GVariant* arg3, GDBusCallFlags arg4, gint arg5,
+ GCancellable* arg6, GError** arg7) {
+ return MOCK_HOOK_P7(DbusMock, g_dbus_proxy_call_sync, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7);
+}
+
+extern "C" void g_dbus_proxy_call(GDBusProxy* arg1, const gchar* arg2,
+ GVariant* arg3, GDBusCallFlags arg4, gint arg5, GCancellable* arg6,
+ GAsyncReadyCallback arg7, gpointer arg8) {
+ return MOCK_HOOK_P8(DbusMock, g_dbus_proxy_call, arg1, arg2,
+ arg3, arg4, arg5, arg6, arg7, arg8);
+}
diff --git a/mock/dbus_mock.h b/mock/dbus_mock.h
new file mode 100644
index 0000000..0e01c5b
--- /dev/null
+++ b/mock/dbus_mock.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_DBUS_MOCK_H_
+#define UNIT_TESTS_MOCK_DBUS_MOCK_H_
+
+#include <gmock/gmock.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include "module_mock.h"
+
+class DbusMock : public virtual ModuleMock {
+ public:
+ DbusMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+
+ static int dummy;
+ GDBusConnection* conn = (GDBusConnection*)&dummy;
+
+ ON_CALL(*this, g_bus_get_sync(_, _, _))
+ .WillByDefault(Return(conn));
+ }
+
+ MOCK_METHOD3(g_bus_get_sync, GDBusConnection* (GBusType, GCancellable*,
+ GError**));
+ MOCK_METHOD8(g_dbus_proxy_new_sync, GDBusProxy* (GDBusConnection*,
+ GDBusProxyFlags, GDBusInterfaceInfo*, const gchar*, const gchar*,
+ const gchar*, GCancellable*, GError**));
+ MOCK_METHOD2(g_dbus_node_info_new_for_xml, GDBusNodeInfo* (const gchar*,
+ GError**));
+ MOCK_METHOD7(g_bus_own_name_on_connection, guint (GDBusConnection*,
+ const gchar*, GBusNameOwnerFlags, GBusNameAcquiredCallback,
+ GBusNameLostCallback, gpointer, GDestroyNotify));
+ MOCK_METHOD7(g_dbus_connection_register_object, guint (GDBusConnection*,
+ const gchar*, GDBusInterfaceInfo*, const GDBusInterfaceVTable*, gpointer,
+ GDestroyNotify, GError**));
+ MOCK_METHOD2(g_dbus_connection_unregister_object, gboolean (GDBusConnection*,
+ guint));
+ MOCK_METHOD2(g_dbus_method_invocation_return_value,
+ void (GDBusMethodInvocation*, GVariant*));
+ MOCK_METHOD1(g_bus_unown_name, void (guint));
+ MOCK_METHOD7(g_dbus_connection_emit_signal, gboolean (GDBusConnection*,
+ const gchar*, const gchar*, const gchar*, const gchar*, GVariant*,
+ GError**));
+ MOCK_METHOD3(g_dbus_connection_flush_sync, gboolean (GDBusConnection*,
+ GCancellable*, GError**));
+ MOCK_METHOD1(g_dbus_node_info_unref, void (GDBusNodeInfo*));
+ MOCK_METHOD10(g_dbus_connection_signal_subscribe, guint (GDBusConnection*,
+ const gchar*, const gchar*, const gchar*, const gchar*, const gchar*,
+ GDBusSignalFlags, GDBusSignalCallback, gpointer, GDestroyNotify));
+ MOCK_METHOD7(g_dbus_proxy_call_sync, GVariant* (GDBusProxy*, const gchar*,
+ GVariant*, GDBusCallFlags, gint, GCancellable*, GError**));
+ MOCK_METHOD8(g_dbus_proxy_call, void (GDBusProxy*, const gchar*, GVariant*,
+ GDBusCallFlags, gint, GCancellable*, GAsyncReadyCallback, gpointer));
+};
+
+#endif // UNIT_TESTS_MOCK_DBUS_MOCK_H_
+
diff --git a/mock/fff.h b/mock/fff.h
deleted file mode 100644
index 6289a58..0000000
--- a/mock/fff.h
+++ /dev/null
@@ -1,6493 +0,0 @@
-/*
-LICENSE
-
-The MIT License (MIT)
-
-Copyright (c) 2010 Michael Long
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-#ifndef FAKE_FUNCTIONS
-#define FAKE_FUNCTIONS
-
-#include <stdarg.h>
-#include <string.h> /* For memset and memcpy */
-
-#define FFF_MAX_ARGS (20u)
-#ifndef FFF_ARG_HISTORY_LEN
- #define FFF_ARG_HISTORY_LEN (50u)
-#endif
-#ifndef FFF_CALL_HISTORY_LEN
- #define FFF_CALL_HISTORY_LEN (50u)
-#endif
-/* -- INTERNAL HELPER MACROS -- */
-#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
- FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
- FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
-#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
- FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
- FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
-
-/* Defining a function to reset a fake function */
-#define RESET_FAKE(FUNCNAME) { \
- FUNCNAME##_reset(); \
-} \
-
-
-#define DECLARE_ARG(type, n, FUNCNAME) \
- type arg##n##_val; \
- type arg##n##_history[FFF_ARG_HISTORY_LEN];
-
-#define DECLARE_ALL_FUNC_COMMON \
- unsigned int call_count; \
- unsigned int arg_history_len; \
- unsigned int arg_histories_dropped; \
-
-#define DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- RETURN_TYPE return_val_history[FFF_ARG_HISTORY_LEN];
-
-#define SAVE_ARG(FUNCNAME, n) \
- memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
-
-#define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
- FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
-
-#define SAVE_RET_HISTORY(FUNCNAME, RETVAL) \
- if ((FUNCNAME##_fake.call_count - 1) < FFF_ARG_HISTORY_LEN) \
- memcpy((void *)&FUNCNAME##_fake.return_val_history[FUNCNAME##_fake.call_count - 1], (const void *) &RETVAL, sizeof(RETVAL)); \
-
-#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
- memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
-
-#define HISTORY_DROPPED(FUNCNAME) \
- FUNCNAME##_fake.arg_histories_dropped++
-
-#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- RETURN_TYPE return_val; \
- int return_val_seq_len; \
- int return_val_seq_idx; \
- RETURN_TYPE * return_val_seq; \
-
-#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- int custom_fake_seq_len; \
- int custom_fake_seq_idx; \
-
-#define INCREMENT_CALL_COUNT(FUNCNAME) \
- FUNCNAME##_fake.call_count++
-
-#define RETURN_FAKE_RESULT(FUNCNAME) \
- if (FUNCNAME##_fake.return_val_seq_len){ /* then its a sequence */ \
- if(FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) { \
- SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx]) \
- return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++]; \
- } \
- SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]) \
- return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; /* return last element */ \
- } \
- SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val) \
- return FUNCNAME##_fake.return_val; \
-
-#ifdef __cplusplus
- #define FFF_EXTERN_C extern "C"{
- #define FFF_END_EXTERN_C }
-#else /* ansi c */
- #define FFF_EXTERN_C
- #define FFF_END_EXTERN_C
-#endif /* cpp/ansi c */
-
-#define DEFINE_RESET_FUNCTION(FUNCNAME) \
- void FUNCNAME##_reset(void){ \
- memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \
- FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \
- }
-/* -- END INTERNAL HELPER MACROS -- */
-
-typedef void (*fff_function_t)(void);
-typedef struct {
- fff_function_t call_history[FFF_CALL_HISTORY_LEN];
- unsigned int call_history_idx;
-} fff_globals_t;
-
-FFF_EXTERN_C
-extern fff_globals_t fff;
-FFF_END_EXTERN_C
-
-#define DEFINE_FFF_GLOBALS \
- FFF_EXTERN_C \
- fff_globals_t fff; \
- FFF_END_EXTERN_C
-
-#define FFF_RESET_HISTORY() \
- fff.call_history_idx = 0; \
- memset(fff.call_history, 0, sizeof(fff.call_history));
-
-#define REGISTER_CALL(function) \
- if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
- fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
-
-#define DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(void); \
- void(**custom_fake_seq)(void); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(void); \
-
-#define DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(void){ \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC0(FUNCNAME) \
- DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
- DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
-
-
-#define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0); \
- void(**custom_fake_seq)(ARG0_TYPE arg0); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0); \
-
-#define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0){ \
- SAVE_ARG(FUNCNAME, 0); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
- DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
- DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-
-#define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-
-#define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-
-#define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-
-#define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-
-#define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-
-#define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
-
-#define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
-
-#define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
-
-#define DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
-
-#define DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
-
-#define DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
-
-#define DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
-
-#define DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
-
-#define DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
-
-#define DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
-
-#define DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
-
-#define DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
-
-#define DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
-
-#define DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- SAVE_ARG(FUNCNAME, 19); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- SAVE_ARG_HISTORY(FUNCNAME, 19); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- } \
- else{ \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(void); \
- RETURN_TYPE(**custom_fake_seq)(void); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(void); \
-
-#define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(void){ \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
- DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
- DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0); \
-
-#define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
- SAVE_ARG(FUNCNAME, 0); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
- DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
- DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-
-#define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
- DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-
-#define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
- DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-
-#define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
- DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-
-#define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
- DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-
-#define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
- DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-
-#define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
- } \
- } \
- 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) \
-
-#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
- DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
-
-#define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
- } \
- } \
- 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) \
-
-#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
- DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
-
-#define DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
- } \
- } \
- 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) \
-
-#define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
- DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
-
-#define DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
- DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
-
-#define DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
- DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
-
-#define DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
- DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
-
-#define DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
- DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
-
-#define DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
- DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
-
-#define DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
- DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
-
-#define DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
- DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
-
-#define DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
- DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
-
-#define DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
- DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
-
-#define DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
- DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
-
-#define DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- SAVE_ARG(FUNCNAME, 19); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- SAVE_ARG_HISTORY(FUNCNAME, 19); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- else{ \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- } \
- } \
- if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
- DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg0); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg0); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg0); \
- FUNCNAME##_fake.custom_fake(arg0, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg1); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg1); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg1); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg2); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg2); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg2); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg3); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg3); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg3); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg4); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg4); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg4); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg5); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg5); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg5); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg6); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg6); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg6); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg7); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg7); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg7); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg8); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg8); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg8); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg9); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg9); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg9); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg10); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg10); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg10); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg11); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg11); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg11); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg12); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg12); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg12); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg13); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg13); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg13); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg14); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg14); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg14); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg15); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg15); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg15); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg16); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg16); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg16); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg17); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg17); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg17); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
- void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg18); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- va_end(ap); \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg18); \
- FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- va_end(ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- va_list ap; \
- va_start(ap, arg18); \
- FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- va_end(ap); \
- } \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg0); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg0); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg0); \
- ret = FUNCNAME##_fake.custom_fake(arg0, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg1); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg1); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg1); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg2); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg2); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg2); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg3); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg3); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg3); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg4); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg4); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg4); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg5); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg5); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg5); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg6); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg6); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg6); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg7); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg7); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg7); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg8); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg8); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg8); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg9); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg9); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg9); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg10); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg10); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg10); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg11); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg11); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg11); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg12); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg12); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg12); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg13); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg13); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg13); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg14); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg14); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg14); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg15); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg15); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg15); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg16); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg16); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg16); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg17); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg17); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg17); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- typedef struct FUNCNAME##_Fake { \
- DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
- DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
- DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
- DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
- DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
- DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
- DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
- DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
- DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
- DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
- DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
- DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
- DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
- DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
- DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
- DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
- DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
- DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
- DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
- DECLARE_ALL_FUNC_COMMON \
- DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
- DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
- DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
- RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
- RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
- } FUNCNAME##_Fake; \
- extern FUNCNAME##_Fake FUNCNAME##_fake; \
- void FUNCNAME##_reset(void); \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- FUNCNAME##_Fake FUNCNAME##_fake; \
- RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
- SAVE_ARG(FUNCNAME, 0); \
- SAVE_ARG(FUNCNAME, 1); \
- SAVE_ARG(FUNCNAME, 2); \
- SAVE_ARG(FUNCNAME, 3); \
- SAVE_ARG(FUNCNAME, 4); \
- SAVE_ARG(FUNCNAME, 5); \
- SAVE_ARG(FUNCNAME, 6); \
- SAVE_ARG(FUNCNAME, 7); \
- SAVE_ARG(FUNCNAME, 8); \
- SAVE_ARG(FUNCNAME, 9); \
- SAVE_ARG(FUNCNAME, 10); \
- SAVE_ARG(FUNCNAME, 11); \
- SAVE_ARG(FUNCNAME, 12); \
- SAVE_ARG(FUNCNAME, 13); \
- SAVE_ARG(FUNCNAME, 14); \
- SAVE_ARG(FUNCNAME, 15); \
- SAVE_ARG(FUNCNAME, 16); \
- SAVE_ARG(FUNCNAME, 17); \
- SAVE_ARG(FUNCNAME, 18); \
- if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
- SAVE_ARG_HISTORY(FUNCNAME, 0); \
- SAVE_ARG_HISTORY(FUNCNAME, 1); \
- SAVE_ARG_HISTORY(FUNCNAME, 2); \
- SAVE_ARG_HISTORY(FUNCNAME, 3); \
- SAVE_ARG_HISTORY(FUNCNAME, 4); \
- SAVE_ARG_HISTORY(FUNCNAME, 5); \
- SAVE_ARG_HISTORY(FUNCNAME, 6); \
- SAVE_ARG_HISTORY(FUNCNAME, 7); \
- SAVE_ARG_HISTORY(FUNCNAME, 8); \
- SAVE_ARG_HISTORY(FUNCNAME, 9); \
- SAVE_ARG_HISTORY(FUNCNAME, 10); \
- SAVE_ARG_HISTORY(FUNCNAME, 11); \
- SAVE_ARG_HISTORY(FUNCNAME, 12); \
- SAVE_ARG_HISTORY(FUNCNAME, 13); \
- SAVE_ARG_HISTORY(FUNCNAME, 14); \
- SAVE_ARG_HISTORY(FUNCNAME, 15); \
- SAVE_ARG_HISTORY(FUNCNAME, 16); \
- SAVE_ARG_HISTORY(FUNCNAME, 17); \
- SAVE_ARG_HISTORY(FUNCNAME, 18); \
- } \
- else{ \
- HISTORY_DROPPED(FUNCNAME); \
- } \
- INCREMENT_CALL_COUNT(FUNCNAME); \
- REGISTER_CALL(FUNCNAME); \
- if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
- if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
- va_list ap; \
- va_start(ap, arg18); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- } \
- else{ \
- va_list ap; \
- va_start(ap, arg18); \
- RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- va_end(ap); \
- return ret; \
- return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- } \
- } \
- if(FUNCNAME##_fake.custom_fake){ \
- RETURN_TYPE ret; \
- va_list ap; \
- va_start(ap, arg18); \
- ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
- va_end(ap); \
- SAVE_RET_HISTORY(FUNCNAME, ret); \
- return ret; \
- } \
- RETURN_FAKE_RESULT(FUNCNAME) \
- } \
- DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
- DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
-
-/* MSVC expand macro fix */
-#define EXPAND(x) x
-
-#define PP_NARG_MINUS2(...) EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2()))
-
-#define PP_NARG_MINUS2_(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__))
-
-#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
-
-#define PP_RSEQ_N_MINUS2() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-
-#define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1()))
-
-#define PP_NARG_MINUS1_(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__))
-
-#define PP_ARG_MINUS1_N( _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
-
-#define PP_RSEQ_N_MINUS1() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
-
-
-
-/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
-
-#define FAKE_VALUE_FUNC(...) EXPAND(FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VALUE_(N,...) EXPAND(FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define FUNC_VALUE_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define FAKE_VOID_FUNC(...) EXPAND(FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VOID_(N,...) EXPAND(FUNC_VOID_N(N,__VA_ARGS__))
-
-#define FUNC_VOID_N(N,...) EXPAND(FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define FAKE_VALUE_FUNC_VARARG(...) EXPAND(FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VALUE_VARARG_(N,...) EXPAND(FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define FUNC_VALUE_VARARG_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define FAKE_VOID_FUNC_VARARG(...) EXPAND(FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VOID_VARARG_(N,...) EXPAND(FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define FUNC_VOID_VARARG_N(N,...) EXPAND(FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
-
-#define DECLARE_FAKE_VALUE_FUNC(...) EXPAND(DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_(N,...) EXPAND(DECLARE_FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VOID_FUNC(...) EXPAND(DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_(N,...) EXPAND(DECLARE_FUNC_VOID_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_VARARG_(N,...) EXPAND(DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_VARARG_(N,...) EXPAND(DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
-
-#define DEFINE_FAKE_VALUE_FUNC(...) EXPAND(DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_(N,...) EXPAND(DEFINE_FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VOID_FUNC(...) EXPAND(DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_(N,...) EXPAND(DEFINE_FUNC_VOID_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_VARARG_(N,...) EXPAND(DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_VARARG_(N,...) EXPAND(DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-
-#endif /* FAKE_FUNCTIONS */
diff --git a/mock/gio_fake.h b/mock/gio_fake.h
deleted file mode 100644
index 5192754..0000000
--- a/mock/gio_fake.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_GIO_H_
-#define MOCK_GIO_H_
-
-#include "mock.h"
-
-#include <glib.h>
-#include <gio/gio.h>
-
-DECLARE_FAKE_VALUE_FUNC(GDBusConnection*, g_bus_get_sync,
- GBusType, GCancellable*, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(GDBusProxy*, g_dbus_proxy_new_sync,
- GDBusConnection*, GDBusProxyFlags, GDBusInterfaceInfo*,
- const gchar*, const gchar*, const gchar*, GCancellable*, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(GDBusNodeInfo*, g_dbus_node_info_new_for_xml,
- const gchar*, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(guint, g_bus_own_name_on_connection, GDBusConnection*,
- const gchar*, GBusNameOwnerFlags,GBusNameAcquiredCallback,
- GBusNameLostCallback, gpointer, GDestroyNotify);
-
-DECLARE_FAKE_VALUE_FUNC(guint, g_dbus_connection_register_object,
- GDBusConnection*, const gchar*, GDBusInterfaceInfo*,
- const GDBusInterfaceVTable*, gpointer, GDestroyNotify, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_unregister_object,
- GDBusConnection*, guint);
-
-DECLARE_FAKE_VOID_FUNC(g_dbus_method_invocation_return_value,
- GDBusMethodInvocation*, GVariant*);
-
-DECLARE_FAKE_VALUE_FUNC(GVariant*, g_dbus_connection_call_sync, GDBusConnection*,
- const gchar*, const gchar*, const gchar*, const gchar*, GVariant*,
- const GVariantType*, GDBusCallFlags, gint, GCancellable*, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(const gchar*, g_dbus_method_invocation_get_sender,
- GDBusMethodInvocation*);
-
-DECLARE_FAKE_VOID_FUNC(g_bus_unown_name, guint);
-
-DECLARE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_emit_signal,
- GDBusConnection*, const gchar*, const gchar*, const gchar*, const gchar*,
- GVariant*, GError**);
-
-DECLARE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_flush_sync,
- GDBusConnection*, GCancellable*, GError**);
-
-DECLARE_FAKE_VOID_FUNC(g_dbus_node_info_unref, GDBusNodeInfo*);
-
-DECLARE_FAKE_VALUE_FUNC(guint, g_dbus_connection_signal_subscribe,
- GDBusConnection*, const gchar*, const gchar*, const gchar*, const gchar*,
- const gchar*, GDBusSignalFlags, GDBusSignalCallback, gpointer,
- GDestroyNotify);
-
-DECLARE_FAKE_VALUE_FUNC(GVariant*, g_dbus_proxy_call_sync,
- GDBusProxy*, const gchar*, GVariant*, GDBusCallFlags, gint,
- GCancellable*, GError**);
-
-DECLARE_FAKE_VOID_FUNC(g_dbus_proxy_call,
- GDBusProxy*, const gchar*, GVariant*, GDBusCallFlags, gint,
- GCancellable*, GAsyncReadyCallback, gpointer);
-#endif //MOCK_GIO_H_
diff --git a/mock/glib_fake.h b/mock/glib_fake.h
deleted file mode 100755
index a46077a..0000000
--- a/mock/glib_fake.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_GLIB_H_
-#define MOCK_GLIB_H_
-
-#include <glib.h>
-
-#include "mock.h"
-
-DECLARE_FAKE_VALUE_FUNC(gsize, g_variant_get_size, GVariant*);
-DECLARE_FAKE_VALUE_FUNC3_VARARG(gboolean, g_variant_iter_loop, GVariantIter*,
- const gchar*, ...);
-DECLARE_FAKE_VOID_FUNC(g_variant_iter_free, GVariantIter*);
-DECLARE_FAKE_VOID_FUNC(g_variant_unref, GVariant*);
-DECLARE_FAKE_VALUE_FUNC(gpointer, g_hash_table_lookup, GHashTable*, gconstpointer);
-DECLARE_FAKE_VALUE_FUNC(guint, g_hash_table_foreach_remove, GHashTable*,
- GHRFunc, gpointer);
-DECLARE_FAKE_VALUE_FUNC(gboolean, g_hash_table_insert, GHashTable*,
- gpointer, gpointer);
-
-#endif //MOCK_GLIB_H_
diff --git a/mock/aul_fake.h b/mock/glib_mock.cc
index 88393ab..1fa52e9 100644
--- a/mock/aul_fake.h
+++ b/mock/glib_mock.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,15 +14,11 @@
* limitations under the License.
*/
-#ifndef MOCK_AUL_H_
-#define MOCK_AUL_H_
+#include "glib_mock.h"
-#include <aul.h>
+#include "mock_hook.h"
+#include "test_fixture.h"
-#include "mock.h"
-
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_get_appid_bypid, int, char*, int);
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_get_pkgid_bypid_for_uid, int, char*, int,
- uid_t);
-
-#endif //MOCK_AUL_H_
+extern "C" gsize g_variant_get_size(GVariant* arg1) {
+ return MOCK_HOOK_P1(GlibMock, g_variant_get_size, arg1);
+}
diff --git a/mock/notification_fake.h b/mock/glib_mock.h
index 28e86f2..6aed636 100644
--- a/mock/notification_fake.h
+++ b/mock/glib_mock.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,17 +14,24 @@
* limitations under the License.
*/
-#ifndef MOCK_NOTIFICATION_H_
-#define MOCK_NOTIFICATION_H_
+#ifndef UNIT_TESTS_MOCK_GLIB_MOCK_H_
+#define UNIT_TESTS_MOCK_GLIB_MOCK_H_
+#include <gio/gio.h>
#include <glib.h>
-#include <notification.h>
-#include <notification_ipc.h>
+#include <gmock/gmock.h>
-#include "mock.h"
+#include "module_mock.h"
-DECLARE_FAKE_VALUE_FUNC(notification_h, notification_create, notification_type_e);
-DECLARE_FAKE_VALUE_FUNC(GVariant*, notification_ipc_make_gvariant_from_noti,
- notification_h, bool);
+class GlibMock : public virtual ModuleMock {
+ public:
+ GlibMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+ }
-#endif //MOCK_NOTIFICATION_H_
+ MOCK_METHOD1(g_variant_get_size, gsize (GVariant*));
+};
+
+#endif // UNIT_TESTS_MOCK_GLIB_MOCK_H_
diff --git a/mock/mock.cc b/mock/mock.cc
deleted file mode 100644
index 11aa6d1..0000000
--- a/mock/mock.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "aul_fake.h"
-#include "gio_fake.h"
-#include "glib_fake.h"
-#include "mock.h"
-#include "notification_fake.h"
-#include "pkgmgr_info_fake.h"
-
-DEFINE_FFF_GLOBALS;
-
-/* gio.h */
-DEFINE_FAKE_VALUE_FUNC(GDBusConnection*, g_bus_get_sync,
- GBusType, GCancellable*, GError**);
-DEFINE_FAKE_VALUE_FUNC(GDBusProxy*, g_dbus_proxy_new_sync,
- GDBusConnection*, GDBusProxyFlags, GDBusInterfaceInfo*,
- const gchar*, const gchar*, const gchar*, GCancellable*, GError**);
-DEFINE_FAKE_VALUE_FUNC(GDBusNodeInfo*, g_dbus_node_info_new_for_xml,
- const gchar*, GError**);
-DEFINE_FAKE_VALUE_FUNC(guint, g_bus_own_name_on_connection, GDBusConnection*,
- const gchar*, GBusNameOwnerFlags,GBusNameAcquiredCallback,
- GBusNameLostCallback, gpointer, GDestroyNotify);
-DEFINE_FAKE_VALUE_FUNC(guint, g_dbus_connection_register_object,
- GDBusConnection*, const gchar*, GDBusInterfaceInfo*,
- const GDBusInterfaceVTable*, gpointer, GDestroyNotify, GError**);
-DEFINE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_unregister_object,
- GDBusConnection*, guint);
-DEFINE_FAKE_VOID_FUNC(g_dbus_method_invocation_return_value,
- GDBusMethodInvocation*, GVariant*);
-DEFINE_FAKE_VOID_FUNC(g_bus_unown_name, guint);
-DEFINE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_emit_signal,
- GDBusConnection*, const gchar*, const gchar*, const gchar*, const gchar*,
- GVariant*, GError**);
-DEFINE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_flush_sync,
- GDBusConnection*, GCancellable*, GError**);
-DEFINE_FAKE_VOID_FUNC(g_dbus_node_info_unref, GDBusNodeInfo*);
-DEFINE_FAKE_VALUE_FUNC(guint, g_dbus_connection_signal_subscribe,
- GDBusConnection*, const gchar*, const gchar*, const gchar*, const gchar*,
- const gchar*, GDBusSignalFlags, GDBusSignalCallback, gpointer,
- GDestroyNotify);
-DEFINE_FAKE_VALUE_FUNC(GVariant*, g_dbus_proxy_call_sync,
- GDBusProxy*, const gchar*, GVariant*, GDBusCallFlags, gint,
- GCancellable*, GError**);
-DEFINE_FAKE_VOID_FUNC(g_dbus_proxy_call,
- GDBusProxy*, const gchar*, GVariant*, GDBusCallFlags, gint,
- GCancellable*, GAsyncReadyCallback, gpointer);
-
-/* glib_fake.h */
-DEFINE_FAKE_VALUE_FUNC(const gchar*, g_dbus_method_invocation_get_sender, GDBusMethodInvocation*);
-DEFINE_FAKE_VALUE_FUNC(gsize, g_variant_get_size, GVariant*);
-DEFINE_FAKE_VALUE_FUNC3_VARARG(gboolean, g_variant_iter_loop, GVariantIter*, const gchar*, ...);
-DEFINE_FAKE_VOID_FUNC(g_variant_iter_free, GVariantIter*);
-DEFINE_FAKE_VOID_FUNC(g_variant_unref, GVariant*);
-DEFINE_FAKE_VALUE_FUNC(gpointer, g_hash_table_lookup, GHashTable*, gconstpointer);
-DEFINE_FAKE_VALUE_FUNC(guint, g_hash_table_foreach_remove, GHashTable*,
- GHRFunc, gpointer);
-DEFINE_FAKE_VALUE_FUNC(gboolean, g_hash_table_insert, GHashTable*,
- gpointer, gpointer);
-
-/* aul.h */
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_get_appid_bypid, int, char*, int);
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_get_pkgid_bypid_for_uid, int, char*, int, uid_t);
-
-/* notification.h */
-DEFINE_FAKE_VALUE_FUNC(notification_h, notification_create, notification_type_e);
-DEFINE_FAKE_VALUE_FUNC(GVariant*, notification_ipc_make_gvariant_from_noti, notification_h, bool);
-
-/* pkgmgr_info_fake.h */
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_get_usr_pkginfo, const char *,
- uid_t, pkgmgrinfo_pkginfo_h*);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_get_api_version,
- pkgmgrinfo_pkginfo_h, char **);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_is_global,
- pkgmgrinfo_pkginfo_h, bool *);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_destroy_pkginfo,
- pkgmgrinfo_pkginfo_h);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_get_usr_appinfo, const char *,
- uid_t, pkgmgrinfo_appinfo_h*);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_get_component_type,
- pkgmgrinfo_appinfo_h, char **);
-DEFINE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_destroy_appinfo,
- pkgmgrinfo_appinfo_h);
diff --git a/mock/mock_hook.h b/mock/mock_hook.h
new file mode 100644
index 0000000..e212cc1
--- /dev/null
+++ b/mock/mock_hook.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_MOCK_HOOK_H_
+#define UNIT_TESTS_MOCK_MOCK_HOOK_H_
+
+#define MOCK_HOOK_P0(MOCK_CLASS, f) \
+ TestFixture::GetMock<MOCK_CLASS>().f()
+#define MOCK_HOOK_P1(MOCK_CLASS, f, p1) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1)
+#define MOCK_HOOK_P2(MOCK_CLASS, f, p1, p2) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2)
+#define MOCK_HOOK_P3(MOCK_CLASS, f, p1, p2, p3) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3)
+#define MOCK_HOOK_P4(MOCK_CLASS, f, p1, p2, p3, p4) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4)
+#define MOCK_HOOK_P5(MOCK_CLASS, f, p1, p2, p3, p4, p5) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5)
+#define MOCK_HOOK_P6(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6)
+#define MOCK_HOOK_P7(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7)
+#define MOCK_HOOK_P8(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8) \
+ TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7, p8)
+#define MOCK_HOOK_P10(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
+ TestFixture::GetMock<MOCK_CLASS>().f( \
+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
+#define MOCK_HOOK_P11(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
+ TestFixture::GetMock<MOCK_CLASS>().f( \
+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
+
+#endif // UNIT_TESTS_MOCK_MOCK_HOOK_H_
diff --git a/mock/module_mock.h b/mock/module_mock.h
new file mode 100644
index 0000000..9b19d89
--- /dev/null
+++ b/mock/module_mock.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_MODULE_MOCK_H_
+#define UNIT_TESTS_MOCK_MODULE_MOCK_H_
+
+class ModuleMock {
+ public:
+ virtual ~ModuleMock() {}
+};
+
+#endif // UNIT_TESTS_MOCK_MODULE_MOCK_H_
diff --git a/mock/notification_mock.cc b/mock/notification_mock.cc
new file mode 100644
index 0000000..5a7fec6
--- /dev/null
+++ b/mock/notification_mock.cc
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "notification_mock.h"
+
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" GVariant* notification_ipc_make_gvariant_from_noti(
+ notification_h arg1, bool arg2) {
+ return MOCK_HOOK_P2(NotificationMock,
+ notification_ipc_make_gvariant_from_noti, arg1, arg2);
+}
diff --git a/mock/notification_mock.h b/mock/notification_mock.h
new file mode 100644
index 0000000..f6358d6
--- /dev/null
+++ b/mock/notification_mock.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_NOTIFICATION_MOCK_H_
+#define UNIT_TESTS_MOCK_NOTIFICATION_MOCK_H_
+
+#include <gmock/gmock.h>
+#include <glib.h>
+#include <notification.h>
+#include <notification_ipc.h>
+
+#include "module_mock.h"
+
+class NotificationMock : public virtual ModuleMock {
+ public:
+ NotificationMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+ }
+
+ MOCK_METHOD2(notification_ipc_make_gvariant_from_noti,
+ GVariant* (notification_h, bool));
+};
+
+#endif // UNIT_TESTS_MOCK_NOTIFICATION_MOCK_H_
diff --git a/mock/pkgmgr_info_fake.h b/mock/pkgmgr_info_fake.h
deleted file mode 100644
index 4b739dd..0000000
--- a/mock/pkgmgr_info_fake.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_PKGMGR_INFO_H_
-#define MOCK_PKGMGR_INFO_H_
-
-#include <pkgmgr-info.h>
-
-#include "mock.h"
-
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_get_usr_pkginfo, const char *,
- uid_t, pkgmgrinfo_pkginfo_h*);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_get_api_version,
- pkgmgrinfo_pkginfo_h, char **);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_is_global,
- pkgmgrinfo_pkginfo_h, bool *);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_pkginfo_destroy_pkginfo,
- pkgmgrinfo_pkginfo_h);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_get_usr_appinfo, const char *,
- uid_t, pkgmgrinfo_appinfo_h*);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_get_component_type,
- pkgmgrinfo_appinfo_h, char **);
-DECLARE_FAKE_VALUE_FUNC(int, pkgmgrinfo_appinfo_destroy_appinfo,
- pkgmgrinfo_appinfo_h);
-
-
-#endif //MOCK_PKGMGR_INFO_H_
diff --git a/mock/pkgmgr_info_mock.cc b/mock/pkgmgr_info_mock.cc
new file mode 100644
index 0000000..2c9f1ac
--- /dev/null
+++ b/mock/pkgmgr_info_mock.cc
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "pkgmgr_info_mock.h"
+
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" int pkgmgrinfo_pkginfo_get_usr_pkginfo(const char* arg1, uid_t arg2,
+ pkgmgrinfo_pkginfo_h* arg3) {
+ return MOCK_HOOK_P3(PkgmgrInfoMock, pkgmgrinfo_pkginfo_get_usr_pkginfo, arg1,
+ arg2, arg3);
+}
+
+extern "C" int pkgmgrinfo_pkginfo_get_api_version(pkgmgrinfo_pkginfo_h arg1,
+ char** arg2) {
+ return MOCK_HOOK_P2(PkgmgrInfoMock, pkgmgrinfo_pkginfo_get_api_version, arg1,
+ arg2);
+}
+
+extern "C" int pkgmgrinfo_pkginfo_is_global(pkgmgrinfo_pkginfo_h arg1,
+ bool* arg2) {
+ return MOCK_HOOK_P2(PkgmgrInfoMock, pkgmgrinfo_pkginfo_is_global, arg1,
+ arg2);
+}
+
+extern "C" int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h arg1) {
+ return MOCK_HOOK_P1(PkgmgrInfoMock, pkgmgrinfo_pkginfo_destroy_pkginfo,
+ arg1);
+}
+
+extern "C" int pkgmgrinfo_appinfo_get_usr_appinfo(const char* arg1, uid_t arg2,
+ pkgmgrinfo_appinfo_h* arg3) {
+ return MOCK_HOOK_P3(PkgmgrInfoMock, pkgmgrinfo_appinfo_get_usr_appinfo, arg1,
+ arg2, arg3);
+}
+
+extern "C" int pkgmgrinfo_appinfo_get_pkgid(pkgmgrinfo_pkginfo_h arg1,
+ char** arg2) {
+ return MOCK_HOOK_P2(PkgmgrInfoMock, pkgmgrinfo_appinfo_get_pkgid, arg1,
+ arg2);
+}
+
+extern "C" int pkgmgrinfo_appinfo_get_component_type(pkgmgrinfo_appinfo_h arg1,
+ char** arg2) {
+ return MOCK_HOOK_P2(PkgmgrInfoMock, pkgmgrinfo_appinfo_get_component_type, arg1,
+ arg2);
+}
+
+extern "C" int pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo_h arg1) {
+ return MOCK_HOOK_P1(PkgmgrInfoMock, pkgmgrinfo_appinfo_destroy_appinfo,
+ arg1);
+}
diff --git a/mock/pkgmgr_info_mock.h b/mock/pkgmgr_info_mock.h
new file mode 100644
index 0000000..9350fa2
--- /dev/null
+++ b/mock/pkgmgr_info_mock.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_PKGMGR_INFO_MOCK_H_
+#define UNIT_TESTS_MOCK_PKGMGR_INFO_MOCK_H_
+
+#include <gmock/gmock.h>
+#include <pkgmgr-info.h>
+
+#include "module_mock.h"
+
+class PkgmgrInfoMock : public virtual ModuleMock {
+ public:
+ PkgmgrInfoMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+ }
+
+ virtual ~PkgmgrInfoMock() {}
+
+ MOCK_METHOD3(pkgmgrinfo_pkginfo_get_usr_pkginfo,
+ int (const char *, uid_t, pkgmgrinfo_pkginfo_h*));
+ MOCK_METHOD2(pkgmgrinfo_pkginfo_get_api_version,
+ int (pkgmgrinfo_pkginfo_h, char **));
+ MOCK_METHOD2(pkgmgrinfo_pkginfo_is_global,
+ int (pkgmgrinfo_pkginfo_h, bool *));
+ MOCK_METHOD1(pkgmgrinfo_pkginfo_destroy_pkginfo,
+ int (pkgmgrinfo_pkginfo_h));
+ MOCK_METHOD3(pkgmgrinfo_appinfo_get_usr_appinfo,
+ int (const char *, uid_t, pkgmgrinfo_appinfo_h*));
+ MOCK_METHOD2(pkgmgrinfo_appinfo_get_pkgid,
+ int (pkgmgrinfo_pkginfo_h, char **));
+ MOCK_METHOD2(pkgmgrinfo_appinfo_get_component_type,
+ int (pkgmgrinfo_appinfo_h, char **));
+ MOCK_METHOD1(pkgmgrinfo_appinfo_destroy_appinfo,
+ int (pkgmgrinfo_appinfo_h));
+};
+
+#endif // UNIT_TESTS_MOCK_PKGMGR_INFO_MOCK_H_
+
diff --git a/mock/mock.h b/mock/test_fixture.cc
index 0a8cab4..27f5666 100644
--- a/mock/mock.h
+++ b/mock/test_fixture.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-#ifndef MOCK_MOCK_H__
-#define MOCK_MOCK_H__
+#include "test_fixture.h"
-#include "fff.h"
+#include <memory>
-#endif // MOCK_MOCK_H__
+std::unique_ptr<ModuleMock> TestFixture::mock_;
diff --git a/mock/test_fixture.h b/mock/test_fixture.h
new file mode 100644
index 0000000..1ea3b8f
--- /dev/null
+++ b/mock/test_fixture.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_TEST_FIXTURE_H_
+#define UNIT_TESTS_MOCK_TEST_FIXTURE_H_
+
+#include <gtest/gtest.h>
+
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <utility>
+
+#include "module_mock.h"
+
+class TestFixture : public ::testing::Test {
+ public:
+ explicit TestFixture(std::unique_ptr<ModuleMock>&& mock) {
+ mock_ = std::move(mock);
+ }
+ virtual ~TestFixture() {
+ mock_.reset();
+ }
+
+ virtual void SetUp() {}
+ virtual void TearDown() {}
+
+ template <typename T>
+ static T& GetMock() {
+ auto ptr = dynamic_cast<T*>(mock_.get());
+ if (!ptr)
+ throw std::invalid_argument("The test does not provide mock of \"" +
+ std::string(typeid(T).name()) + "\"");
+ return *ptr;
+ }
+
+ static std::unique_ptr<ModuleMock> mock_;
+};
+
+#endif // UNIT_TESTS_MOCK_TEST_FIXTURE_H_
diff --git a/mock/tzplatform_config_mock.cc b/mock/tzplatform_config_mock.cc
new file mode 100644
index 0000000..7decf73
--- /dev/null
+++ b/mock/tzplatform_config_mock.cc
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tzplatform_config_mock.h"
+
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" const char* tzplatform_mkpath(enum tzplatform_variable arg1, const char* arg2) {
+ return MOCK_HOOK_P2(TzplatformConfigMock, tzplatform_mkpath, arg1, arg2);
+} \ No newline at end of file
diff --git a/mock/tzplatform_config_mock.h b/mock/tzplatform_config_mock.h
new file mode 100644
index 0000000..e0bc14e
--- /dev/null
+++ b/mock/tzplatform_config_mock.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UNIT_TESTS_MOCK_TZPLATFORM_CONFIG_MOCK_H_
+#define UNIT_TESTS_MOCK_TZPLATFORM_CONFIG_MOCK_H_
+
+#include <tzplatform_config.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class TzplatformConfigMock : public virtual ModuleMock {
+ public:
+ TzplatformConfigMock() {
+ using ::testing::_;
+ using ::testing::Return;
+ using ::testing::Invoke;
+ }
+
+ MOCK_METHOD2(tzplatform_mkpath, const char* (enum tzplatform_variable,
+ const char*));
+};
+
+#endif // UNIT_TESTS_MOCK_TZPLATFORM_CONFIG_MOCK_H_ \ No newline at end of file
diff --git a/packaging/alarm-manager.spec b/packaging/alarm-manager.spec
index 8ebb196..0eff0f4 100644
--- a/packaging/alarm-manager.spec
+++ b/packaging/alarm-manager.spec
@@ -1,6 +1,6 @@
Name: alarm-manager
Summary: Alarm library
-Version: 0.10.4
+Version: 0.12.36
Release: 1
Group: System/Libraries
License: Apache-2.0
@@ -34,18 +34,18 @@ BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(eventsystem)
BuildRequires: pkgconfig(notification)
BuildRequires: python-xml
-BuildRequires: pkgconfig(capi-system-info)
BuildRequires: pkgconfig(cert-svc-vcore)
BuildRequires: pkgconfig(cynara-client)
BuildRequires: pkgconfig(cynara-session)
BuildRequires: pkgconfig(cynara-creds-gdbus)
+BuildRequires: pkgconfig(gmock)
+BuildRequires: pkgconfig(tizen-database)
%if 0%{?gcov:1}
BuildRequires: lcov
-BuildRequires: zip
%endif
-%if 0%{?gtests:1}
+%if 0%{?gcov:1}
BuildRequires: pkgconfig(gmock)
%endif
Requires(post): /sbin/ldconfig
@@ -174,16 +174,10 @@ MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
-DTZ_SYS_ETC=%{TZ_SYS_ETC} \
-D_APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG:BOOL=${_APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG} \
-DALARM_CONF_DIR=%{_datadir}/alarm-manager \
- -DBUILD_GTESTS=%{?gtests:1}%{!?gtests:0} \
-DBUILD_GCOV=%{?gcov:1}%{!?gcov:0} \
make %{?jobs:-j%jobs}
-%if 0%{?gcov:1}
-mkdir -p gcov-obj
-find . -name '*.gcno' -exec cp '{}' gcov-obj ';'
-%endif
-
%install
rm -rf %{buildroot}
%make_install
@@ -197,22 +191,53 @@ ln -s ../alarm-server.service %{buildroot}%{_unitdir}/multi-user.target.wants/al
ln -sf ../alarm-session-agent.socket %{buildroot}%{_unitdir_user}/sockets.target.wants/alarm-session-agent.socket
mkdir -p %{buildroot}%{_tmpfilesdir}
install -m 0644 %SOURCE4 %{buildroot}%{_tmpfilesdir}/alarm-manager.conf
-mkdir -p %{buildroot}%{_libdir}/udev/rules.d
-install -m 0644 %SOURCE5 %{buildroot}%{_libdir}/udev/rules.d
+mkdir -p %{buildroot}/usr/lib/udev/rules.d
+install -m 0644 %SOURCE5 %{buildroot}/usr/lib/udev/rules.d
mkdir -p %{buildroot}%{logdir}
%if 0%{?gcov:1}
-mkdir -p %{buildroot}%{_datadir}/gcov/obj
-install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
+builddir=$(basename $PWD)
+gcno_obj_dir=%{buildroot}%{_datadir}/gcov/obj/%{name}/"$builddir"
+mkdir -p "$gcno_obj_dir"
+find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';'
%endif
+#################################################
+# generate unittest automation script
+#################################################
+cat << EOF > run-unittest.sh
+#!/bin/bash
+setup() {
+ echo "setup start"
+}
+
+test_main() {
+ echo "test_main start"
+ /usr/bin/gtest-alarmmgr
+}
+
+teardown() {
+ echo "teardown start"
+}
+
+main() {
+ setup
+ test_main
+ teardown
+}
+
+main "$@"
+EOF
+
+mkdir -p %{buildroot}%{_bindir}/tizen-unittests/%{name}
+install -m 0755 run-unittest.sh %{buildroot}%{_bindir}/tizen-unittests/%{name}
+
%check
-(cd unittest && LD_LIBRARY_PATH=../lib ctest -V)
+export LD_LIBRARY_PATH=../lib
+ctest -V
%if 0%{?gcov:1}
-lcov -c --ignore-errors graph --no-external -q -d . -o alarm-manager.info
-genhtml alarm-manager.info -o alarm-manager.out
-zip -r alarm-manager.zip alarm-manager.out
-install -m 0644 alarm-manager.zip %{buildroot}%{_datadir}/gcov/
+lcov -c --ignore-errors mismatch,graph,unused --no-external -b . -d . -o %{name}.info
+genhtml %{name}.info -o out --legend --show-details
%endif
%post -p /sbin/ldconfig
@@ -231,7 +256,7 @@ install -m 0644 alarm-manager.zip %{buildroot}%{_datadir}/gcov/
if [ -e /etc/config/model-config.xml ]; then
grep "feature\/profile.*tv" /etc/config/model-config.xml > /dev/null
if [ $? -eq 0 ]; then
- rm %{_libdir}/udev/rules.d/99-rtc.rules
+ rm /usr/lib/udev/rules.d/99-rtc.rules
fi
fi
@@ -247,7 +272,7 @@ fi
%license LICENSE
%config %{_sysconfdir}/dbus-1/system.d/alarm-service.conf
%{_tmpfilesdir}/alarm-manager.conf
-%{_libdir}/udev/rules.d/99-rtc.rules
+/usr/lib/udev/rules.d/99-rtc.rules
%if 0%{?appfw_feature_alarm_manager_module_log}
%attr(0755,root,root) %{TZ_SYS_ETC}/dump.d/module.d/alarmmgr_log_dump.sh
%attr(0755,app_fw,app_fw) %{logdir}
@@ -283,10 +308,9 @@ fi
#################################################
# unittests
#################################################
-%if 0%{?gtests:1}
%files unittests
%{_bindir}/gtest*
-%endif
+%{_bindir}/tizen-unittests/%{name}/run-unittest.sh
#################################################
# gcov
diff --git a/packaging/alarm-server.service b/packaging/alarm-server.service
index f939f59..caed160 100644
--- a/packaging/alarm-server.service
+++ b/packaging/alarm-server.service
@@ -13,6 +13,7 @@ SecureBits=keep-caps
TimeoutStopSec=3s
Restart=on-failure
RestartSec=0
+MemoryLimit=50M
[Install]
WantedBy=multi-user.target
diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt
index 2dc595d..30a3af4 100755
--- a/server/CMakeLists.txt
+++ b/server/CMakeLists.txt
@@ -4,10 +4,12 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/server)
AUX_SOURCE_DIRECTORY(./ SRCS)
+ADD_DEFINITIONS("-DPLUGIN_LIB_DIR=\"${LIB_INSTALL_DIR}\"")
+
PKG_CHECK_MODULES(svr_pkgs REQUIRED glib-2.0 dlog aul bundle appsvc pkgmgr-info pkgmgr vconf
- gio-2.0 gio-unix-2.0 capi-system-device libtzplatform-config libsystemd-login
- eventsystem notification capi-system-info sqlite3 cert-svc-vcore
- cynara-session cynara-client cynara-creds-gdbus)
+ gio-2.0 gio-unix-2.0 capi-system-device libtzplatform-config libsystemd
+ eventsystem notification sqlite3 cert-svc-vcore
+ cynara-session cynara-client cynara-creds-gdbus tizen-database)
FOREACH(flag ${svr_pkgs_CFLAGS_OTHER})
IF(${flag} MATCHES "\\-D+")
@@ -18,7 +20,10 @@ ENDFOREACH(flag)
INCLUDE_DIRECTORIES(${svr_pkgs_INCLUDE_DIRS})
LINK_DIRECTORIES(${svr_pkgs_LIBRARY_DIRS})
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpie")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpie -fPIC")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS} -fPIC -std=c++17")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
ADD_EXECUTABLE(${SERVER} ${SRCS})
diff --git a/server/alarm-manager-db-migration.c b/server/alarm-manager-db-migration.c
deleted file mode 100644
index 14bcc3f..0000000
--- a/server/alarm-manager-db-migration.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <sqlite3.h>
-
-#include "alarm-manager-db.h"
-
-extern sqlite3 *alarmmgr_db;
-
-int migration_func_version_1(void)
-{
- static const char *query = "CREATE TABLE IF NOT EXISTS alarmmgr_temp (\n" \
- " alarm_id INTEGER PRIMARY KEY, \n" \
- " start INTEGER, \n" \
- " end INTEGER, \n" \
- " uid INTEGER, \n" \
- " global INTEGER, \n" \
- " is_disabled INTEGER, \n" \
- " caller_pkgid TEXT, \n" \
- " callee_pkgid TEXT, \n" \
- " app_unique_name TEXT, \n" \
- " app_service_name TEXT, \n" \
- " app_service_name_mod TEXT, \n" \
- " bundle TEXT, \n" \
- " noti_len INTEGER, \n" \
- " noti TEXT, \n" \
- " year INTEGER, \n" \
- " month INTEGER, \n" \
- " day INTEGER, \n" \
- " hour INTEGER, \n" \
- " min INTEGER, \n" \
- " sec INTEGER, \n" \
- " msec INTEGER, \n" \
- " day_of_week INTEGER, \n" \
- " repeat INTEGER, \n" \
- " alarm_type INTEGER, \n" \
- " reserved_info INTEGER, \n" \
- " dst_service_name TEXT, \n" \
- " dst_service_name_mod TEXT \n" \
- ")";
-
- static const char *insert_query = "INSERT INTO alarmmgr_temp (alarm_id, start, \
- end, uid, global, is_disabled, caller_pkgid, callee_pkgid, \
- app_unique_name, app_service_name, app_service_name_mod, \
- bundle, noti_len, noti, year, month, day, hour, min, sec, msec,\
- day_of_week, repeat, alarm_type, reserved_info, \
- dst_service_name, dst_service_name_mod) \
- SELECT alarm_id, start, end, uid, global, is_disabled, \
- caller_pkgid, callee_pkgid, app_unique_name, app_service_name, \
- app_service_name_mod, bundle, noti_len, noti, year, month, \
- day, hour, min, sec, msec, day_of_week, repeat, alarm_type, \
- reserved_info, dst_service_name, dst_service_name_mod \
- FROM alarmmgr";
-
- char *error_message = NULL;
- int ret;
-
- LOGD("DB migration init version start");
-
- ret = sqlite3_exec(alarmmgr_db, "DROP TABLE IF EXISTS alarmmgr_temp", NULL,
- NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute drop, error message = %s", error_message);
- sqlite3_free(error_message);
- return ret;
- }
-
- ret = sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute query = %s, error message = %s", query, error_message);
- sqlite3_free(error_message);
- return ret;
- }
-
- ret = sqlite3_exec(alarmmgr_db, insert_query, NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute query = %s, error message = %s", insert_query, error_message);
- sqlite3_free(error_message);
- return ret;
- }
-
- ret = sqlite3_exec(alarmmgr_db, "DROP TABLE alarmmgr", NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute drop alarmmgr, error message = %s", error_message);
- sqlite3_free(error_message);
- return ret;
- }
-
- ret = sqlite3_exec(alarmmgr_db, "ALTER TABLE alarmmgr_temp RENAME TO alarmmgr",
- NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute alter, error message = %s", error_message);
- sqlite3_free(error_message);
- return ret;
- }
-
- return ALARMMGR_RESULT_SUCCESS;
-}
diff --git a/server/alarm-manager-db.c b/server/alarm-manager-db.c
deleted file mode 100644
index 0fdd4bf..0000000
--- a/server/alarm-manager-db.c
+++ /dev/null
@@ -1,780 +0,0 @@
-/*
- * Copyright (c) 2000 - 2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <signal.h>
-#include <string.h>
-#include <sys/types.h>
-
-#include <sqlite3.h>
-#include <glib.h>
-#include <tzplatform_config.h>
-#if !GLIB_CHECK_VERSION(2, 31, 0)
-#include <glib/gmacros.h>
-#endif
-
-#include "alarm-manager-db.h"
-
-#define ALARMMGR_DB_FILE tzplatform_mkpath(TZ_SYS_DB, ".alarmmgr.db")
-#define QUERY_CREATE_TABLE_ALARMMGR \
- " CREATE TABLE IF NOT EXISTS alarmmgr (\n" \
- " alarm_id INTEGER PRIMARY KEY, \n" \
- " start INTEGER, \n" \
- " end INTEGER, \n" \
- " uid INTEGER, \n" \
- " global INTEGER, \n" \
- " is_disabled INTEGER, \n" \
- " caller_pkgid TEXT, \n" \
- " callee_pkgid TEXT, \n" \
- " app_unique_name TEXT, \n" \
- " app_service_name TEXT, \n" \
- " app_service_name_mod TEXT, \n" \
- " bundle TEXT, \n" \
- " noti_len INTEGER, \n" \
- " noti TEXT, \n" \
- " year INTEGER, \n" \
- " month INTEGER, \n" \
- " day INTEGER, \n" \
- " hour INTEGER, \n" \
- " min INTEGER, \n" \
- " sec INTEGER, \n" \
- " msec INTEGER, \n" \
- " day_of_week INTEGER, \n" \
- " repeat INTEGER, \n" \
- " alarm_type INTEGER, \n" \
- " reserved_info INTEGER, \n" \
- " dst_service_name TEXT, \n" \
- " dst_service_name_mod TEXT \n" \
- ")"
-
-enum schema_version
-{
- SCHEMA_VERSION_0 = 0,
- SCHEMA_VERSION_1 = 1,
- SCHEMA_VERSION_LATEST = SCHEMA_VERSION_1
-} schema_version_e;
-
-typedef struct
-{
- const char *change_log;
- int (*func)(void);
-} migration_func;
-
-extern GSList *g_disabled_alarm_list;
-extern __alarm_server_context_t alarm_context;
-
-sqlite3 *alarmmgr_db;
-static bool is_db_corrupted = false;
-
-static const migration_func m_func[] =
-{
- {"SCHEMA_VERSION_0", NULL},
- {"SCHEMA_VERSION_1", migration_func_version_1}
-};
-
-static int __create_db_version(void)
-{
- static const char *query = "CREATE TABLE IF NOT EXISTS schema_version (version INTEGER)";
-
- if (sqlite3_exec(alarmmgr_db, query, NULL, NULL, NULL) != SQLITE_OK) {
- LOGE("Failed to execute the query (%s)\n", sqlite3_errmsg(alarmmgr_db));
- return -1;
- }
-
- return 0;
-}
-
-static int __update_db_version(int ver)
-{
- char *query;
-
- if (sqlite3_exec(alarmmgr_db, "DELETE FROM schema_version", NULL, NULL, NULL)
- != SQLITE_OK) {
- LOGE("Failed to execute the query (%s)\n", sqlite3_errmsg(alarmmgr_db));
- return -1;
- }
-
- query = sqlite3_mprintf("INSERT INTO schema_version (version) VALUES (%d)", ver);
- if (query == NULL) {
- LOGE("Failed to alloc query");
- return -1;
- }
-
- if (sqlite3_exec(alarmmgr_db, query, NULL, NULL, NULL) != SQLITE_OK) {
- LOGE("Failed to execute the query (%s)\n", sqlite3_errmsg(alarmmgr_db));
- sqlite3_free(query);
- return -1;
- }
-
- sqlite3_free(query);
-
- return 0;
-}
-
-static int __get_db_version(void)
-{
- static const char *dml = "SELECT version FROM schema_version";
- sqlite3_stmt *stmt;
- int ret;
-
- ret = sqlite3_prepare_v2(alarmmgr_db, dml, -1, &stmt, NULL);
- if (ret != SQLITE_OK) {
- LOGE("sqlite3_prepare_v2 error : %d", ret);
- return -1;
- }
-
- if (sqlite3_step(stmt) != SQLITE_ROW)
- ret = -1;
- else
- ret = sqlite3_column_int(stmt, 0);
-
- sqlite3_reset(stmt);
- sqlite3_clear_bindings(stmt);
- sqlite3_finalize(stmt);
- return ret;
-}
-
-static int __db_upgrade(void)
-{
- int ver, ret, i;
-
- ver = __get_db_version();
- if (ver >= SCHEMA_VERSION_LATEST)
- return 0;
-
- if (sqlite3_exec(alarmmgr_db, "BEGIN TRANSACTION", NULL, NULL, NULL)) {
- LOGE("begin transaction error : %s", sqlite3_errmsg(alarmmgr_db));
- return -1;
- }
-
- if (ver == -1) {
- LOGD("Schema version not exists : %d", ver);
- ret = __create_db_version();
- if (ret != 0)
- goto out;
-
- ver = SCHEMA_VERSION_0;
- }
-
- for (i = ver + 1 ; i <= SCHEMA_VERSION_LATEST; i++) {
- if (m_func[i].func() != ALARMMGR_RESULT_SUCCESS) {
- ret = -1;
- goto out;
- }
-
- }
- ret = __update_db_version(SCHEMA_VERSION_LATEST);
-
-out:
- if (ret == 0) {
- if (sqlite3_exec(alarmmgr_db, "END TRANSACTION", NULL, NULL, NULL))
- LOGE("end transaction error : %s", sqlite3_errmsg(alarmmgr_db));
- } else {
- if (sqlite3_exec(alarmmgr_db, "ROLLBACK TRANSACTION", NULL, NULL, NULL))
- LOGE("rollback transaction error : %s", sqlite3_errmsg(alarmmgr_db));
- }
- return ret;
-}
-
-static int __db_busyhandler(void *pData, int count)
-{
- if (5 - count > 0) {
- struct timespec time = {
- .tv_sec = 0,
- .tv_nsec = (count + 1) * 100 * 1000 * 1000
- };
- nanosleep(&time, NULL);
- LOGD("alarmmgr_db: busy handler called. count: %d", count + 1);
- return 1;
- } else {
- LOGD("alarmmgr_db: busy handler will return SQLITE_BUSY error");
- return 0;
- }
-}
-
-bool _save_alarms(__alarm_info_t *__alarm_info)
-{
- char *error_message = NULL;
- alarm_info_t *alarm_info =
- (alarm_info_t *) &(__alarm_info->alarm_info);
- alarm_date_t *start = &alarm_info->start;
- alarm_mode_t *mode = &alarm_info->mode;
-
- char *query = sqlite3_mprintf("insert into alarmmgr( alarm_id, start,\
- end, uid, global, is_disabled, caller_pkgid, callee_pkgid, app_unique_name,\
- app_service_name, app_service_name_mod, bundle, noti_len, noti, year,\
- month, day, hour, min, sec, msec, day_of_week, repeat,\
- alarm_type, reserved_info, dst_service_name, dst_service_name_mod)\
- values (%d,%lld,%lld,%d,%d,0,%Q,%Q,%Q,%Q,%Q,%Q,%d,%Q,%d,%d,%d,%d,%d,%d,%d,%d,%d,\
- %d,%lld,%Q,%Q)",\
- __alarm_info->alarm_id,
- (gint64)__alarm_info->start,
- (gint64)__alarm_info->end,
- __alarm_info->uid,
- __alarm_info->global,
- CHECK_NULL_STRING(__alarm_info->caller_pkgid),
- CHECK_NULL_STRING(__alarm_info->callee_pkgid),
- CHECK_NULL_STRING(__alarm_info->app_unique_name),
- CHECK_NULL_STRING(__alarm_info->app_service_name),
- CHECK_NULL_STRING(__alarm_info->app_service_name_mod),
- CHECK_NULL_STRING(__alarm_info->bundle),
- __alarm_info->noti ? strlen(__alarm_info->noti) : 0,
- CHECK_NULL_STRING(__alarm_info->noti),
- start->year,
- start->month,
- start->day,
- start->hour,
- start->min,
- start->sec,
- alarm_info->msec,
- mode->u_interval.day_of_week,
- mode->repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
- CHECK_NULL_STRING(__alarm_info->dst_service_name),
- CHECK_NULL_STRING(__alarm_info->dst_service_name_mod));
-
- if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
- SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
- sqlite3_free(error_message);
- sqlite3_free(query);
- return false;
- }
-
- sqlite3_free(query);
- return true;
-}
-
-bool _update_alarms(__alarm_info_t *__alarm_info)
-{
- char *error_message = NULL;
- alarm_info_t *alarm_info =
- (alarm_info_t *) &(__alarm_info->alarm_info);
- alarm_date_t *start = &alarm_info->start;
- alarm_mode_t *mode = &alarm_info->mode;
-
- char *query = sqlite3_mprintf("update alarmmgr set start=%lld, end=%lld,\
- uid=%d, global=%d, is_disabled=0, caller_pkgid=%Q, callee_pkgid=%Q, app_unique_name=%Q, app_service_name=%Q, app_service_name_mod=%Q,\
- bundle=%Q, noti_len=%d, noti=%Q, year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d, msec=%d,\
- day_of_week=%d, repeat=%d, alarm_type=%d,\
- reserved_info=%lld, dst_service_name=%Q, dst_service_name_mod=%Q\
- where alarm_id=%d",\
- (gint64)__alarm_info->start,
- (gint64)__alarm_info->end,
- __alarm_info->uid,
- __alarm_info->global,
- CHECK_NULL_STRING(__alarm_info->caller_pkgid),
- CHECK_NULL_STRING(__alarm_info->callee_pkgid),
- CHECK_NULL_STRING(__alarm_info->app_unique_name),
- CHECK_NULL_STRING(__alarm_info->app_service_name),
- CHECK_NULL_STRING(__alarm_info->app_service_name_mod),
- CHECK_NULL_STRING(__alarm_info->bundle),
- __alarm_info->noti ? strlen(__alarm_info->noti) : 0,
- CHECK_NULL_STRING(__alarm_info->noti),
- start->year,
- start->month,
- start->day,
- start->hour,
- start->min,
- start->sec,
- alarm_info->msec,
- mode->u_interval.day_of_week,
- mode->repeat,
- alarm_info->alarm_type,
- (gint64)alarm_info->reserved_info,
- CHECK_NULL_STRING(__alarm_info->dst_service_name),
- CHECK_NULL_STRING(__alarm_info->dst_service_name_mod),
- __alarm_info->alarm_id);
-
- if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
- SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
- sqlite3_free(error_message);
- sqlite3_free(query);
- return false;
- }
-
- sqlite3_free(query);
- return true;
-}
-
-bool _delete_alarms(alarm_id_t alarm_id)
-{
- char *error_message = NULL;
- char *query = sqlite3_mprintf("delete from alarmmgr where alarm_id=%d", alarm_id);
-
- if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
- SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
- sqlite3_free(error_message);
- sqlite3_free(query);
- return false;
- }
-
- sqlite3_free(query);
- return true;
-}
-
-void _load_alarms_from_db()
-{
- int i = 0;
- int col_idx;
- const char *query = "select * from alarmmgr";
- const char *null_str = "null";
- sqlite3_stmt *stmt = NULL;
- const char *tail = NULL;
- alarm_info_t *alarm_info = NULL;
- __alarm_info_t *__alarm_info = NULL;
- alarm_date_t *start = NULL;
- alarm_mode_t *mode = NULL;
- int is_disabled;
- char caller_pkgid[MAX_PKG_ID_LEN] = {0,};
- char callee_pkgid[MAX_PKG_ID_LEN] = {0,};
- char app_unique_name[MAX_APP_ID_LEN] = {0,};
- char app_service_name[MAX_SERVICE_NAME_LEN] = {0,};
- char app_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
- char dst_service_name[MAX_SERVICE_NAME_LEN] = {0,};
- char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
- char bundle[MAX_BUNDLE_NAME_LEN] = {0,};
- int noti_len;
- char *noti;
- gint64 start_64, end_64, reserved_info_64;
-
- if (SQLITE_OK != sqlite3_prepare(alarmmgr_db, query, strlen(query), &stmt, &tail)) {
- LOGE("sqlite3_prepare() is failed.");
- return;
- }
-
- for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) {
- col_idx = 0;
- __alarm_info = (__alarm_info_t *)calloc(1, sizeof(__alarm_info_t));
-
- if (G_UNLIKELY(__alarm_info == NULL)) {
- LOGE("Memory allocation failed.");
- goto done;
- }
- alarm_info = (alarm_info_t *) &(__alarm_info->alarm_info);
- start = &alarm_info->start;
- mode = &alarm_info->mode;
-
- __alarm_info->alarm_id = sqlite3_column_int(stmt, col_idx++);
- start_64 = sqlite3_column_int64(stmt, col_idx++);
- __alarm_info->start = (time_t)start_64;
- end_64 = sqlite3_column_int64(stmt, col_idx++);
- __alarm_info->end = (time_t)end_64;
- __alarm_info->uid = sqlite3_column_int(stmt, col_idx++);
- __alarm_info->global = sqlite3_column_int(stmt, col_idx++);
- is_disabled = sqlite3_column_int(stmt, col_idx++);
-
- strncpy(caller_pkgid, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_PKG_ID_LEN - 1);
- strncpy(callee_pkgid, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_PKG_ID_LEN - 1);
- strncpy(app_unique_name, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_APP_ID_LEN - 1);
- strncpy(app_service_name, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_SERVICE_NAME_LEN - 1);
- strncpy(app_service_name_mod, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_SERVICE_NAME_LEN - 1);
- strncpy(bundle, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_BUNDLE_NAME_LEN - 1);
- noti_len = sqlite3_column_int(stmt, col_idx++);
- noti_len = noti_len ? noti_len : strlen(null_str);
- noti = (char *)calloc(1, noti_len + 1);
- if (noti)
- strncpy(noti, (const char *)sqlite3_column_text(stmt, col_idx++),
- noti_len);
- start->year = sqlite3_column_int(stmt, col_idx++);
- start->month = sqlite3_column_int(stmt, col_idx++);
- start->day = sqlite3_column_int(stmt, col_idx++);
- start->hour = sqlite3_column_int(stmt, col_idx++);
- start->min = sqlite3_column_int(stmt, col_idx++);
- start->sec = sqlite3_column_int(stmt, col_idx++);
- alarm_info->msec = sqlite3_column_int(stmt, col_idx++);
- mode->u_interval.day_of_week = sqlite3_column_int(stmt, col_idx++);
- mode->repeat = (alarm_repeat_mode_t)sqlite3_column_int(stmt, col_idx++);
- alarm_info->alarm_type = sqlite3_column_int(stmt, col_idx++);
- reserved_info_64 = sqlite3_column_int64(stmt, col_idx++);
- alarm_info->reserved_info = (time_t)reserved_info_64;
- strncpy(dst_service_name, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_SERVICE_NAME_LEN - 1);
- strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, col_idx++),
- MAX_SERVICE_NAME_LEN - 1);
-
- __alarm_info->caller_pkgid = STRDUP_WITH_NULLCMP(caller_pkgid);
- __alarm_info->callee_pkgid = STRDUP_WITH_NULLCMP(callee_pkgid);
- __alarm_info->app_unique_name = STRDUP_WITH_NULLCMP(app_unique_name);
- __alarm_info->app_service_name = STRDUP_WITH_NULLCMP(app_service_name);
- __alarm_info->app_service_name_mod =
- STRDUP_WITH_NULLCMP(app_service_name_mod);
- __alarm_info->dst_service_name = STRDUP_WITH_NULLCMP(dst_service_name);
- __alarm_info->dst_service_name_mod =
- STRDUP_WITH_NULLCMP(dst_service_name_mod);
- __alarm_info->bundle = STRDUP_WITH_NULLCMP(bundle);
- if (noti) {
- __alarm_info->noti = STRDUP_WITH_NULLCMP(noti);
- free(noti);
- }
-
- if (is_disabled) {
- _alarm_set_next_duetime(__alarm_info);
- g_disabled_alarm_list = g_slist_append(g_disabled_alarm_list, __alarm_info);
- LOGW("Save alarm_id[%d] caller[%s] callee[%s]", __alarm_info->alarm_id, caller_pkgid, callee_pkgid);
- } else {
- _alarm_set_next_duetime(__alarm_info);
- alarm_context.alarms = g_slist_append(alarm_context.alarms, __alarm_info);
- }
- }
-done:
- _alarm_schedule();
- if (sqlite3_finalize(stmt) != SQLITE_OK)
- LOGE("sqlite3_finalize() is failed.");
-
- return;
-}
-
-int _get_db_path_for_all_info(uid_t uid, char** db_path)
-{
- sqlite3 *alarmmgr_tool_db;
- char db_path_tmp[50] = {0,};
- const char *query_for_creating_table = "create table alarmmgr_tool \
- (alarm_id integer primary key,\
- duetime_epoch integer,\
- duetime text,\
- start_epoch integer,\
- end_epoch integer,\
- global integer,\
- caller_pkgid text,\
- callee_pkgid text,\
- app_unique_name text,\
- app_service_name text,\
- dst_service_name text,\
- day_of_week integer,\
- repeat integer,\
- alarm_type integer)";
- const char *query_for_deleting_table = "drop table alarmmgr_tool";
- time_t current_time = 0;
- struct tm current_tm;
- GSList *gs_iter = NULL;
- __alarm_info_t *entry = NULL;
- char *error_message = NULL;
- int index = 0;
-
- /* Open a DB */
- time(&current_time);
- localtime_r(&current_time, &current_tm);
- snprintf(db_path_tmp, sizeof(db_path_tmp), "/tmp/alarmmgr_%d%d%d_%02d%02d%02d.db",
- current_tm.tm_year + 1900, current_tm.tm_mon + 1, current_tm.tm_mday, current_tm.tm_hour, current_tm.tm_min, current_tm.tm_sec);
- *db_path = strdup(db_path_tmp);
- if (*db_path == NULL) {
- LOGE("Out of memory");
- return ERR_ALARM_SYSTEM_FAIL;
- }
-
- if (sqlite3_open(db_path_tmp, &alarmmgr_tool_db) != SQLITE_OK) {
- LOGE("Failed to open [%s]", db_path_tmp);
- return ERR_ALARM_SYSTEM_FAIL;
- }
-
- /* Register busy handler */
- if (sqlite3_busy_handler(alarmmgr_tool_db, __db_busyhandler, NULL) != SQLITE_OK) {
- LOGE("Failed to register the busy handler");
- sqlite3_close(alarmmgr_tool_db);
- return ERR_ALARM_SYSTEM_FAIL;
- }
-
- /* Drop a table */
- if (sqlite3_exec(alarmmgr_tool_db, query_for_deleting_table, NULL, NULL, &error_message) != SQLITE_OK) {
- LOGE("Deleting the table is failed. error message = %s", error_message);
- sqlite3_free(error_message);
- }
-
- /* Create a table if it does not exist */
- if (sqlite3_exec(alarmmgr_tool_db, query_for_creating_table, NULL, NULL, &error_message) != SQLITE_OK) {
- LOGE("Creating the table is failed. error message = %s", error_message);
- sqlite3_free(error_message);
- sqlite3_close(alarmmgr_tool_db);
- return ERR_ALARM_SYSTEM_FAIL;
- }
-
- /* Get information of all alarms and save those into the DB. */
- for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
- entry = (__alarm_info_t*)gs_iter->data;
- if (uid >= REGULAR_UID_MIN && entry->uid != uid)
- continue;
- ++index;
- SECURE_LOGD("#%d alarm id[%d] app_name[%s] duetime[%ld]",
- index, entry->alarm_id, entry->app_unique_name, entry->start);
-
- alarm_info_t *alarm_info = (alarm_info_t *) &(entry->alarm_info);
- alarm_mode_t *mode = &alarm_info->mode;
-
- char *query = sqlite3_mprintf("insert into alarmmgr_tool( alarm_id, duetime_epoch, duetime, start_epoch,\
- end_epoch, global, caller_pkgid, callee_pkgid, app_unique_name, app_service_name, dst_service_name, day_of_week, repeat, alarm_type)\
- values (%d,%d,%Q,%d,%d,%d,%Q,%Q,%Q,%Q,%Q,%d,%d,%d)",
- entry->alarm_id,
- (int)entry->due_time,
- ctime(&(entry->due_time)),
- (int)entry->start,
- (int)entry->end,
- (bool)entry->global,
- CHECK_NULL_STRING(entry->caller_pkgid),
- CHECK_NULL_STRING(entry->callee_pkgid),
- CHECK_NULL_STRING(entry->app_unique_name),
- CHECK_NULL_STRING(entry->app_service_name),
- CHECK_NULL_STRING(entry->dst_service_name),
- mode->u_interval.day_of_week,
- mode->repeat,
- entry->alarm_info.alarm_type);
-
- if (sqlite3_exec(alarmmgr_tool_db, query, NULL, NULL, &error_message) != SQLITE_OK) {
- SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
- sqlite3_free(error_message);
- }
-
- sqlite3_free(query);
- }
-
- sqlite3_close(alarmmgr_tool_db);
- return ALARMMGR_RESULT_SUCCESS;
-}
-
-gboolean _update_relative_alarms(gpointer user_data)
-{
- GSList *iter = NULL;
- __alarm_info_t *entry = NULL;
- char *error_message = NULL;
-
- if (sqlite3_exec(alarmmgr_db, "BEGIN EXCLUSIVE", NULL, NULL, &error_message) != SQLITE_OK) {
- SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
- sqlite3_free(error_message);
- return false;
- }
-
- for (iter = alarm_context.alarms; iter != NULL; iter = g_slist_next(iter)) {
- entry = (__alarm_info_t *)iter->data;
- alarm_info_t *alarm_info = &(entry->alarm_info);
- if (alarm_info->alarm_type & ALARM_TYPE_RELATIVE)
- _update_alarms(entry);
- }
-
- if (sqlite3_exec(alarmmgr_db, "COMMIT", NULL, NULL, &error_message) != SQLITE_OK) {
- SECURE_LOGE("sqlite3_exec() is failed. error message = %s", error_message);
- sqlite3_free(error_message);
- return false;
- }
-
- return false;
-}
-
-bool _alarm_set_global_to_db(__alarm_info_t *alarm_info, bool global)
-{
-
- char *error_message = NULL;
- char *query = sqlite3_mprintf("update alarmmgr set global=%d where alarm_id=%d",
- alarm_info->global, alarm_info->alarm_id);
-
- if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
- SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
- sqlite3_free(query);
- sqlite3_free(error_message);
- return false;
- }
-
- sqlite3_free(query);
- return true;
-}
-
-void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled)
-{
- char *error_message = NULL;
-
- LOGW("Update (%d) is_disabled to (%d)", alarm_id, disabled);
- char *query = sqlite3_mprintf("update alarmmgr set is_disabled=%d where alarm_id=%d", disabled, alarm_id);
-
- if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
- SECURE_LOGE("Failed to update the DB table. error message = %s", error_message);
- sqlite3_free(error_message);
- }
-
- sqlite3_free(query);
- return;
-}
-
-int __check_callback(void *pid, int argc, char **argv, char **notUsed2)
-{
- if (strcmp(argv[0], "ok") != 0) {
- LOGE("check integrity result : %s" , argv[0]);
- is_db_corrupted = true;
- return -1;
- } else {
- LOGD("check integrity result : %s" , argv[0]);
- }
-
- return 0;
-}
-
-int __check_alarmmgr_table(sqlite3 *alarmmgr_db, bool *is_exist)
-{
- sqlite3_stmt *stmt = NULL;
- int count, sqlret;
-
- sqlret = sqlite3_prepare_v2(alarmmgr_db,
- "SELECT COUNT(*) FROM sqlite_master WHERE name='alarmmgr'",
- -1, &stmt, NULL);
- if (sqlret != SQLITE_OK) {
- /* LCOV_EXCL_START */
- LOGE("sqlite3_prepare_v2 failed [%d][%s]", sqlret,
- sqlite3_errmsg(alarmmgr_db));
- return sqlret;
- /* LCOV_EXCL_STOP */
- }
-
- sqlret = sqlite3_step(stmt);
- if (sqlret == SQLITE_ROW)
- count = sqlite3_column_int(stmt, 0);
- else
- count = 0;
-
- LOGD("DB search result[%d]", count);
-
- if (count > 0)
- *is_exist = true;
- else
- *is_exist = false;
-
- sqlite3_finalize(stmt);
-
- return SQLITE_OK;
-
-}
-bool _initialize_db()
-{
- char *error_message = NULL;
- int ret;
- bool is_exist;
-
- /* Create or Open the DB file */
- ret = sqlite3_open(ALARMMGR_DB_FILE, &alarmmgr_db);
- if (ret != SQLITE_OK) {
- LOGE("Failed to open [%s]. error: %s", ALARMMGR_DB_FILE, sqlite3_errmsg(alarmmgr_db));
- if (ret == SQLITE_CORRUPT)
- goto recover;
- else
- return false;
- }
- /* Register busy handler */
- ret = sqlite3_busy_handler(alarmmgr_db, __db_busyhandler, NULL);
- if (ret != SQLITE_OK) {
- LOGE("Failed to register the busy handler");
- if (ret == SQLITE_CORRUPT) {
- goto recover;
- } else {
- sqlite3_close(alarmmgr_db);
- return false;
- }
- }
-
- ret = __check_alarmmgr_table(alarmmgr_db, &is_exist);
- if (ret != SQLITE_OK) {
- if (ret == SQLITE_CORRUPT) {
- goto recover;
- } else {
- sqlite3_close(alarmmgr_db);
- return false;
- }
- }
-
- /* Create alarmmgr table */
- ret = sqlite3_exec(alarmmgr_db, QUERY_CREATE_TABLE_ALARMMGR, NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("Don't execute query = %s, error message = %s", QUERY_CREATE_TABLE_ALARMMGR, error_message);
- if (ret == SQLITE_CORRUPT || ret == SQLITE_NOTADB) {
- goto recover;
- } else {
- sqlite3_close(alarmmgr_db);
- sqlite3_free(error_message);
- return false;
- }
- }
-
- if (is_exist == false) {
- if (__create_db_version() != 0) {
- sqlite3_close(alarmmgr_db);
- return false;
- }
-
- if (__update_db_version(SCHEMA_VERSION_LATEST) != 0) {
- sqlite3_close(alarmmgr_db);
- return false;
- }
- } else {
- ret = __db_upgrade();
- if (ret) {
- LOGE("Failed db's migration");
- sqlite3_close(alarmmgr_db);
- return false;
- }
- }
-
- /* Check integrity of DB */
- ret = sqlite3_exec(alarmmgr_db, "PRAGMA integrity_check", __check_callback, NULL, 0);
- if (ret != SQLITE_OK || is_db_corrupted) {
- LOGE("Loss alarm db's integrity");
- goto recover;
- }
-
- return true;
-
-recover:
- if (alarmmgr_db)
- sqlite3_close(alarmmgr_db);
- if (error_message)
- sqlite3_free(error_message);
- unlink(ALARMMGR_DB_FILE);
-
- ret = sqlite3_open(ALARMMGR_DB_FILE, &alarmmgr_db);
- if (ret != SQLITE_OK) {
- LOGE("[recover] Failed to open [%s]. error: %s", ALARMMGR_DB_FILE, sqlite3_errmsg(alarmmgr_db));
- return false;
- }
-
- ret = sqlite3_busy_handler(alarmmgr_db, __db_busyhandler, NULL);
- if (ret != SQLITE_OK) {
- LOGE("[recover] Failed to register the busy handler");
- sqlite3_close(alarmmgr_db);
- return false;
- }
-
- ret = sqlite3_exec(alarmmgr_db, QUERY_CREATE_TABLE_ALARMMGR, NULL, NULL, &error_message);
- if (ret != SQLITE_OK) {
- LOGE("[recover] Don't execute query = %s, error message = %s", QUERY_CREATE_TABLE_ALARMMGR, error_message);
- sqlite3_close(alarmmgr_db);
- sqlite3_free(error_message);
- return false;
- }
-
- if (__create_db_version() != 0) {
- sqlite3_close(alarmmgr_db);
- return false;
- }
-
- if (__update_db_version(SCHEMA_VERSION_LATEST) != 0) {
- sqlite3_close(alarmmgr_db);
- return false;
- }
-
- return true;
-}
diff --git a/server/alarm-manager-db.cc b/server/alarm-manager-db.cc
new file mode 100644
index 0000000..73f564f
--- /dev/null
+++ b/server/alarm-manager-db.cc
@@ -0,0 +1,864 @@
+/*
+* Copyright (c) 2000 - 2023 Samsung Electronics Co., Ltd All Rights Reserved
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+
+#include "alarm-manager-db.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sqlite3.h>
+#include <glib.h>
+#include <tzplatform_config.h>
+
+#include <database.hpp>
+
+extern GSList* g_disabled_alarm_list;
+extern __alarm_server_context_t alarm_context;
+
+namespace {
+
+constexpr const char QUERY_CREATE_TABLE_ALARMMGR[] = R"__alarm(
+CREATE TABLE IF NOT EXISTS alarmmgr (
+ alarm_id INTEGER PRIMARY KEY,
+ start INTEGER,
+ end INTEGER,
+ uid INTEGER,
+ global INTEGER,
+ is_disabled INTEGER,
+ caller_pkgid TEXT,
+ callee_pkgid TEXT,
+ app_unique_name TEXT,
+ app_service_name TEXT,
+ app_service_name_mod TEXT,
+ bundle TEXT,
+ noti_len INTEGER,
+ noti TEXT,
+ year INTEGER,
+ month INTEGER,
+ day INTEGER,
+ hour INTEGER,
+ min INTEGER,
+ sec INTEGER,
+ msec INTEGER,
+ day_of_week INTEGER,
+ repeat INTEGER,
+ alarm_type INTEGER,
+ reserved_info INTEGER,
+ dst_service_name TEXT,
+ dst_service_name_mod TEXT)
+)__alarm";
+
+constexpr const int LATEST_SETTIME_ID = -2;
+
+enum SchemaVersion {
+ SCHEMA_VERSION_0 = 0,
+ SCHEMA_VERSION_1 = 1,
+ SCHEMA_VERSION_LATEST = SCHEMA_VERSION_1
+};
+
+struct MigrationFunc {
+ const char *change_log;
+ int (*func)(void);
+};
+
+std::unique_ptr<tizen_base::Database> alarmmgr_db;
+bool is_db_corrupted = false;
+
+char* GetCString(int idx, const tizen_base::Database::Result::Record& rec,
+ int max_size = -1) {
+ std::optional<std::string> str = rec.GetString(idx);
+ if (!str)
+ return nullptr;
+ if (*str == "null")
+ return nullptr;
+
+ if (max_size > 0) {
+ return strdup(str->substr(max_size).c_str());
+ }
+
+ return strdup(str->c_str());
+}
+
+int MigrationFuncVersion1() {
+ static const char query[] =
+ "CREATE TABLE IF NOT EXISTS alarmmgr_temp ("
+ " alarm_id INTEGER PRIMARY KEY, "
+ " start INTEGER, "
+ " end INTEGER, "
+ " uid INTEGER, "
+ " global INTEGER, "
+ " is_disabled INTEGER, "
+ " caller_pkgid TEXT, "
+ " callee_pkgid TEXT, "
+ " app_unique_name TEXT, "
+ " app_service_name TEXT, "
+ " app_service_name_mod TEXT, "
+ " bundle TEXT, "
+ " noti_len INTEGER, "
+ " noti TEXT, "
+ " year INTEGER, "
+ " month INTEGER, "
+ " day INTEGER, "
+ " hour INTEGER, "
+ " min INTEGER, "
+ " sec INTEGER, "
+ " msec INTEGER, "
+ " day_of_week INTEGER, "
+ " repeat INTEGER, "
+ " alarm_type INTEGER, "
+ " reserved_info INTEGER, "
+ " dst_service_name TEXT, "
+ " dst_service_name_mod TEXT "
+ ")";
+
+ static const char insert_query[] =
+ "INSERT INTO alarmmgr_temp (alarm_id, start, "
+ "end, uid, global, is_disabled, caller_pkgid, callee_pkgid, "
+ "app_unique_name, app_service_name, app_service_name_mod, "
+ "bundle, noti_len, noti, year, month, day, hour, min, sec, msec, "
+ "day_of_week, repeat, alarm_type, reserved_info, "
+ "dst_service_name, dst_service_name_mod) "
+ "SELECT alarm_id, start, end, uid, global, is_disabled, "
+ "caller_pkgid, callee_pkgid, app_unique_name, app_service_name, "
+ "app_service_name_mod, bundle, noti_len, noti, year, month, "
+ "day, hour, min, sec, msec, day_of_week, repeat, alarm_type, "
+ "reserved_info, dst_service_name, dst_service_name_mod "
+ "FROM alarmmgr";
+
+ LOGD("DB migration init version start");
+ alarmmgr_db->OneStepExec({ "DROP TABLE IF EXISTS alarmmgr_temp" });
+ alarmmgr_db->OneStepExec({ query });
+ alarmmgr_db->OneStepExec({ insert_query });
+ alarmmgr_db->OneStepExec({ "DROP TABLE alarmmgr" });
+ alarmmgr_db->OneStepExec({ "ALTER TABLE alarmmgr_temp RENAME TO alarmmgr" });
+
+ return ALARMMGR_RESULT_SUCCESS;
+}
+
+const MigrationFunc m_func[] = {
+ { "SCHEMA_VERSION_0", nullptr },
+ { "SCHEMA_VERSION_1", MigrationFuncVersion1 }
+};
+
+const char* GetAlarmDbFile() {
+ static std::string str;
+
+ if (!str.empty())
+ return str.c_str();
+
+ str = tzplatform_mkpath(TZ_SYS_DB, ".alarmmgr.db");
+ return str.c_str();
+}
+
+int CreateDbVersion() {
+ alarmmgr_db->OneStepExec(
+ { "CREATE TABLE IF NOT EXISTS schema_version (version INTEGER)" });
+ return 0;
+}
+
+int UpdateDbVersion(int ver) {
+ auto r = alarmmgr_db->Exec({ "DELETE FROM schema_version" });
+ if (!r) {
+ LOGE("db.Exec() failed: %s", static_cast<const char*>(r));
+ return -1;
+ }
+
+ auto q = tizen_base::Database::Sql(
+ "INSERT INTO schema_version (version) VALUES (?)")
+ .Bind(ver);
+ r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec() failed: %s", static_cast<const char*>(r));
+ return -1;
+ }
+
+ return 0;
+}
+
+int GetDbVersion() {
+ auto r = alarmmgr_db->Exec({ "SELECT version FROM schema_version" });
+ if (!r) {
+ LOGE("db.Exec() failed: %s", static_cast<const char*>(r));
+ return -1;
+ }
+
+ auto rec = r.GetFirstRecord();
+ if (!rec)
+ return -1;
+ return static_cast<int>(rec->Get(0));
+}
+
+int DbUpgrade() {
+ int ver = GetDbVersion();
+ if (ver >= SCHEMA_VERSION_LATEST)
+ return 0;
+
+ auto guard = alarmmgr_db->CreateTransactionGuard();
+ if (ver == -1) {
+ LOGD("Schema version not exists : %d", ver);
+ int ret = CreateDbVersion();
+ if (ret != 0)
+ return ret;
+
+ ver = SCHEMA_VERSION_0;
+ }
+
+ for (int i = ver + 1 ; i <= SCHEMA_VERSION_LATEST; i++) {
+ if (m_func[i].func() != ALARMMGR_RESULT_SUCCESS)
+ return -1;
+ }
+
+ int ret = UpdateDbVersion(SCHEMA_VERSION_LATEST);
+ guard.Commit();
+
+ return ret;
+}
+
+bool DbBusyHandler(int count) {
+ if (5 - count > 0) {
+ struct timespec time = {
+ .tv_sec = 0,
+ .tv_nsec = (count + 1) * 100 * 1000 * 1000
+ };
+ nanosleep(&time, nullptr);
+ LOGD("alarmmgr_db: busy handler called. count: %d", count + 1);
+ return true;
+ } else {
+ LOGD("alarmmgr_db: busy handler will return SQLITE_BUSY error");
+ return false;
+ }
+}
+
+bool ReopenDb() {
+ unlink(GetAlarmDbFile());
+ try {
+ alarmmgr_db.reset(
+ new tizen_base::Database(
+ GetAlarmDbFile(), SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
+ DbBusyHandler));
+ alarmmgr_db->OneStepExec({ QUERY_CREATE_TABLE_ALARMMGR });
+ } catch (const tizen_base::DbException& e) {
+ LOGE("[ReopenDb] Failed error: %s", e.msg());
+ alarmmgr_db.reset();
+ return false;
+ }
+
+ if (CreateDbVersion() != 0) {
+ alarmmgr_db.reset();
+ return false;
+ }
+
+ if (UpdateDbVersion(SCHEMA_VERSION_LATEST) != 0) {
+ alarmmgr_db.reset();
+ return false;
+ }
+
+ return true;
+}
+
+void RecoverDb() {
+}
+
+int CheckAlarmMgrTable(const tizen_base::Database& db, bool* is_exist) {
+ auto r = db.Exec(
+ { "SELECT COUNT(*) FROM sqlite_master WHERE name='alarmmgr'" });
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return static_cast<int>(r);
+ }
+
+ auto rec = r.GetFirstRecord();
+ if (!rec) {
+ *is_exist = false;
+ return SQLITE_OK;
+ }
+
+ int count = static_cast<int>(rec->Get(0));
+ LOGD("DB search result[%d]", count);
+
+ if (count > 0)
+ *is_exist = true;
+ else
+ *is_exist = false;
+
+ return SQLITE_OK;
+}
+
+int CheckCallback(void* pid, int argc, char** argv, char** notUsed2) {
+ if (strcmp(argv[0], "ok") != 0) {
+ LOGE("check integrity result : %s" , argv[0]);
+ is_db_corrupted = true;
+ return -1;
+ } else {
+ LOGD("check integrity result : %s" , argv[0]);
+ }
+
+ return 0;
+}
+
+bool SaveAlarms(__alarm_info_t* __alarm_info) {
+ base_info_t* base_info = static_cast<base_info_t*>(
+ &(__alarm_info->base_info));
+ alarm_date_t* start = &base_info->start;
+ alarm_mode_t* mode = &base_info->mode;
+
+ auto q = tizen_base::Database::Sql(
+ "INSERT INTO alarmmgr (alarm_id, start, end, uid, global, is_disabled, "
+ "caller_pkgid, callee_pkgid, app_unique_name, app_service_name, "
+ "app_service_name_mod, bundle, noti_len, noti, year, month, day, "
+ "hour, min, sec, msec, day_of_week, repeat, alarm_type, reserved_info, "
+ "dst_service_name, dst_service_name_mod) "
+ "VALUES (?, ?, ?, ?, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
+ "?, ?, ?, ?, ?, ?)")
+ .Bind(__alarm_info->alarm_id)
+ .Bind(static_cast<int64_t>(__alarm_info->start))
+ .Bind(static_cast<int64_t>(__alarm_info->end))
+ .Bind(static_cast<int>(__alarm_info->uid))
+ .Bind(__alarm_info->global)
+ .Bind(__alarm_info->caller_pkgid)
+ .Bind(__alarm_info->callee_pkgid)
+ .Bind(__alarm_info->app_unique_name)
+ .Bind(__alarm_info->app_service_name)
+ .Bind(__alarm_info->app_service_name_mod)
+ .Bind(__alarm_info->bundle)
+ .Bind(__alarm_info->noti ?
+ static_cast<int>(strlen(__alarm_info->noti)) : 0)
+ .Bind(__alarm_info->noti)
+ .Bind(start->year)
+ .Bind(start->month)
+ .Bind(start->day)
+ .Bind(start->hour)
+ .Bind(start->min)
+ .Bind(start->sec)
+ .Bind(base_info->msec)
+ .Bind(mode->u_interval.day_of_week)
+ .Bind(mode->repeat)
+ .Bind(base_info->alarm_type)
+ .Bind(static_cast<int64_t>(base_info->reserved_info))
+ .Bind(__alarm_info->dst_service_name)
+ .Bind(__alarm_info->dst_service_name_mod);
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ return true;
+}
+
+bool UpdateAlarms(__alarm_info_t* __alarm_info) {
+ base_info_t* base_info =
+ static_cast<base_info_t*>(&(__alarm_info->base_info));
+ alarm_date_t* start = &base_info->start;
+ alarm_mode_t* mode = &base_info->mode;
+
+ auto q = tizen_base::Database::Sql(
+ "UPDATE alarmmgr SET start=?, end=?, uid=?, global=?, is_disabled=0, "
+ "caller_pkgid=?, callee_pkgid=?, app_unique_name=?, app_service_name=?, "
+ "app_service_name_mod=?, bundle=?, noti_len=?, noti=?, year=?, month=?, "
+ "day=?, hour=?, min=?, sec=?, msec=?, day_of_week=?, repeat=?, "
+ "alarm_type=?, reserved_info=?, dst_service_name=?, "
+ "dst_service_name_mod=? WHERE alarm_id=?")
+ .Bind(static_cast<int64_t>(__alarm_info->start))
+ .Bind(static_cast<int64_t>(__alarm_info->end))
+ .Bind(static_cast<int>(__alarm_info->uid))
+ .Bind(__alarm_info->global)
+ .Bind(__alarm_info->caller_pkgid)
+ .Bind(__alarm_info->callee_pkgid)
+ .Bind(__alarm_info->app_unique_name)
+ .Bind(__alarm_info->app_service_name)
+ .Bind(__alarm_info->app_service_name_mod)
+ .Bind(__alarm_info->bundle)
+ .Bind(__alarm_info->noti ?
+ static_cast<int>(strlen(__alarm_info->noti)) : 0)
+ .Bind(__alarm_info->noti)
+ .Bind(start->year)
+ .Bind(start->month)
+ .Bind(start->day)
+ .Bind(start->hour)
+ .Bind(start->min)
+ .Bind(start->sec)
+ .Bind(base_info->msec)
+ .Bind(mode->u_interval.day_of_week)
+ .Bind(mode->repeat)
+ .Bind(base_info->alarm_type)
+ .Bind(static_cast<int64_t>(base_info->reserved_info))
+ .Bind(__alarm_info->dst_service_name)
+ .Bind(__alarm_info->dst_service_name_mod)
+ .Bind(__alarm_info->alarm_id);
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec() failed: %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ return true;
+}
+
+bool DeleteAlarms(alarm_id_t alarm_id) {
+ auto q = tizen_base::Database::Sql(
+ "DELETE FROM alarmmgr WHERE alarm_id=?")
+ .Bind(alarm_id);
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ return true;
+}
+
+void LoadAlarmsFromDb() {
+ if (!alarmmgr_db)
+ return;
+
+ auto r = alarmmgr_db->Exec({ "SELECT * FROM alarmmgr" });
+ if (!r) {
+ LOGE("db.Exec() failed: %s", static_cast<const char*>(r));
+ return;
+ }
+
+ for (const auto& rec : r) {
+ int col_idx = 0;
+ __alarm_info_t* __alarm_info = reinterpret_cast<__alarm_info_t*>(
+ calloc(1, sizeof(__alarm_info_t)));
+
+ if (G_UNLIKELY(__alarm_info == nullptr)) {
+ LOGE("Memory allocation failed.");
+ break;
+ }
+
+ base_info_t* base_info = (base_info_t *) &(__alarm_info->base_info);
+ alarm_date_t* start = &base_info->start;
+ alarm_mode_t* mode = &base_info->mode;
+ __alarm_info->alarm_id = static_cast<int>(rec.Get(col_idx++));
+ int64_t start_64 = static_cast<int64_t>(rec.Get(col_idx++));
+ __alarm_info->start = static_cast<time_t>(start_64);
+ int64_t end_64 = static_cast<int64_t>(rec.Get(col_idx++));
+ __alarm_info->end = static_cast<time_t>(end_64);
+ __alarm_info->uid = static_cast<int>(rec.Get(col_idx++));
+ __alarm_info->global = static_cast<int>(rec.Get(col_idx++));
+ int is_disabled = static_cast<int>(rec.Get(col_idx++));
+ __alarm_info->caller_pkgid = GetCString(col_idx++, rec);
+ __alarm_info->callee_pkgid = GetCString(col_idx++, rec);
+ __alarm_info->app_unique_name = GetCString(col_idx++, rec);
+ __alarm_info->app_service_name = GetCString(col_idx++, rec);
+ __alarm_info->app_service_name_mod = GetCString(col_idx++, rec);
+ __alarm_info->bundle = GetCString(col_idx++, rec);
+ int noti_len = static_cast<int>(rec.Get(col_idx++));
+ noti_len = noti_len ? noti_len : strlen("null");
+ __alarm_info->noti = GetCString(col_idx++, rec, noti_len);
+ start->year = static_cast<int>(rec.Get(col_idx++));
+ start->month = static_cast<int>(rec.Get(col_idx++));
+ start->day = static_cast<int>(rec.Get(col_idx++));
+ start->hour = static_cast<int>(rec.Get(col_idx++));
+ start->min = static_cast<int>(rec.Get(col_idx++));
+ start->sec = static_cast<int>(rec.Get(col_idx++));
+ base_info->msec = static_cast<int>(rec.Get(col_idx++));
+ mode->u_interval.day_of_week = static_cast<int>(rec.Get(col_idx++));
+ mode->repeat = static_cast<alarm_repeat_mode_t>(static_cast<int>(rec.Get(col_idx++)));
+ base_info->alarm_type = static_cast<int>(rec.Get(col_idx++));
+ int64_t reserved_info_64 = static_cast<int64_t>(rec.Get(col_idx++));
+ base_info->reserved_info = static_cast<time_t>(reserved_info_64);
+ __alarm_info->dst_service_name = GetCString(col_idx++, rec);
+ __alarm_info->dst_service_name_mod = GetCString(col_idx++, rec);
+
+ if (is_disabled) {
+ _alarm_set_next_duetime(__alarm_info);
+ g_disabled_alarm_list = g_slist_append(g_disabled_alarm_list, __alarm_info);
+ LOGW("Save alarm_id[%d] caller[%s] callee[%s]", __alarm_info->alarm_id,
+ __alarm_info->caller_pkgid, __alarm_info->callee_pkgid);
+ } else {
+ _alarm_set_next_duetime(__alarm_info);
+ alarm_context.alarms = g_slist_append(alarm_context.alarms, __alarm_info);
+ }
+ }
+
+ _alarm_schedule();
+}
+
+int GetDbPathForAllInfo(uid_t uid, char** db_path) {
+ char db_path_tmp[50] = {0,};
+ constexpr const char query_for_creating_table[] =
+ "CREATE TABLE alarmmgr_tool (alarm_id integer primary key, "
+ "duetime_epoch integer, duetime text, start_epoch integer, "
+ "end_epoch integer, global integer, caller_pkgid text, "
+ "callee_pkgid text, app_unique_name text, app_service_name text, "
+ "dst_service_name text, day_of_week integer, repeat integer, "
+ "alarm_type integer)";
+ constexpr const char query_for_deleting_table[] =
+ "DROP TABLE alarmmgr_tool";
+ time_t current_time = 0;
+ struct tm current_tm;
+ int index = 0;
+
+ time(&current_time);
+ tzset();
+ localtime_r(&current_time, &current_tm);
+ snprintf(db_path_tmp, sizeof(db_path_tmp),
+ "/tmp/alarmmgr_%d%d%d_%02d%02d%02d.db",
+ current_tm.tm_year + 1900, current_tm.tm_mon + 1,
+ current_tm.tm_mday, current_tm.tm_hour, current_tm.tm_min,
+ current_tm.tm_sec);
+
+ *db_path = strdup(db_path_tmp);
+ if (*db_path == nullptr) {
+ LOGE("Out of memory");
+ return ERR_ALARM_SYSTEM_FAIL;
+ }
+
+ tizen_base::Database alarmmgr_tool_db(db_path_tmp,
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
+ DbBusyHandler);
+ auto r = alarmmgr_tool_db.Exec({ query_for_deleting_table });
+ if (!r)
+ LOGE("Deleting the table failed : %s", static_cast<const char*>(r));
+
+ alarmmgr_tool_db.OneStepExec({ query_for_creating_table });
+ for (GSList* gs_iter = alarm_context.alarms; gs_iter != nullptr;
+ gs_iter = g_slist_next(gs_iter)) {
+ __alarm_info_t* entry = reinterpret_cast<__alarm_info_t*>(
+ gs_iter->data);
+ if (uid >= REGULAR_UID_MIN && entry->uid != uid)
+ continue;
+ ++index;
+ SECURE_LOGD("#%d alarm id[%d] app_name[%s] duetime[%ld]",
+ index, entry->alarm_id, entry->app_unique_name, entry->start);
+
+ base_info_t *base_info = (base_info_t *) &(entry->base_info);
+ alarm_mode_t *mode = &base_info->mode;
+
+ auto q = tizen_base::Database::Sql(
+ "INSERT INTO alarmmgr_tool( alarm_id, duetime_epoch, duetime, "
+ "start_epoch, end_epoch, global, caller_pkgid, callee_pkgid, "
+ "app_unique_name, app_service_name, dst_service_name, day_of_week, "
+ "repeat, alarm_type) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
+ .Bind(entry->alarm_id)
+ .Bind(static_cast<int>(entry->due_time))
+ .Bind(ctime(&(entry->due_time)))
+ .Bind(static_cast<int>(entry->start))
+ .Bind(static_cast<int>(entry->end))
+ .Bind((bool)entry->global)
+ .Bind(entry->caller_pkgid)
+ .Bind(entry->callee_pkgid)
+ .Bind(entry->app_unique_name)
+ .Bind(entry->app_service_name)
+ .Bind(entry->dst_service_name)
+ .Bind(mode->u_interval.day_of_week)
+ .Bind(mode->repeat)
+ .Bind(entry->base_info.alarm_type);
+ auto r = alarmmgr_tool_db.Exec(q);
+ if (!r)
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ }
+
+ return ALARMMGR_RESULT_SUCCESS;
+}
+
+void UpdateRelativeAlarms(gpointer user_data) {
+ auto guard = alarmmgr_db->CreateTransactionGuard();
+
+ for (GSList* iter = alarm_context.alarms; iter != nullptr;
+ iter = g_slist_next(iter)) {
+ __alarm_info_t* entry = reinterpret_cast<__alarm_info_t*>(iter->data);
+ base_info_t* base_info = &(entry->base_info);
+ if (base_info->alarm_type & ALARM_TYPE_RELATIVE)
+ _update_alarms(entry);
+ }
+
+ guard.Commit();
+}
+
+bool AlarmSetGlobalToDb(__alarm_info_t* alarm_info, bool global) {
+ auto q = tizen_base::Database::Sql(
+ "UPDATE alarmmgr SET global=? WHERE alarm_id=?")
+ .Bind(alarm_info->global)
+ .Bind(alarm_info->alarm_id);
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ return true;
+}
+
+void UpdateDbForDisabledAlarm(alarm_id_t alarm_id, bool disabled) {
+ LOGW("Update (%d) is_disabled to (%d)", alarm_id, disabled);
+ auto q = tizen_base::Database::Sql(
+ "UPDATE alarmmgr SET is_disabled=? WHERE alarm_id=?")
+ .Bind(disabled)
+ .Bind(alarm_id);
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r)
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+}
+
+bool InitializeDb() {
+ try {
+ alarmmgr_db.reset(new tizen_base::Database(GetAlarmDbFile(),
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, DbBusyHandler));
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Failed to open [%s]. error: %s", GetAlarmDbFile(), e.msg());
+ if (e.code() == SQLITE_CORRUPT)
+ RecoverDb();
+ else
+ return false;
+ }
+
+ bool is_exist = false;
+ int ret = CheckAlarmMgrTable(*alarmmgr_db, &is_exist);
+ if (ret != SQLITE_OK) {
+ if (ret == SQLITE_CORRUPT) {
+ RecoverDb();
+ } else {
+ alarmmgr_db.reset();
+ return false;
+ }
+ }
+
+ auto r = alarmmgr_db->Exec({QUERY_CREATE_TABLE_ALARMMGR});
+
+ if (!r) {
+ LOGE("Don't execute query = %s, error message = %s",
+ QUERY_CREATE_TABLE_ALARMMGR, static_cast<const char*>(r));
+ if (static_cast<int>(r) == SQLITE_CORRUPT ||
+ static_cast<int>(r) == SQLITE_NOTADB) {
+ RecoverDb();
+ alarmmgr_db.reset();
+ }
+
+ return false;
+ }
+
+ if (is_exist == false) {
+ if (CreateDbVersion() != 0) {
+ alarmmgr_db.reset();
+ return false;
+ }
+
+ if (UpdateDbVersion(SCHEMA_VERSION_LATEST) != 0) {
+ alarmmgr_db.reset();
+ return false;
+ }
+ } else {
+ ret = DbUpgrade();
+ if (ret) {
+ LOGE("Failed db's migration");
+ alarmmgr_db.reset();
+ return false;
+ }
+ }
+
+ ret = sqlite3_exec(alarmmgr_db->GetRaw(), "PRAGMA integrity_check",
+ CheckCallback, nullptr, 0);
+ if (ret != SQLITE_OK || is_db_corrupted) {
+ LOGE("Loss alarm db's integrity");
+ return ReopenDb();
+ }
+
+ return true;
+}
+
+bool SetLatestSettime(time_t settime) {
+ auto q = tizen_base::Database::Sql(
+ "INSERT OR REPLACE INTO alarmmgr( alarm_id, start, "
+ "end, uid, global, is_disabled, caller_pkgid, callee_pkgid, "
+ "app_unique_name, app_service_name, app_service_name_mod, bundle, "
+ "noti_len, noti, year, month, day, hour, min, sec, msec, day_of_week, "
+ "repeat, alarm_type, reserved_info, dst_service_name, "
+ "dst_service_name_mod) "
+ "VALUES (?, ?, 0, 0, 0, 1, 'n', 'n', 'n', 'n', 'n', 'n', 0, 'n', "
+ "0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'n', 'n')")
+ .Bind(LATEST_SETTIME_ID)
+ .Bind(static_cast<int64_t>(settime));
+
+ if (!alarmmgr_db)
+ return false;
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ LOGD("latest_settime : %ld", settime);
+ return true;
+}
+
+bool GetLatestSettime(time_t* settime) {
+ auto q = tizen_base::Database::Sql(
+ "SELECT start FROM alarmmgr WHERE alarm_id=?")
+ .Bind(LATEST_SETTIME_ID);
+
+ if (!alarmmgr_db)
+ return false;
+
+ auto r = alarmmgr_db->Exec(q);
+ if (!r) {
+ LOGE("db.Exec failed : %s", static_cast<const char*>(r));
+ return false;
+ }
+
+ auto rec = r.GetFirstRecord();
+ if (!rec) {
+ LOGE("latest_settime is not set");
+ return false;
+ }
+
+ *settime = static_cast<int64_t>(rec->Get(0));
+ LOGD("latest_settime : %ld", *settime);
+ return true;
+}
+
+} // namespace
+
+bool _save_alarms(__alarm_info_t* __alarm_info) {
+ try {
+ return SaveAlarms(__alarm_info);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+bool _update_alarms(__alarm_info_t* __alarm_info) {
+ try {
+ return UpdateAlarms(__alarm_info);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+bool _delete_alarms(alarm_id_t alarm_id) {
+ try {
+ return DeleteAlarms(alarm_id);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+void _load_alarms_from_db() {
+ try {
+ LoadAlarmsFromDb();
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ }
+}
+
+int _get_db_path_for_all_info(uid_t uid, char** db_path) {
+ try {
+ return GetDbPathForAllInfo(uid, db_path);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return ERR_ALARM_SYSTEM_FAIL;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return ERR_ALARM_SYSTEM_FAIL;
+ }
+}
+
+gboolean _update_relative_alarms(gpointer user_data) {
+ try {
+ UpdateRelativeAlarms(user_data);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ }
+
+ return G_SOURCE_REMOVE;
+}
+
+bool _alarm_set_global_to_db(__alarm_info_t* alarm_info, bool global) {
+ try {
+ return AlarmSetGlobalToDb(alarm_info, global);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled) {
+ try {
+ UpdateDbForDisabledAlarm(alarm_id, disabled);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ }
+}
+
+bool _initialize_db() {
+ try {
+ return InitializeDb();
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+bool _set_latest_settime(time_t settime) {
+ try {
+ return SetLatestSettime(settime);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
+
+bool _get_latest_settime(time_t* settime) {
+ try {
+ return GetLatestSettime(settime);
+ } catch (const tizen_base::DbException& e) {
+ LOGE("Exception: %s", e.msg());
+ return false;
+ } catch (const std::exception& e) {
+ LOGE("Exception: %s", e.what());
+ return false;
+ }
+}
diff --git a/server/alarm-manager-db.h b/server/alarm-manager-db.h
index b454ba2..e8ab5b6 100644
--- a/server/alarm-manager-db.h
+++ b/server/alarm-manager-db.h
@@ -15,15 +15,15 @@
*/
#pragma once
-#ifdef __cplusplus
-extern "C" {
-#endif
-
#include <glib.h>
#include "alarm.h"
#include "alarm-internal.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
bool _alarm_set_global_to_db(__alarm_info_t *alarm_info, bool global);
bool _delete_alarms(alarm_id_t alarm_id);
int _get_db_path_for_all_info(uid_t uid, char** db_path);
@@ -33,8 +33,8 @@ bool _save_alarms(__alarm_info_t *__alarm_info);
bool _update_alarms(__alarm_info_t *__alarm_info);
gboolean _update_relative_alarms(gpointer user_data);
void _update_db_for_disabled_alarm(alarm_id_t alarm_id, bool disabled_by_ups);
-
-int migration_func_version_1(void);
+bool _get_latest_settime(time_t *settime);
+bool _set_latest_settime(time_t settime);
#ifdef __cplusplus
}
diff --git a/server/alarm-manager-dbus.c b/server/alarm-manager-dbus.c
index 927ae04..43ff36f 100644
--- a/server/alarm-manager-dbus.c
+++ b/server/alarm-manager-dbus.c
@@ -142,7 +142,7 @@ static const gchar introspection_xml[] =
" </method>"
" <method name='alarm_get_list_of_ids'>"
" <arg type='i' name='max_number_of_ids' direction='in' />"
-" <arg type='ai' name='alarm_id' direction='out' />"
+" <arg type='a(i)' name='alarm_id' direction='out' />"
" <arg type='i' name='number_of_ids' direction='out' />"
" <arg type='i' name='return_code' direction='out' />"
" </method>"
@@ -228,7 +228,7 @@ static gboolean __send_noti_to_session_bus(char *service_name,
{
int fd;
int ret;
- int len;
+ size_t len;
struct sockaddr_un saddr;
uint8_t *data;
GVariant *gv;
@@ -270,18 +270,18 @@ static gboolean __send_noti_to_session_bus(char *service_name,
g_variant_store(gv, gv_data);
g_variant_unref(gv);
- data = (uint8_t *)malloc(len + 4);
+ data = (uint8_t *)malloc(len + sizeof(len));
if (!data) {
close(fd);
free(gv_data);
return FALSE;
}
- memcpy(data, &len, 4);
- memcpy(data + 4, gv_data, len);
+ memcpy(data, &len, sizeof(len));
+ memcpy(data + sizeof(len), gv_data, len);
free(gv_data);
- if (send(fd, data, len + 4, 0) == -1) {
+ if (send(fd, data, len + sizeof(len), 0) == -1) {
LOGE("sendto() failed (errno %d)", errno);
free(data);
close(fd);
@@ -634,38 +634,40 @@ static void handle_method_call(GDBusConnection *connection,
pid_t pid = __get_caller_pid(name);
if (g_strcmp0(method_name, "alarm_create_periodic") == 0) {
- ret = alarm_manager_alarm_create_periodic(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_periodic(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create") == 0) {
- ret = alarm_manager_alarm_create(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create_appsvc") == 0) {
- ret = alarm_manager_alarm_create_appsvc(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_appsvc(parameters, uid, pid, sender, &alarm_id);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_create_noti") == 0) {
const char *notification_priv = "http://tizen.org/privilege/notification";
ret = _cynara_check(invoc, notification_priv, pid);
if (ret == ALARMMGR_RESULT_SUCCESS) {
- ret = alarm_manager_alarm_create_noti(parameters, uid, pid, &alarm_id);
+ ret = alarm_manager_alarm_create_noti(parameters, uid, pid, sender, &alarm_id);
}
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", alarm_id, ret));
} else if (g_strcmp0(method_name, "alarm_delete") == 0) {
- ret = alarm_manager_alarm_delete(parameters, uid, pid);
+ ret = alarm_manager_alarm_delete(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_delete_all") == 0) {
- ret = alarm_manager_alarm_delete_all(parameters, uid, pid);
+ ret = alarm_manager_alarm_delete_all(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_update") == 0) {
- ret = alarm_manager_alarm_update(parameters, uid, pid);
+ ret = alarm_manager_alarm_update(parameters, uid, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
} else if (g_strcmp0(method_name, "alarm_get_number_of_ids") == 0) {
- ret = alarm_manager_alarm_get_number_of_ids(uid, pid, &num_of_alarm);
+ ret = alarm_manager_alarm_get_number_of_ids(uid, pid, sender, &num_of_alarm);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", num_of_alarm, ret));
} else if (g_strcmp0(method_name, "alarm_get_list_of_ids") == 0) {
- GVariant *arr = NULL;
+ GVariantBuilder *arr = g_variant_builder_new(G_VARIANT_TYPE("a(i)"));
- ret = alarm_manager_alarm_get_list_of_ids(parameters, uid, pid, &arr, &num_of_alarm);
- g_dbus_method_invocation_return_value(invoc, g_variant_new("(@aiii)", arr, num_of_alarm, ret));
+ ret = alarm_manager_alarm_get_list_of_ids(parameters, uid, pid, sender, arr, &num_of_alarm);
+ g_dbus_method_invocation_return_value(invoc, g_variant_new("(a(i)ii)", arr, num_of_alarm, ret));
+
+ g_variant_builder_unref(arr);
} else if (g_strcmp0(method_name, "alarm_get_appsvc_info") == 0) {
gchar *b_data = NULL;
@@ -682,19 +684,19 @@ static void handle_method_call(GDBusConnection *connection,
if (noti_data)
free(noti_data);
} else if (g_strcmp0(method_name, "alarm_get_info") == 0) {
- alarm_info_t alarm_info = { 0, };
+ base_info_t base_info = { 0, };
- ret = alarm_manager_alarm_get_info(parameters, uid, &alarm_info);
+ ret = alarm_manager_alarm_get_info(parameters, uid, &base_info);
g_dbus_method_invocation_return_value(
invoc, g_variant_new("(iiiiiiiiiiiixi)",
- alarm_info.start.year, alarm_info.start.month,
- alarm_info.start.day, alarm_info.start.hour,
- alarm_info.start.min, alarm_info.start.sec,
- alarm_info.end.year, alarm_info.end.month,
- alarm_info.end.day, alarm_info.mode.u_interval.day_of_week,
- alarm_info.mode.repeat, alarm_info.alarm_type,
- (gint64)alarm_info.reserved_info, ret));
+ base_info.start.year, base_info.start.month,
+ base_info.start.day, base_info.start.hour,
+ base_info.start.min, base_info.start.sec,
+ base_info.end.year, base_info.end.month,
+ base_info.end.day, base_info.mode.u_interval.day_of_week,
+ base_info.mode.repeat, base_info.alarm_type,
+ (gint64)base_info.reserved_info, ret));
} else if (g_strcmp0(method_name, "alarm_get_next_duetime") == 0) {
time_t duetime;
ret = alarm_manager_alarm_get_next_duetime(parameters, uid, &duetime);
@@ -715,12 +717,12 @@ static void handle_method_call(GDBusConnection *connection,
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_time") == 0) {
_display_lock_state(DEVICED_LCD_OFF, DEVICED_STAY_CUR_STATE, 0);
- ret = alarm_manager_alarm_set_time(parameters, pid);
+ ret = alarm_manager_alarm_set_time(parameters, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_time_with_propagation_delay") == 0) {
_display_lock_state(DEVICED_LCD_OFF, DEVICED_STAY_CUR_STATE, 0);
- ret = alarm_manager_alarm_set_time_with_propagation_delay(parameters, pid);
+ ret = alarm_manager_alarm_set_time_with_propagation_delay(parameters, pid, sender);
g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", ret));
_display_unlock_state(DEVICED_LCD_OFF, DEVICED_SLEEP_MARGIN);
} else if (g_strcmp0(method_name, "alarm_set_timezone") == 0) {
@@ -750,19 +752,6 @@ static void __on_bus_name_acquired(GDBusConnection *connection,
gpointer user_data)
{
LOGD("bus acquired(%s)", name);
-
- guint reg_id = 0;
- GError *error = NULL;
-
- reg_id = g_dbus_connection_register_object(connection,
- ALARM_MGR_DBUS_PATH,
- introspection_data->interfaces[0],
- &interface_vtable,
- NULL, NULL, &error);
- if (reg_id == 0) {
- LOGE("g_dbus_connection_register_object error(%s)", error->message);
- g_error_free(error);
- }
}
static void __on_bus_name_owner_changed(GDBusConnection *connection,
@@ -782,9 +771,11 @@ static void __on_bus_name_owner_changed(GDBusConnection *connection,
if (signal_name && strcmp(signal_name, "NameOwnerChanged") == 0) {
g_variant_get(parameters, "(&sss)", &service_name, NULL, NULL);
- for (entry = g_expired_alarm_list; entry; entry = entry->next) {
- if (entry->data) {
- expire_info = (__expired_alarm_t *) entry->data;
+ for (entry = g_expired_alarm_list; entry;) {
+ expire_info = (__expired_alarm_t *) entry->data;
+ entry = entry->next;
+
+ if (expire_info) {
SECURE_LOGD("expired service(%s), owner changed service(%s)",
expire_info->service_name, service_name);
@@ -797,7 +788,7 @@ static void __on_bus_name_owner_changed(GDBusConnection *connection,
0,
expire_info->uid);
g_expired_alarm_list =
- g_slist_remove(g_expired_alarm_list, entry->data);
+ g_slist_remove(g_expired_alarm_list, (gpointer)expire_info);
g_free(expire_info);
}
}
@@ -811,6 +802,8 @@ bool _initialize_dbus(void)
GError *error = NULL;
guint subsc_id;
guint owner_id;
+ guint reg_id;
+
LOGD("__initialize_dbus Enter");
connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
@@ -826,25 +819,41 @@ bool _initialize_dbus(void)
subsc_id = g_dbus_connection_signal_subscribe(connection,
"org.freedesktop.DBus", "org.freedesktop.DBus",
"NameOwnerChanged", "/org/freedesktop/DBus", NULL,
- G_DBUS_SIGNAL_FLAGS_NONE, __on_bus_name_owner_changed, NULL, NULL);
+ G_DBUS_SIGNAL_FLAGS_NONE, __on_bus_name_owner_changed,
+ NULL, NULL);
if (subsc_id == 0) {
LOGE("Subscribing to signal for invoking callback is failed.");
g_object_unref(connection);
return false;
}
- introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, &error);
+ introspection_data = g_dbus_node_info_new_for_xml(introspection_xml,
+ &error);
if (!introspection_data) {
- LOGE("g_dbus_node_info_new_for_xml error(%s)", error->message);
+ LOGE("g_dbus_node_info_new_for_xml error(%s)",
+ error ? error->message : "");
g_object_unref(connection);
- g_error_free(error);
+ g_clear_error(&error);
+ return false;
+ }
+
+ reg_id = g_dbus_connection_register_object(connection,
+ ALARM_MGR_DBUS_PATH,
+ introspection_data->interfaces[0],
+ &interface_vtable,
+ NULL, NULL, &error);
+ if (reg_id == 0) {
+ LOGE("g_dbus_connection_register_object error(%s)",
+ error ? error->message : "");
+ g_dbus_node_info_unref(introspection_data);
+ g_object_unref(connection);
+ g_clear_error(&error);
return false;
}
owner_id = g_bus_own_name_on_connection(connection,
ALARM_MGR_DBUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
__on_bus_name_acquired, NULL, NULL, NULL);
-
if (owner_id == 0) {
LOGE("Acquiring the own name is failed.");
g_dbus_node_info_unref(introspection_data);
diff --git a/server/alarm-manager-schedule.c b/server/alarm-manager-schedule.c
index 68b9180..ba1409f 100644
--- a/server/alarm-manager-schedule.c
+++ b/server/alarm-manager-schedule.c
@@ -98,14 +98,14 @@ static time_t __alarm_next_duetime_once(__alarm_info_t *__alarm_info)
struct tm tmp_tm;
int current_dst = 0;
- if ((__alarm_info->alarm_info.alarm_type & ALARM_TYPE_RELATIVE) && __alarm_info->start != 0) {
+ if ((__alarm_info->base_info.alarm_type & ALARM_TYPE_RELATIVE) && __alarm_info->start != 0) {
LOGE("Final due_time = %ld, %s",
__alarm_info->start, ctime(&__alarm_info->start));
return __alarm_info->start;
}
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_date_t *start = &alarm_info->start;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_date_t *start = &base_info->start;
tzset();
time(&current_time);
@@ -163,8 +163,8 @@ static time_t __alarm_next_duetime_repeat(__alarm_info_t *__alarm_info)
time_t current_time = 0;
struct tm duetime_tm;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_date_t *start = &alarm_info->start;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_date_t *start = &base_info->start;
time(&current_time);
@@ -177,26 +177,26 @@ static time_t __alarm_next_duetime_repeat(__alarm_info_t *__alarm_info)
duetime_tm.tm_mday = start->day;
duetime_tm.tm_isdst = -1;
- if (alarm_info->alarm_type & ALARM_TYPE_PERIOD &&
- alarm_info->mode.u_interval.interval > 0) {
+ if (base_info->alarm_type & ALARM_TYPE_PERIOD &&
+ base_info->mode.u_interval.interval > 0) {
/* For minimize 'while loop'
* Duetime should be "periodic_standard_time + (interval * x) >= current" */
time_t periodic_standard_time = _get_periodic_alarm_standard_time();
time_t temp;
- temp = (current_time - periodic_standard_time) / alarm_info->mode.u_interval.interval;
- due_time = periodic_standard_time + (temp * alarm_info->mode.u_interval.interval);
+ temp = (current_time - periodic_standard_time) / base_info->mode.u_interval.interval;
+ due_time = periodic_standard_time + (temp * base_info->mode.u_interval.interval);
} else {
due_time = mktime(&duetime_tm);
}
while (__alarm_info->start > due_time || current_time > due_time || ((!is_time_changed) && (current_time == due_time))) {
- if (due_time + alarm_info->mode.u_interval.interval < due_time) {
+ if (due_time + base_info->mode.u_interval.interval < due_time) {
LOGD("time_t OVERFLOW!! duetime = %ld", due_time);
due_time = -1;
break;
}
- due_time += alarm_info->mode.u_interval.interval;
+ due_time += base_info->mode.u_interval.interval;
}
localtime_r(&due_time, &duetime_tm);
@@ -217,8 +217,8 @@ static time_t __alarm_next_duetime_annually(__alarm_info_t *__alarm_info)
time_t current_time = 0;
struct tm duetime_tm;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_date_t *start = &alarm_info->start;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_date_t *start = &base_info->start;
time(&current_time);
localtime_r(&current_time, &duetime_tm);
@@ -252,8 +252,8 @@ static time_t __alarm_next_duetime_monthly(__alarm_info_t *__alarm_info)
time_t current_time = 0;
struct tm duetime_tm;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_date_t *start = &alarm_info->start;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_date_t *start = &base_info->start;
time(&current_time);
localtime_r(&current_time, &duetime_tm);
@@ -298,9 +298,9 @@ static time_t __alarm_next_duetime_weekly(__alarm_info_t *__alarm_info)
struct tm before_tm;
struct tm after_tm;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_date_t *start = &alarm_info->start;
- alarm_mode_t *mode = &alarm_info->mode;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_date_t *start = &base_info->start;
+ alarm_mode_t *mode = &base_info->mode;
tzset();
time(&current_time);
@@ -402,10 +402,11 @@ void _alarm_set_next_duetime(__alarm_info_t *__alarm_info)
struct tm tm, *cur_tm = NULL;
struct tm *due_tm = NULL;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
- alarm_mode_t *mode = &alarm_info->mode;
+ base_info_t *base_info = &__alarm_info->base_info;
+ alarm_mode_t *mode = &base_info->mode;
time(&current_time);
+ tzset();
cur_tm = localtime_r(&current_time, &tm);
if (cur_tm && cur_tm->tm_isdst > 0)
is_dst = 1;
@@ -429,6 +430,11 @@ void _alarm_set_next_duetime(__alarm_info_t *__alarm_info)
return;
}
+ if (due_time < 0) {
+ LOGE("due_time(%ld) is wrong(id : %d)", due_time, __alarm_info->alarm_id);
+ return;
+ }
+
if (mode->repeat != ALARM_REPEAT_MODE_WEEKLY && mode->repeat != ALARM_REPEAT_MODE_ONCE) {
due_tm = localtime_r(&due_time, &tm);
if (is_dst == 0 && due_tm && due_tm->tm_isdst == 1) {
@@ -463,13 +469,12 @@ static bool __find_next_alarm_to_be_scheduled(time_t *min_due_time)
time(&current_time);
- for (iter = alarm_context.alarms; iter != NULL;
- iter = g_slist_next(iter)) {
+ for (iter = alarm_context.alarms; iter != NULL;) {
entry = (__alarm_info_t *)iter->data;
due_time = entry->due_time;
-
double interval = 0;
+ iter = g_slist_next(iter);
SECURE_LOGD("alarm[%d] with duetime(%ld) at current(%ld) - (%s) z:%d",
entry->alarm_id, due_time, current_time,
entry->app_unique_name, (int)entry->zombie_mode);
@@ -490,12 +495,12 @@ static bool __find_next_alarm_to_be_scheduled(time_t *min_due_time)
LOGW("The alarm(%d) is removed [unique_name : %s, dst : %s",
entry->alarm_id, entry->app_unique_name, dst);
- if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE))
+ if (!(entry->base_info.alarm_type & ALARM_TYPE_VOLATILE))
_delete_alarms(entry->alarm_id);
_save_alarm_info_log("AUTO_DELETE", entry);
- alarm_context.alarms = g_slist_remove(alarm_context.alarms, iter->data);
+ alarm_context.alarms = g_slist_remove(alarm_context.alarms, (gpointer)entry);
_release_alarm_info_t(entry);
continue;
} else {
diff --git a/server/alarm-manager-timer.c b/server/alarm-manager-timer.c
index e0e876d..ff6a304 100644
--- a/server/alarm-manager-timer.c
+++ b/server/alarm-manager-timer.c
@@ -128,7 +128,7 @@ static gboolean __timer_glib_prepare(GSource *src, gint *timeout)
return FALSE;
}
-GSourceFuncs funcs = {
+static GSourceFuncs funcs = {
.prepare = __timer_glib_prepare,
.check = __timer_glib_check,
.dispatch = __timer_glib_dispatch,
@@ -202,7 +202,7 @@ void _alarm_set_timer(int timer, time_t due_time)
/*set timer as absolute time */
/*we create dummy timer when the interval is longer than one day. */
/*the timer will be expired in half day. */
-
+ tzset();
localtime_r(&due_time, &ts_ret);
if (interval > 60 * 60 * 24) {
diff --git a/server/alarm-manager-util.c b/server/alarm-manager-util.c
index 1486adb..6d283d5 100644
--- a/server/alarm-manager-util.c
+++ b/server/alarm-manager-util.c
@@ -16,7 +16,6 @@
#define _GNU_SOURCE
#include <fcntl.h>
-#include <system_info.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -43,8 +42,8 @@ static int __bg_category_func(const char *name, void *user_data)
{
bg_category_cb_info_t *info = (bg_category_cb_info_t *)user_data;
LOGD("appid[%s], bg name = %s", info->appid, name);
- if (name && strncmp("enable", name, strlen(name)) &&
- strncmp("disable", name, strlen(name))) {
+ if (name && strcmp("enable", name) &&
+ strcmp("disable", name)) {
info->has_bg = true;
return -1;
}
@@ -52,52 +51,11 @@ static int __bg_category_func(const char *name, void *user_data)
return 0;
}
-profile_t _get_profile()
-{
- static profile_t saved = PROFILE_UNKNOWN;
- char *profileName;
- int r;
-
- if (__builtin_expect(saved != PROFILE_UNKNOWN, 1))
- return saved;
-
- r = system_info_get_platform_string("http://tizen.org/feature/profile",
- &profileName);
- if (r != SYSTEM_INFO_ERROR_NONE) {
- LOGD("Failed to get profile info. error(%d)", r);
- return saved;
- }
-
- switch (*profileName) {
- case 'm':
- case 'M':
- saved = PROFILE_MOBILE;
- break;
- case 'w':
- case 'W':
- saved = PROFILE_WEARABLE;
- break;
- case 't':
- case 'T':
- saved = PROFILE_TV;
- break;
- case 'i':
- case 'I':
- saved = PROFILE_IVI;
- break;
- default: // common or unknown ==> ALL ARE COMMON.
- saved = PROFILE_COMMON;
- }
- free(profileName);
-
- return saved;
-}
-
int _pkg_is_global(const char *callee_pkgid, uid_t uid)
{
int retval;
int return_code = ERR_ALARM_SYSTEM_FAIL;
- pkgmgrinfo_pkginfo_h handle;
+ pkgmgrinfo_pkginfo_h handle = NULL;
retval = pkgmgrinfo_pkginfo_get_usr_pkginfo(callee_pkgid, uid, &handle);
if (retval != PMINFO_R_OK) {
@@ -241,9 +199,9 @@ int _get_pid_from_appid(const char *app_id, uid_t uid)
char *_get_pkgid_by_appid(const char *app_id, uid_t uid)
{
- pkgmgrinfo_pkginfo_h handle;
+ pkgmgrinfo_pkginfo_h handle = NULL;
char *pkgid = NULL;
- char *temp;
+ char *temp = NULL;
if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &handle) == PMINFO_R_OK) {
if (pkgmgrinfo_appinfo_get_pkgid(handle, &temp) == PMINFO_R_OK) {
@@ -271,7 +229,7 @@ int _is_ui_app(const char *appid, uid_t uid)
return 0;
ret = pkgmgrinfo_appinfo_get_component_type(appinfo_h, &component);
- if (ret == 0 && component != NULL && strncmp(component, "uiapp", 5) == 0)
+ if (ret == 0 && component != NULL && strcmp(component, "uiapp") == 0)
found = 1;
if (appinfo_h)
@@ -300,7 +258,7 @@ int _compare_api_version(int *result, int pid, uid_t uid)
int ret = 0;
pkgmgrinfo_pkginfo_h pkginfo = NULL;
char pkgid[MAX_PKG_ID_LEN] = {0, };
- char *pkg_version;
+ char *pkg_version = NULL;
if (aul_app_get_pkgid_bypid_for_uid(pid, pkgid, sizeof(pkgid), uid) != AUL_R_OK) {
LOGE("aul_app_get_pkgid_bypid() is failed. PID %d may not be app.", getpid());
@@ -330,7 +288,7 @@ bool _permit_by_config(pkgmgrinfo_appinfo_h handle, uid_t uid)
if (access(tzplatform_mkpath(TZ_SYS_RO_SHARE,
"alarm-manager/alarm-config-platform-service-permitted"), F_OK) == 0) {
LOGD("This profile permit alarm for service applications which has platform cert\n");
- char *pkgid;
+ char *pkgid = NULL;
int r;
const char *cert_value;
pkgmgrinfo_certinfo_h certinfo;
@@ -389,8 +347,8 @@ bool _permit_by_config(pkgmgrinfo_appinfo_h handle, uid_t uid)
LOGE("certsvc_certificate_get_visibility() is failed.");
pkgmgrinfo_pkginfo_destroy_certinfo(certinfo);
- certsvc_instance_free(instance);
certsvc_certificate_free(certificate);
+ certsvc_instance_free(instance);
LOGW("visibility is %d", visibility);
if (visibility & CERTSVC_VISIBILITY_PLATFORM) {
@@ -558,8 +516,8 @@ void _save_alarm_info_log(const char *tag, __alarm_info_t *info)
"interval:%ld, duetime: %ld %s",
info->alarm_id, info->uid, info->app_unique_name, info->callee_pkgid,
info->dst_service_name, info->dst_service_name_mod,
- info->alarm_info.alarm_type, info->alarm_info.mode.repeat,
- info->alarm_info.mode.u_interval.interval, info->due_time, due_time_str);
+ info->base_info.alarm_type, info->base_info.mode.repeat,
+ info->base_info.mode.u_interval.interval, info->due_time, due_time_str);
_save_module_log(tag, log_message);
#endif /* _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG */
diff --git a/server/alarm-manager-util.h b/server/alarm-manager-util.h
index b37019d..0e010ed 100644
--- a/server/alarm-manager-util.h
+++ b/server/alarm-manager-util.h
@@ -30,7 +30,6 @@ extern "C" {
#define ALARMMGR_LOG_TAG_SIZE 20
#define ALARMMGR_LOG_MESSAGE_SIZE 330
-profile_t _get_profile();
int _cynara_check(GDBusMethodInvocation *invocation, const char* privilege,
pid_t pid);
char* _get_pkgid_by_appid(const char* app_id, uid_t uid);
diff --git a/server/alarm-manager.c b/server/alarm-manager.c
index ddc5db3..41977c7 100644
--- a/server/alarm-manager.c
+++ b/server/alarm-manager.c
@@ -48,20 +48,15 @@
#include "alarm-manager-util.h"
#include "alarm-manager-dbus.h"
-#if !GLIB_CHECK_VERSION(2, 31, 0)
-#include <glib/gmacros.h>
-#endif
-
/* link path for timezone info */
-#define TIMEZONE_INFO_LINK_PATH tzplatform_mkpath(TZ_SYS_ETC, "localtime")
+#define TIMEZONE_INFO_LINK_DIR_PATH tzplatform_getenv(TZ_SYS_ETC)
+#define TIMEZONE_INFO_LINK_FILE_NAME "localtime"
#ifndef RTC_WKALM_BOOT_SET
#define RTC_WKALM_BOOT_SET _IOW('p', 0x80, struct rtc_wkalrm)
#endif
-#define _APPFW_FEATURE_WAKEUP_USING_RTC (_get_profile() != PROFILE_TV)
-
-#define PATH_LIB_ALARMMGR_PLUGIN "/usr/lib/libalarm-server-plugin.so"
+#define PATH_LIB_ALARMMGR_PLUGIN PLUGIN_LIB_DIR"/libalarm-server-plugin.so"
static void *plugin_handle;
static int (*RTC_INIT)(void);
@@ -82,10 +77,12 @@ extern bool g_dummy_timer_is_set;
GSList *g_scheduled_alarm_list;
GSList *g_expired_alarm_list;
GSList *g_disabled_alarm_list;
-GHashTable *caller_appid_cache_table;
+static GHashTable *caller_appid_cache_table;
bool is_time_changed = false; /* for calculating next duetime */
static time_t periodic_alarm_standard_time = 0;
+static bool using_rtc = false;
+static bool is_rtc_reset = false;
struct running_info_t {
pid_t pid;
@@ -96,30 +93,32 @@ struct running_info_t {
typedef struct {
int pid;
bool is_app;
+ char *sender;
char *unique_name;
} appid_cache_t;
-static long __get_proper_interval(long interval, int alarm_type);
+static time_t __get_proper_interval(time_t interval);
static void __alarm_add_to_list(__alarm_info_t *__alarm_info);
static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *alarm_id);
static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code);
+ base_info_t *base_info, int update_flag, int *error_code);
static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
- int *error_code);
-static void __alarm_set_start_and_end_time(alarm_info_t *alarm_info,
- __alarm_info_t *__alarm_info);
-static void __alarm_update_due_time_of_all_items_in_list(time_t new_time,double diff_time);
-static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t uid,
- int pid, periodic_method_e method, long requested_interval, int is_ref,
- char *app_service_name, char *app_service_name_mod,
- const char *dst_service_name, const char *dst_service_name_mod,
- int *error_code);
-static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
- long requested_interval, uid_t uid, int pid, char *bundle_data, int *error_code);
+ int *error_code);
+static void __alarm_set_start_and_end_time(base_info_t *base_info,
+ __alarm_info_t *__alarm_info);
+static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double diff_time);
+static bool __alarm_create(base_info_t *base_info, alarm_id_t *alarm_id, uid_t uid,
+ int pid, const gchar *sender, periodic_method_e method,
+ long requested_interval, int is_ref, char *app_service_name,
+ char *app_service_name_mod, const char *dst_service_name,
+ const char *dst_service_name_mod, int *error_code);
+static bool __alarm_create_appsvc(base_info_t *base_info, alarm_id_t *alarm_id,
+ long requested_interval, uid_t uid, int pid, const gchar *sender,
+ char *bundle_data, int *error_code);
static bool __alarm_delete(uid_t uid, alarm_id_t alarm_id, int *error_code);
static bool __alarm_update(uid_t uid, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code);
+ base_info_t *base_info, int update_flag, int *error_code);
static void __on_system_time_external_changed(keynode_t *node, void *data);
static void __initialize_alarm_list();
static void __initialize_scheduled_alarm_list();
@@ -127,7 +126,8 @@ static void __initialize_noti();
static gboolean __alarm_expired_directly(gpointer user_data);
void _release_alarm_info_t(__alarm_info_t *entry);
-static notification_h __get_notification(guchar *data, int datalen);
+static notification_h __get_notification(guchar *data, gsize datalen);
+static void __free_cached_value(gpointer data);
static bool __get_caller_unique_name(int pid, char *unique_name, int size, bool *is_app, uid_t uid)
{
@@ -143,7 +143,7 @@ static bool __get_caller_unique_name(int pid, char *unique_name, int size, bool
/* When a caller is an application, the unique name is appID. */
if (is_app)
*is_app = true;
- strncpy(unique_name, caller_appid, size - 1);
+ snprintf(unique_name, size, "%s", caller_appid);
} else {
/* Otherwise, the unique name is /proc/pid/cmdline. */
char *cmdline;
@@ -155,7 +155,7 @@ static bool __get_caller_unique_name(int pid, char *unique_name, int size, bool
if (!cmdline)
return false;
else
- strncpy(unique_name, cmdline, size - 1);
+ snprintf(unique_name, size, "%s", cmdline);
free(cmdline);
}
@@ -175,13 +175,14 @@ gboolean __hash_table_remove_cb(gpointer key, gpointer value, gpointer user_data
return false;
}
-static bool __get_cached_unique_name(int pid, char *unique_name, int size, bool *is_app, uid_t uid)
+static bool __get_cached_unique_name(int pid, const gchar *sender,
+ char *unique_name, int size, bool *is_app, uid_t uid)
{
appid_cache_t *data;
bool ret = false;
bool _is_app;
- data = (appid_cache_t *)g_hash_table_lookup(caller_appid_cache_table, GINT_TO_POINTER(pid));
+ data = (appid_cache_t *)g_hash_table_lookup(caller_appid_cache_table, (gpointer)sender);
if (data) {
snprintf(unique_name, size, "%s", data->unique_name);
if (is_app)
@@ -198,9 +199,19 @@ static bool __get_cached_unique_name(int pid, char *unique_name, int size, bool
data = (appid_cache_t *)calloc(1, sizeof(appid_cache_t));
if (data) {
data->unique_name = strdup(unique_name);
+ data->sender = strdup(sender);
data->is_app = _is_app;
data->pid = pid;
- g_hash_table_insert(caller_appid_cache_table, GINT_TO_POINTER(data->pid), (gpointer)data);
+
+ if (data->unique_name && data->sender) {
+ if (g_hash_table_size(caller_appid_cache_table) > MAX_APPID_CACHE_SIZE)
+ g_hash_table_remove_all(caller_appid_cache_table);
+
+ g_hash_table_insert(caller_appid_cache_table, (gpointer)data->sender, (gpointer)data);
+ } else {
+ LOGE("Out of memory");
+ __free_cached_value(data);
+ }
}
if (is_app)
@@ -219,20 +230,22 @@ void __hashtable_foreach_cb(gpointer key, gpointer value, gpointer user_data)
LOGD("# %s(%d) - %d", data->unique_name, data->pid, data->is_app);
}
-void __free_cached_value(gpointer data)
+static void __free_cached_value(gpointer data)
{
appid_cache_t *value = (appid_cache_t *)data;
if (value) {
if (value->unique_name)
free(value->unique_name);
+ if (value->sender)
+ free(value->sender);
free(value);
}
}
void _rtc_set()
{
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
+ if (using_rtc) {
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
#ifdef _SIMUL /* RTC does not work in simulator. */
LOGE("because it is simulator's mode, we don't set RTC.");
@@ -296,7 +309,10 @@ static bool __set_time(time_t _time)
return false;
}
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
+ if (!_set_latest_settime(_time))
+ LOGE("DB is failed.");
+
+ if (using_rtc) {
char buf[1024];
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
@@ -372,7 +388,7 @@ static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *
static void __alarm_add_to_list(__alarm_info_t *__alarm_info)
{
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
+ base_info_t *base_info = &__alarm_info->base_info;
__alarm_info_t *entry = NULL;
GSList *iter = NULL;
@@ -387,12 +403,13 @@ static void __alarm_add_to_list(__alarm_info_t *__alarm_info)
LOGD("[alarm-server]: alarm_id(%d).", entry->alarm_id);
}
- if (!(alarm_info->alarm_type & ALARM_TYPE_VOLATILE)) {
+ if (!(base_info->alarm_type & ALARM_TYPE_VOLATILE)) {
if (!_save_alarms(__alarm_info))
LOGE("Saving alarm_id(%d) in DB is failed.", __alarm_info->alarm_id);
}
- DO_AFTER_ALARM_CREATE(__alarm_info->pid, __alarm_info->app_unique_name);
+ if (using_rtc)
+ DO_AFTER_ALARM_CREATE(__alarm_info->pid, __alarm_info->app_unique_name);
}
static bool __check_bundle_for_update(const gchar *b_data, uid_t uid)
@@ -422,12 +439,12 @@ static bool __check_bundle_for_update(const gchar *b_data, uid_t uid)
}
static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code)
+ base_info_t *base_info, int update_flag, int *error_code)
{
bool found = false;
GSList *iter = NULL;
__alarm_info_t *entry = NULL;
- alarm_info_t *_alarm_info = NULL;
+ base_info_t *found_base_info = NULL;
time_t current_time;
for (iter = alarm_context.alarms; iter != NULL;
@@ -436,10 +453,10 @@ static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id,
if (entry->uid == uid &&
entry->alarm_id == alarm_id) {
found = true;
- _alarm_info = &entry->alarm_info;
+ found_base_info = &entry->base_info;
- if (update_flag == ALARM_UPDATE_FLAG_TIME ||
- ALARM_UPDATE_FLAG_WEEK) {
+ if ((update_flag == ALARM_UPDATE_FLAG_TIME) ||
+ (update_flag == ALARM_UPDATE_FLAG_WEEK)) {
if (!__check_bundle_for_update(entry->bundle,
entry->uid)) {
*error_code = ERR_ALARM_NOT_PERMITTED_APP;
@@ -448,32 +465,31 @@ static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id,
}
if (update_flag == ALARM_UPDATE_FLAG_TIME) {
- __alarm_set_start_and_end_time(alarm_info, entry);
- memcpy(_alarm_info, alarm_info, sizeof(alarm_info_t));
+ __alarm_set_start_and_end_time(base_info, entry);
+ memcpy(found_base_info, base_info, sizeof(base_info_t));
- if (_alarm_info->mode.repeat == ALARM_REPEAT_MODE_ONCE) {
+ if (found_base_info->mode.repeat == ALARM_REPEAT_MODE_ONCE) {
time(&current_time);
- _alarm_info->reserved_info = current_time;
+ found_base_info->reserved_info = current_time;
}
} else if (update_flag == ALARM_UPDATE_FLAG_PERIOD) {
- _alarm_info->alarm_type |= ALARM_TYPE_INEXACT;
- _alarm_info->alarm_type |= ALARM_TYPE_PERIOD;
- _alarm_info->mode.repeat = ALARM_REPEAT_MODE_REPEAT;
- _alarm_info->mode.u_interval.interval =
- __get_proper_interval(alarm_info->mode.u_interval.interval,
- _alarm_info->alarm_type);
+ found_base_info->alarm_type |= ALARM_TYPE_INEXACT;
+ found_base_info->alarm_type |= ALARM_TYPE_PERIOD;
+ found_base_info->mode.repeat = ALARM_REPEAT_MODE_REPEAT;
+ found_base_info->mode.u_interval.interval =
+ __get_proper_interval(base_info->mode.u_interval.interval);
} else if (update_flag == ALARM_UPDATE_FLAG_WEEK) {
- _alarm_info->alarm_type &= ~ALARM_TYPE_INEXACT;
- _alarm_info->mode = alarm_info->mode;
+ found_base_info->alarm_type &= ~ALARM_TYPE_INEXACT;
+ found_base_info->mode = base_info->mode;
} else if (update_flag == ALARM_UPDATE_FLAG_CLEAR_PERIOD) {
- if (_alarm_info->mode.repeat == ALARM_REPEAT_MODE_REPEAT) {
- _alarm_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
- _alarm_info->mode.u_interval.interval = 0;
+ if (found_base_info->mode.repeat == ALARM_REPEAT_MODE_REPEAT) {
+ found_base_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ found_base_info->mode.u_interval.interval = 0;
}
} else if (update_flag == ALARM_UPDATE_FLAG_CLEAR_WEEK_FLAG) {
- if (_alarm_info->mode.repeat == ALARM_REPEAT_MODE_WEEKLY) {
- _alarm_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
- _alarm_info->mode.u_interval.interval = 0;
+ if (found_base_info->mode.repeat == ALARM_REPEAT_MODE_WEEKLY) {
+ found_base_info->mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ found_base_info->mode.u_interval.interval = 0;
}
}
break;
@@ -486,7 +502,7 @@ static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id,
return NULL;
}
- if (!(alarm_info->alarm_type & ALARM_TYPE_VOLATILE)) {
+ if (!(base_info->alarm_type & ALARM_TYPE_VOLATILE)) {
if (!_update_alarms(entry))
LOGE("Updating alarm_id(%d) in DB is failed.", alarm_id);
}
@@ -499,7 +515,7 @@ static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
{
bool found = false;
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
GSList *iter = NULL;
__alarm_info_t *entry = NULL;
@@ -510,11 +526,11 @@ static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
for (iter = alarm_context.alarms; iter != NULL; iter = g_slist_next(iter)) {
entry = (__alarm_info_t *)iter->data;
if (entry->uid == uid && entry->alarm_id == alarm_id) {
- alarm_info = &entry->alarm_info;
+ base_info = &entry->base_info;
LOGD("[alarm-server]:Remove alarm id(%d)", entry->alarm_id);
- if (!(alarm_info->alarm_type & ALARM_TYPE_VOLATILE)) {
+ if (!(base_info->alarm_type & ALARM_TYPE_VOLATILE)) {
if (!_delete_alarms(alarm_id))
break;
}
@@ -537,17 +553,17 @@ static bool __alarm_remove_from_list(uid_t uid, alarm_id_t alarm_id,
return true;
}
-static void __alarm_set_start_and_end_time(alarm_info_t *alarm_info,
+static void __alarm_set_start_and_end_time(base_info_t *base_info,
__alarm_info_t *__alarm_info)
{
- alarm_date_t *start = &alarm_info->start;
- alarm_date_t *end = &alarm_info->end;
+ alarm_date_t *start = &base_info->start;
+ alarm_date_t *end = &base_info->end;
struct tm alarm_tm = { 0, };
if (start->year != 0) {
- if ((alarm_info->alarm_type & ALARM_TYPE_RELATIVE) && alarm_info->reserved_info != 0) {
- __alarm_info->start = alarm_info->reserved_info;
+ if ((base_info->alarm_type & ALARM_TYPE_RELATIVE) && base_info->reserved_info != 0) {
+ __alarm_info->start = base_info->reserved_info;
} else {
alarm_tm.tm_year = start->year - 1900;
alarm_tm.tm_mon = start->month - 1;
@@ -588,47 +604,57 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double
__alarm_info_t *entry = NULL;
struct tm *p_time = NULL;
struct tm due_time_result;
- bool is_rtc_reset = false;
is_time_changed = true;
if (periodic_alarm_standard_time != 0)
- periodic_alarm_standard_time += diff_time;
+ periodic_alarm_standard_time += (time_t)diff_time;
tzset();
for (iter = alarm_context.alarms; iter != NULL; iter = g_slist_next(iter)) {
entry = (__alarm_info_t *)iter->data;
- alarm_info_t *alarm_info = &(entry->alarm_info);
- if (alarm_info->alarm_type & ALARM_TYPE_RELATIVE) {
+ base_info_t *base_info = &(entry->base_info);
+ if (base_info->alarm_type & ALARM_TYPE_RELATIVE) {
/* case of RTC reset */
- if (entry->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) {
- if ((entry->due_time + diff_time - new_time) >
- (entry->due_time - entry->alarm_info.reserved_info)) {
+ if (entry->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) {
+ if (is_rtc_reset) {
LOGE("[ RTC reset]: new time %s %ld, diff %f, id %d duetime %s %ld %ld",
ctime(&new_time), new_time, diff_time, entry->alarm_id,
ctime(&entry->due_time), entry->due_time,
- entry->alarm_info.reserved_info);
+ entry->base_info.reserved_info);
continue;
}
- entry->due_time += diff_time;
- entry->alarm_info.reserved_info = new_time;
+ if (entry->due_time + (time_t)diff_time < (time_t)diff_time) {
+ LOGE("time_t OVERFLOW!! %ld %f id %d",
+ entry->due_time, diff_time, entry->alarm_id);
+ continue;
+ }
+ entry->due_time += (time_t)diff_time;
+ entry->base_info.reserved_info = new_time;
} else {
- entry->due_time += diff_time;
- is_rtc_reset = false;
- if ((entry->due_time - new_time) > alarm_info->mode.u_interval.interval) {
- is_rtc_reset = true;
+ if (is_rtc_reset) {
+ if (entry->due_time > new_time)
+ continue;
+
entry->due_time = new_time +
- ((entry->due_time - new_time) % alarm_info->mode.u_interval.interval);
+ (new_time % base_info->mode.u_interval.interval);
LOGE("[ RTC reset]: new time %s %ld, diff %f, id %d duetime %s %ld %ld",
ctime(&new_time), new_time, diff_time, entry->alarm_id,
ctime(&entry->due_time), entry->due_time,
- alarm_info->mode.u_interval.interval);
+ base_info->mode.u_interval.interval);
+ } else {
+ if (entry->due_time + (time_t)diff_time < (time_t)diff_time) {
+ LOGE("time_t OVERFLOW!! %ld %f id %d",
+ entry->due_time, diff_time, entry->alarm_id);
+ continue;
+ }
+ entry->due_time += (time_t)diff_time;
}
}
- alarm_date_t *start = &alarm_info->start; /**< start time of the alarm */
- alarm_date_t *end = &alarm_info->end; /**< end time of the alarm */
+ alarm_date_t *start = &base_info->start; /**< start time of the alarm */
+ alarm_date_t *end = &base_info->end; /**< end time of the alarm */
p_time = localtime_r(&entry->due_time, &due_time_result);
if (p_time != NULL) {
@@ -643,7 +669,7 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double
entry->start = entry->due_time;
if (entry->end != 0 && is_rtc_reset == false) {
- entry->end += diff_time;
+ entry->end += (time_t)diff_time;
p_time = localtime_r(&entry->end, &due_time_result);
if (p_time != NULL) {
end->year = p_time->tm_year + 1900;
@@ -658,14 +684,20 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double
_alarm_set_next_duetime(entry);
}
+ if (is_rtc_reset) {
+ is_rtc_reset = false;
+ LOGW("RTC RESET -> RTC Normal");
+ _save_module_log("[RTC NORMAL]", "RTC RESET -> NORMAL");
+ }
+
time(&current_time);
- for (iter = alarm_context.alarms; iter != NULL; iter = g_slist_next(iter)) {
+ for (iter = alarm_context.alarms; iter != NULL;) {
entry = (__alarm_info_t *)iter->data;
due_time = entry->due_time;
double interval = 0;
-
+ iter = g_slist_next(iter);
LOGD("alarm[%d] with duetime(%ld) at current(%ld)", entry->alarm_id, due_time, current_time);
if (due_time == 0) { /* 0 means this alarm has been disabled */
continue;
@@ -682,12 +714,12 @@ static void __alarm_update_due_time_of_all_items_in_list(time_t new_time, double
LOGW("The alarm(%d) is removed [unique_name : %s, dst : %s",
entry->alarm_id, entry->app_unique_name, dst);
- if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE))
+ if (!(entry->base_info.alarm_type & ALARM_TYPE_VOLATILE))
_delete_alarms(entry->alarm_id);
_save_alarm_info_log("AUTO_DELETE", entry);
- alarm_context.alarms = g_slist_remove(alarm_context.alarms, iter->data);
+ alarm_context.alarms = g_slist_remove(alarm_context.alarms, (gpointer)entry);
_release_alarm_info_t(entry);
continue;
} else {
@@ -741,8 +773,8 @@ static bool __alarm_add_and_set(__alarm_info_t *alarm_info, pid_t pid)
alarm_info->dst_service_name,
alarm_context.c_due_time);
- if (alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
- alarm_info->alarm_info.reserved_info = current_time;
+ if (alarm_info->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
+ alarm_info->base_info.reserved_info = current_time;
if (alarm_context.c_due_time < current_time) {
LOGW("Caution!! alarm_context.c_due_time (%ld) is less than current time(%ld)",
@@ -754,16 +786,16 @@ static bool __alarm_add_and_set(__alarm_info_t *alarm_info, pid_t pid)
if (alarm_info->due_time == 0) {
LOGW("[alarm-server]:Create a new alarm: due_time is 0. [alarm(%d):repeat_type(%d)]",
- alarm_info->alarm_id, alarm_info->alarm_info.mode.repeat);
+ alarm_info->alarm_id, alarm_info->base_info.mode.repeat);
- if (alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
+ if (alarm_info->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
return false;
__alarm_add_to_list(alarm_info);
return true;
} else if (current_time == alarm_info->due_time) {
LOGW("[alarm-server]:Create alarm: current_time(%ld) is same as due_time(%ld) [alarm(%d):repeat_type(%d)]",
- current_time, alarm_info->due_time, alarm_info->alarm_id, alarm_info->alarm_info.mode.repeat);
+ current_time, alarm_info->due_time, alarm_info->alarm_id, alarm_info->base_info.mode.repeat);
__alarm_add_to_list(alarm_info);
_clear_scheduled_alarm_list();
@@ -785,14 +817,15 @@ static bool __alarm_add_and_set(__alarm_info_t *alarm_info, pid_t pid)
LOGW("[alarm-server]: Expired Due Time. \
[Due time=%ld, Current Time=%ld]!!!Do not add to schedule list. \
[alarm(%d):repeat_type(%d)]",
- alarm_info->due_time, current_time, alarm_info->alarm_id, alarm_info->alarm_info.mode.repeat);
+ alarm_info->due_time, current_time, alarm_info->alarm_id, alarm_info->base_info.mode.repeat);
- if (alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
+ if (alarm_info->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
return false;
__alarm_add_to_list(alarm_info);
return true;
} else {
+ tzset();
localtime_r(&(alarm_info->due_time), &ts_ret);
strftime(due_time_r, 30, "%c", &ts_ret);
SECURE_LOGD("[alarm-server]:Create a new alarm: alarm(%d) due_time(%s)",
@@ -817,8 +850,9 @@ static bool __alarm_add_and_set(__alarm_info_t *alarm_info, pid_t pid)
return true;
}
-static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
- long requested_interval, uid_t uid, int pid, char *bundle_data, int *error_code)
+static bool __alarm_create_appsvc(base_info_t *base_info, alarm_id_t *alarm_id,
+ long requested_interval, uid_t uid, int pid, const gchar *sender,
+ char *bundle_data, int *error_code)
{
char app_name[MAX_APP_ID_LEN] = { 0 };
bundle *b;
@@ -841,8 +875,10 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
__alarm_info->alarm_id = -1;
__alarm_info->requested_interval = requested_interval;
__alarm_info->global = false;
+ __alarm_info->method = CUT_OFF;
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) {
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name),
+ &caller_is_app, uid) == false) {
*error_code = ERR_ALARM_SYSTEM_FAIL;
_release_alarm_info_t(__alarm_info);
return false;
@@ -877,8 +913,8 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
b_data = NULL;
}
- __alarm_set_start_and_end_time(alarm_info, __alarm_info);
- memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t));
+ __alarm_set_start_and_end_time(base_info, __alarm_info);
+ memcpy(&(__alarm_info->base_info), base_info, sizeof(base_info_t));
__alarm_generate_alarm_id(__alarm_info, alarm_id);
if (__alarm_add_and_set(__alarm_info, pid) == false) {
@@ -892,11 +928,11 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
return true;
}
-static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t uid,
- int pid, periodic_method_e method, long requested_interval, int is_ref,
- char *app_service_name, char *app_service_name_mod,
- const char *dst_service_name, const char *dst_service_name_mod,
- int *error_code)
+static bool __alarm_create(base_info_t *base_info, alarm_id_t *alarm_id,
+ uid_t uid, int pid, const gchar *sender, periodic_method_e method,
+ long requested_interval, int is_ref, char *app_service_name,
+ char *app_service_name_mod, const char *dst_service_name,
+ const char *dst_service_name_mod, int *error_code)
{
char unique_name[MAX_APP_ID_LEN] = { 0 };
bool caller_is_app = false;
@@ -918,7 +954,7 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t
__alarm_info->is_ref = is_ref;
__alarm_info->global = false;
- if (__get_cached_unique_name(pid, unique_name, sizeof(unique_name),
+ if (__get_cached_unique_name(pid, sender, unique_name, sizeof(unique_name),
&caller_is_app, uid) == false) {
*error_code = ERR_ALARM_SYSTEM_FAIL;
_release_alarm_info_t(__alarm_info);
@@ -941,8 +977,8 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t
if (dst_service_name_mod)
__alarm_info->dst_service_name_mod = strdup(dst_service_name_mod);
- __alarm_set_start_and_end_time(alarm_info, __alarm_info);
- memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t));
+ __alarm_set_start_and_end_time(base_info, __alarm_info);
+ memcpy(&(__alarm_info->base_info), base_info, sizeof(base_info_t));
__alarm_generate_alarm_id(__alarm_info, alarm_id);
if (__alarm_add_and_set(__alarm_info, pid) == false) {
@@ -960,13 +996,13 @@ static char *__create_new_noti_data(char *noti_data, pid_t pid, uid_t uid)
{
GVariant *noti_gv;
guchar *decoded_data;
- int decoded_datalen;
+ gsize decoded_datalen;
notification_h noti = NULL;
char *new_noti_data = NULL;
guchar* data = NULL;
int datalen;
- decoded_data = g_base64_decode(noti_data, (gsize *)&decoded_datalen);
+ decoded_data = g_base64_decode(noti_data, &decoded_datalen);
if (decoded_data == NULL)
return NULL;
@@ -1002,8 +1038,9 @@ end:
return new_noti_data;
}
-static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
- long requested_interval, uid_t uid, int pid, char *noti_data, int *error_code)
+static bool __alarm_create_noti(base_info_t *base_info, alarm_id_t *alarm_id,
+ long requested_interval, uid_t uid, int pid, const gchar *sender,
+ char *noti_data, int *error_code)
{
char app_name[MAX_APP_ID_LEN] = { 0 };
bool caller_is_app = false;
@@ -1023,17 +1060,18 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
__alarm_info->alarm_id = -1;
__alarm_info->requested_interval = requested_interval;
__alarm_info->global = false;
+ __alarm_info->method = CUT_OFF;
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) {
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name),
+ &caller_is_app, uid) == false) {
*error_code = ERR_ALARM_SYSTEM_FAIL;
_release_alarm_info_t(__alarm_info);
return false;
}
__alarm_info->app_unique_name = strdup(app_name);
- if (caller_is_app) {
+ if (caller_is_app)
__alarm_info->caller_pkgid = _get_pkgid_by_appid(app_name, uid);
- }
SECURE_LOGD("caller_pkgid = %s, callee_pkgid = null",
__alarm_info->caller_pkgid);
@@ -1050,8 +1088,8 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
__alarm_info->noti = strdup(noti_data);
}
- __alarm_set_start_and_end_time(alarm_info, __alarm_info);
- memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t));
+ __alarm_set_start_and_end_time(base_info, __alarm_info);
+ memcpy(&(__alarm_info->base_info), base_info, sizeof(base_info_t));
__alarm_generate_alarm_id(__alarm_info, alarm_id);
if (__alarm_add_and_set(__alarm_info, pid) == false) {
@@ -1066,7 +1104,7 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
}
static bool __alarm_update(uid_t uid, alarm_id_t alarm_id,
- alarm_info_t *alarm_info, int update_flag, int *error_code)
+ base_info_t *base_info, int update_flag, int *error_code)
{
time_t current_time;
char due_time_r[100] = { 0 };
@@ -1082,16 +1120,16 @@ static bool __alarm_update(uid_t uid, alarm_id_t alarm_id,
alarm_context.c_due_time = -1;
}
- __alarm_info = __alarm_update_in_list(uid, alarm_id, alarm_info,
+ __alarm_info = __alarm_update_in_list(uid, alarm_id, base_info,
update_flag, error_code);
if (!__alarm_info) {
LOGE("[alarm-server]: requested alarm_id "
- "(%d) does not exist. so this value is invalid id.", alarm_id);
+ "(%d) is not proper. so this value is invalid id.", alarm_id);
return false;
}
- if (__alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
- __alarm_info->alarm_info.reserved_info = current_time;
+ if (__alarm_info->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE)
+ __alarm_info->base_info.reserved_info = current_time;
_alarm_set_next_duetime(__alarm_info);
@@ -1128,6 +1166,7 @@ static bool __alarm_update(uid_t uid, alarm_id_t alarm_id,
__alarm_info->due_time, current_time);
return true;
} else {
+ tzset();
localtime_r(&(__alarm_info->due_time), &ts_ret);
strftime(due_time_r, 30, "%c", &ts_ret);
SECURE_LOGD("[alarm-server]:Update alarm: alarm(%d) "
@@ -1183,27 +1222,27 @@ bool _can_skip_expired_cb(alarm_id_t alarm_id)
{
GSList *gs_iter = NULL;
__alarm_info_t *entry = NULL;
- alarm_info_t *alarm = NULL;
+ base_info_t *base_info = NULL;
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = (__alarm_info_t *)gs_iter->data;
if (entry->alarm_id == alarm_id) {
- alarm = &(entry->alarm_info);
+ base_info = &(entry->base_info);
time_t ts = 0;
struct tm ts_tm;
int dur = entry->requested_interval;
int from, to;
- if (dur == 0 || !(alarm->alarm_type & ALARM_TYPE_PERIOD) || entry->method == CUT_OFF)
+ if (dur == 0 || !(base_info->alarm_type & ALARM_TYPE_PERIOD) || entry->method == CUT_OFF)
return false;
- ts_tm.tm_hour = alarm->start.hour;
- ts_tm.tm_min = alarm->start.min;
- ts_tm.tm_sec = alarm->start.sec;
+ ts_tm.tm_hour = base_info->start.hour;
+ ts_tm.tm_min = base_info->start.min;
+ ts_tm.tm_sec = base_info->start.sec;
- ts_tm.tm_year = alarm->start.year - 1900;
- ts_tm.tm_mon = alarm->start.month - 1;
- ts_tm.tm_mday = alarm->start.day;
+ ts_tm.tm_year = base_info->start.year - 1900;
+ ts_tm.tm_mon = base_info->start.month - 1;
+ ts_tm.tm_mday = base_info->start.day;
ts_tm.tm_isdst = -1;
ts = mktime(&ts_tm);
@@ -1211,7 +1250,7 @@ bool _can_skip_expired_cb(alarm_id_t alarm_id)
from = (ts / dur) * dur;
to = from + dur;
- if (ts >= from && ts < to && from > ts - alarm->mode.u_interval.interval)
+ if (ts >= from && ts < to && from > ts - base_info->mode.u_interval.interval)
return false;
return true;
@@ -1236,7 +1275,7 @@ static int __find_login_user(uid_t *uid)
free(uids);
return -1;
} else {
- if (!strncmp(state, "online", 6)) {
+ if (!strcmp(state, "online")) {
*uid = uids[i];
free(uids);
free(state);
@@ -1250,7 +1289,7 @@ static int __find_login_user(uid_t *uid)
return -1;
}
-static notification_h __get_notification(guchar *data, int datalen)
+static notification_h __get_notification(guchar *data, gsize datalen)
{
int ret;
GVariant *noti_gv = NULL;
@@ -1298,13 +1337,12 @@ static notification_h __get_notification(guchar *data, int datalen)
static void __expire_notification(__alarm_info_t *alarm_info)
{
int ret;
- int datalen;
+ gsize datalen;
notification_h noti;
guchar *noti_data;
int expire_mode = ALARM_EXPIRE_MODE_NORMAL;
- noti_data = g_base64_decode(alarm_info->noti,
- (gsize *)&datalen);
+ noti_data = g_base64_decode(alarm_info->noti, &datalen);
if (!noti_data) {
LOGE("Failed to decode noti data");
return;
@@ -1380,9 +1418,9 @@ static void __expire_app_control(__alarm_info_t *alarm_info)
} else {
/* since 2.4 */
appid = (char *)appsvc_get_appid(b);
- if ((alarm_info->alarm_info.alarm_type & ALARM_TYPE_NOLAUNCH) && !aul_app_is_running(appid)) {
+ if ((alarm_info->base_info.alarm_type & ALARM_TYPE_NOLAUNCH) && !aul_app_is_running(appid)) {
LOGE("This alarm is ignored\n");
- } else if (!(alarm_info->alarm_info.alarm_type & ALARM_TYPE_INEXACT) ||
+ } else if (!(alarm_info->base_info.alarm_type & ALARM_TYPE_INEXACT) ||
!_can_skip_expired_cb(alarm_info->alarm_id)) {
if (alarm_info->global) {
if (__find_login_user(&target_uid) < 0) {
@@ -1459,9 +1497,9 @@ static int __expire_dbus_activation(__alarm_info_t *alarm_info)
strncpy(appid, alarm_info->dst_service_name + 6, sizeof(appid) - 1);
}
- if (alarm_info->uid >= REGULAR_UID_MIN) {
+ if (alarm_info->uid >= REGULAR_UID_MIN)
is_app = _is_app(appid, alarm_info->uid);
- }
+
LOGD("appid : %s app?(%d)", appid, is_app);
if (is_app) {
@@ -1479,7 +1517,7 @@ static int __expire_dbus_activation(__alarm_info_t *alarm_info)
LOGD("before alarm_send_noti_to_application");
_alarm_send_noti_to_application_by_dbus(destination_app_service_name,
- alarm_info->alarm_id, alarm_info->alarm_info.msec, alarm_info->uid); /* dbus auto activation */
+ alarm_info->alarm_id, alarm_info->base_info.msec, alarm_info->uid); /* dbus auto activation */
LOGD("after _alarm_send_noti_to_application_by_dbus");
} else {
/* Case #3-2. The process was killed && App type
@@ -1487,7 +1525,7 @@ static int __expire_dbus_activation(__alarm_info_t *alarm_info)
__expired_alarm_t *expire_info;
char alarm_id_str[32] = { 0, };
- if (alarm_info->alarm_info.alarm_type & ALARM_TYPE_WITHCB) {
+ if (alarm_info->base_info.alarm_type & ALARM_TYPE_WITHCB) {
__alarm_remove_from_list(alarm_info->uid, alarm_info->alarm_id, NULL);
LOGW("[alarm-server]:This alarm_type is WITHCB");
return -2;
@@ -1525,11 +1563,15 @@ static int __expire_dbus_activation(__alarm_info_t *alarm_info)
} else {
/* Case #3-3. The process was killed && non-app type(daemon)
* Expiration noti is sent by DBus. it makes the process alive. (dbus auto activation) */
- if (alarm_info->alarm_info.alarm_type & ALARM_TYPE_WITHCB) {
+ if (alarm_info->base_info.alarm_type & ALARM_TYPE_WITHCB) {
char *cmdline = _get_cmdline_from_pid(alarm_info->pid);
if (!cmdline || strcmp(cmdline, alarm_info->app_unique_name) != 0) {
__alarm_remove_from_list(alarm_info->uid, alarm_info->alarm_id, NULL);
LOGW("[alarm-server]:This alarm_type is WITHCB, the process was killed.");
+
+ if (cmdline)
+ free(cmdline);
+
return -2;
}
@@ -1539,7 +1581,7 @@ static int __expire_dbus_activation(__alarm_info_t *alarm_info)
LOGD("before alarm_send_noti_to_application for daemon");
_alarm_send_noti_to_application_by_dbus(destination_app_service_name,
- alarm_info->alarm_id, alarm_info->alarm_info.msec, alarm_info->uid); /* dbus auto activation */
+ alarm_info->alarm_id, alarm_info->base_info.msec, alarm_info->uid); /* dbus auto activation */
LOGD("after _alarm_send_noti_to_application_by_dbus for daemon");
}
@@ -1599,9 +1641,10 @@ void _alarm_expired()
_save_alarm_info_log("EXPIRED", __alarm_info);
- DO_AFTER_ALARM_EXPIRE(__alarm_info->pid, __alarm_info->app_unique_name);
+ if (using_rtc)
+ DO_AFTER_ALARM_EXPIRE(__alarm_info->pid, __alarm_info->app_unique_name);
- if (__alarm_info->alarm_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) {
+ if (__alarm_info->base_info.mode.repeat == ALARM_REPEAT_MODE_ONCE) {
__alarm_remove_from_list(__alarm_info->uid, __alarm_info->alarm_id, NULL);
} else {
_alarm_set_next_duetime(__alarm_info);
@@ -1680,20 +1723,20 @@ static int __on_app_enable_cb(uid_t target_uid, int req_id,
__alarm_info_t *entry = NULL;
bool is_restored = false;
- if (key && strncmp(key, "end", 3) == 0 && val && strncmp(val, "ok", 2) == 0) {
+ if (key && strcmp(key, "end") == 0 && val && strcmp(val, "ok") == 0) {
SECURE_LOGD("Enable appid(%s)", appid);
for (gs_iter = g_disabled_alarm_list; gs_iter != NULL; ) {
entry = (__alarm_info_t *)gs_iter->data;
gs_iter = g_slist_next(gs_iter);
- if (strncmp(appid, entry->app_unique_name, strlen(appid)) == 0) {
+ if (strcmp(appid, entry->app_unique_name) == 0) {
_alarm_set_next_duetime(entry);
SECURE_LOGD("Restore alarm_id(%d) duetime(%d) appid(%s)",
entry->alarm_id, (int)(entry->due_time), appid);
alarm_context.alarms = g_slist_append(alarm_context.alarms, entry);
g_disabled_alarm_list = g_slist_remove(g_disabled_alarm_list, entry);
- if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE))
+ if (!(entry->base_info.alarm_type & ALARM_TYPE_VOLATILE))
_update_db_for_disabled_alarm(entry->alarm_id, false);
is_restored = true;
}
@@ -1720,14 +1763,14 @@ static int __on_app_disable_cb(uid_t target_uid, int req_id,
__alarm_info_t *entry = NULL;
bool is_disabled = false;
- if (key && strncmp(key, "end", 3) == 0 && val && strncmp(val, "ok", 2) == 0) {
+ if (key && strcmp(key, "end") == 0 && val && strcmp(val, "ok") == 0) {
SECURE_LOGD("Disable appid(%s)", appid);
for (gs_iter = alarm_context.alarms; gs_iter != NULL; ) {
entry = (__alarm_info_t *)gs_iter->data;
gs_iter = g_slist_next(gs_iter);
- if (strncmp(appid, entry->app_unique_name, strlen(appid)) == 0) {
- if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE))
+ if (strcmp(appid, entry->app_unique_name) == 0) {
+ if (!(entry->base_info.alarm_type & ALARM_TYPE_VOLATILE))
_update_db_for_disabled_alarm(entry->alarm_id, true);
g_disabled_alarm_list = g_slist_append(g_disabled_alarm_list, entry);
alarm_context.alarms = g_slist_remove(alarm_context.alarms, entry);
@@ -1754,10 +1797,10 @@ static int __on_app_installed(uid_t target_uid, int req_id, const char *pkg_type
__alarm_info_t *entry = NULL;
bool is_restored = false;
- if (GET_POWER_SAVING_MODE() == -1)
+ if (using_rtc && GET_POWER_SAVING_MODE() == -1)
return ALARMMGR_RESULT_SUCCESS;
- if ((key && strncmp(key, "end", 3) != 0) || (val && strncmp(val, "ok", 2) != 0))
+ if ((key && strcmp(key, "end") != 0) || (val && strcmp(val, "ok") != 0))
return ALARMMGR_RESULT_SUCCESS;
if (g_slist_length(g_disabled_alarm_list) == 0)
@@ -1770,13 +1813,13 @@ static int __on_app_installed(uid_t target_uid, int req_id, const char *pkg_type
const char *callee_pkgid = entry->callee_pkgid;
gs_iter = g_slist_next(gs_iter);
- if ((caller_pkgid && strncmp(pkgid, caller_pkgid, strlen(pkgid)) == 0) ||
- (callee_pkgid && strncmp(pkgid, callee_pkgid, strlen(pkgid)) == 0)) {
+ if ((caller_pkgid && strcmp(pkgid, caller_pkgid) == 0) ||
+ (callee_pkgid && strcmp(pkgid, callee_pkgid) == 0)) {
_alarm_set_next_duetime(entry);
alarm_context.alarms = g_slist_append(alarm_context.alarms, entry);
g_disabled_alarm_list = g_slist_remove(g_disabled_alarm_list, entry);
- if (!(entry->alarm_info.alarm_type & ALARM_TYPE_VOLATILE))
+ if (!(entry->base_info.alarm_type & ALARM_TYPE_VOLATILE))
_update_db_for_disabled_alarm(entry->alarm_id, false);
is_restored = true;
}
@@ -1798,32 +1841,32 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty
{
GSList *gs_iter = NULL;
__alarm_info_t *entry = NULL;
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
bool is_deleted = false;
- int is_power_saving_mode;
+ int is_power_saving_mode = 0;
SECURE_LOGD("pkg_type(%s), pkgid(%s), key(%s), value(%s)", pkg_type, pkgid, key, val);
- if ((key && strncmp(key, "end", 3) != 0) || (val && strncmp(val, "ok", 2) != 0))
+ if ((key && strcmp(key, "end") != 0) || (val && strcmp(val, "ok") != 0))
return ALARMMGR_RESULT_SUCCESS;
- is_power_saving_mode = GET_POWER_SAVING_MODE();
+ if (using_rtc)
+ is_power_saving_mode = GET_POWER_SAVING_MODE();
for (gs_iter = alarm_context.alarms; gs_iter != NULL;) {
entry = (__alarm_info_t *)gs_iter->data;
const char *caller_pkgid = entry->caller_pkgid;
const char *callee_pkgid = entry->callee_pkgid;
- int pid = _get_pid_from_appid(entry->app_unique_name, entry->uid);
gs_iter = g_slist_next(gs_iter);
- if ((caller_pkgid && strncmp(pkgid, caller_pkgid, strlen(pkgid)) == 0) ||
- (callee_pkgid && strncmp(pkgid, callee_pkgid, strlen(pkgid)) == 0)) {
+ if ((caller_pkgid && strcmp(pkgid, caller_pkgid) == 0) ||
+ (callee_pkgid && strcmp(pkgid, callee_pkgid) == 0)) {
if (_remove_from_scheduled_alarm_list(entry->uid, entry->alarm_id))
is_deleted = true;
- alarm_info = &entry->alarm_info;
- if (!(alarm_info->alarm_type & ALARM_TYPE_VOLATILE)) {
+ base_info = &entry->base_info;
+ if (!(base_info->alarm_type & ALARM_TYPE_VOLATILE)) {
if (is_power_saving_mode == 1)
_update_db_for_disabled_alarm(entry->alarm_id, true);
else
@@ -1835,9 +1878,6 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty
g_disabled_alarm_list = g_slist_append(g_disabled_alarm_list, entry);
alarm_context.alarms = g_slist_remove(alarm_context.alarms, entry);
} else {
- if (g_hash_table_remove(caller_appid_cache_table, GINT_TO_POINTER(pid)) == true)
- LOGD("Remove cachd data of pid[%d]", pid);
-
LOGD("Remove pkgid[%s], alarm_id[%d]", pkgid, entry->alarm_id);
alarm_context.alarms = g_slist_remove(alarm_context.alarms, entry);
_release_alarm_info_t(entry);
@@ -1854,26 +1894,24 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty
return ALARMMGR_RESULT_SUCCESS;
}
-static long __get_proper_interval(long interval, int alarm_type)
+static time_t __get_proper_interval(time_t interval)
{
- GSList *gs_iter = NULL;
- __alarm_info_t *entry = NULL;
- long maxInterval = 60;
+ time_t adjusted_interval;
- for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
- entry = (__alarm_info_t *)gs_iter->data;
- if (entry->alarm_info.alarm_type & ALARM_TYPE_PERIOD) {
- if (entry->alarm_info.mode.u_interval.interval <= interval &&
- entry->alarm_info.mode.u_interval.interval > maxInterval)
- maxInterval = entry->alarm_info.mode.u_interval.interval;
- }
+ if (interval < INEXACT_INTERVAL_QUANTUM) {
+ adjusted_interval = INEXACT_INTERVAL_QUANTUM;
+ } else if (interval % INEXACT_INTERVAL_QUANTUM == 0) {
+ adjusted_interval = interval;
+ } else {
+ long quotient = interval / INEXACT_INTERVAL_QUANTUM;
+ long remainder = interval % INEXACT_INTERVAL_QUANTUM;
+ adjusted_interval = remainder > INEXACT_INTERVAL_QUANTUM / 2 ?
+ quotient * INEXACT_INTERVAL_QUANTUM + INEXACT_INTERVAL_QUANTUM :
+ quotient * INEXACT_INTERVAL_QUANTUM;
}
- while ((maxInterval * 2 <= interval && maxInterval < LONG_MAX / 2) ||
- (alarm_type & ALARM_TYPE_INEXACT && maxInterval < MIN_INEXACT_INTERVAL))
- maxInterval *= 2;
-
- return maxInterval;
+ LOGE("adjusted_interval : %ld", adjusted_interval);
+ return adjusted_interval;
}
static gboolean __alarm_expired_directly(gpointer user_data)
@@ -1947,7 +1985,7 @@ void __reschedule_alarms_with_newtime(time_t cur_time, time_t new_time, double d
return;
}
-static int __check_modifiable(uid_t uid, pid_t pid, int alarm_id)
+static int __check_modifiable(uid_t uid, pid_t pid, const gchar *sender, int alarm_id)
{
bool caller_is_app = false;
char app_name[MAX_APP_ID_LEN] = { 0 };
@@ -1955,7 +1993,7 @@ static int __check_modifiable(uid_t uid, pid_t pid, int alarm_id)
__alarm_info_t *entry = NULL;
char *caller_pkgid = NULL;
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name),
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name),
&caller_is_app, uid) == false)
return ERR_ALARM_SYSTEM_FAIL;
@@ -1993,7 +2031,7 @@ static int __check_modifiable(uid_t uid, pid_t pid, int alarm_id)
int alarm_manager_alarm_set_rtc_time(GVariant *parameters)
{
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
+ if (using_rtc) {
int retval = 0;
struct tm tm, *alarm_tm = NULL;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2047,7 +2085,7 @@ int alarm_manager_alarm_set_rtc_time(GVariant *parameters)
static int accrue_nsec = 0; /* To check a millisecond part of current time at changing the system time(sec) */
-int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid)
+int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid, const gchar *sender)
{
double diff_time = 0.0;
struct timespec cur_time;
@@ -2066,9 +2104,9 @@ int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid)
clock_gettime(CLOCK_REALTIME, &cur_time);
accrue_nsec += (cur_time.tv_nsec / MILLION); /* Accrue the nanosecond to compensate the time */
- if (accrue_nsec > (BILLION / 2)) { /* Over 500ms */
+ if (accrue_nsec > 500) { /* Over 500ms */
diff_time = difftime(new_time, cur_time.tv_sec) - 1;
- accrue_nsec -= BILLION;
+ accrue_nsec -= 1000;
} else {
diff_time = difftime(new_time, cur_time.tv_sec);
}
@@ -2086,14 +2124,15 @@ int alarm_manager_alarm_set_time(GVariant* parameters, pid_t pid)
__reschedule_alarms_with_newtime(cur_time.tv_sec, new_time, diff_time);
- __get_cached_unique_name(pid, sender_id, MAX_APP_ID_LEN, NULL, 5001);
+ __get_cached_unique_name(pid, sender, sender_id, MAX_APP_ID_LEN, NULL, 5001);
snprintf(log_message, sizeof(log_message), "requested by %s (pid %d)", sender_id, pid);
_save_module_log("SET TIME END", log_message);
return ALARMMGR_RESULT_SUCCESS;;
}
-int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters, pid_t pid)
+int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters,
+ pid_t pid, const gchar *sender)
{
double diff_time = 0.0;
struct timespec cur_time = {0,};
@@ -2158,7 +2197,7 @@ int alarm_manager_alarm_set_time_with_propagation_delay(GVariant* parameters, pi
LOGD("Requested(%ld.%09ld) Delay(%ld.%09ld) Sleep(%09ld)", req_sec, req_nsec, delay.tv_sec, delay.tv_nsec, sleep_time.tv_nsec);
__reschedule_alarms_with_newtime(cur_time.tv_sec, real_newtime, diff_time);
- __get_cached_unique_name(pid, sender_id, MAX_APP_ID_LEN, NULL, 5001);
+ __get_cached_unique_name(pid, sender, sender_id, MAX_APP_ID_LEN, NULL, 5001);
snprintf(log_message, sizeof(log_message), "requested by %s (pid %d)", sender_id, pid);
_save_module_log("SET TIME PROPAGATION END", log_message);
@@ -2175,6 +2214,7 @@ int alarm_manager_alarm_set_timezone(GVariant* parameters)
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
char *tzpath_str;
time_t cur_time;
+ int dirfd = -1;
g_variant_get(parameters, "(&s)", &tzpath_str);
@@ -2186,10 +2226,18 @@ int alarm_manager_alarm_set_timezone(GVariant* parameters)
goto done;
}
- retval = lstat(TIMEZONE_INFO_LINK_PATH, &statbuf);
+ dirfd = open(TIMEZONE_INFO_LINK_DIR_PATH, O_DIRECTORY);
+ if (dirfd < 0) {
+ LOGE("open(%s) failed: %d", TIMEZONE_INFO_LINK_DIR_PATH, errno);
+ return_code = ERR_ALARM_SYSTEM_FAIL;
+ goto done;
+ }
+
+ retval = fstatat(dirfd, TIMEZONE_INFO_LINK_FILE_NAME, &statbuf,
+ AT_SYMLINK_NOFOLLOW);
if (retval == 0 || (retval == -1 && errno != ENOENT)) {
/* unlink the current link */
- if (unlink(TIMEZONE_INFO_LINK_PATH) < 0) {
+ if (unlinkat(dirfd, TIMEZONE_INFO_LINK_FILE_NAME, 0) < 0) {
LOGE("unlink() is failed.");
return_code = ERR_ALARM_SYSTEM_FAIL;
goto done;
@@ -2197,14 +2245,16 @@ int alarm_manager_alarm_set_timezone(GVariant* parameters)
}
/* create a new symlink when the /opt/etc/localtime is empty. */
- if (symlink(tzpath_str, TIMEZONE_INFO_LINK_PATH) < 0) {
+ if (symlinkat(tzpath_str, dirfd, TIMEZONE_INFO_LINK_FILE_NAME) < 0) {
LOGE("Failed to create an symlink of %s.", tzpath_str);
return_code = ERR_ALARM_SYSTEM_FAIL;
goto done;
}
tzset();
- DO_AFTER_TIMEZONE_SET();
+
+ if (using_rtc)
+ DO_AFTER_TIMEZONE_SET();
/* Rescheduling alarms */
_alarm_disable_timer();
@@ -2228,6 +2278,9 @@ int alarm_manager_alarm_set_timezone(GVariant* parameters)
bundle_free(b);
done:
+ if (dirfd >= 0)
+ close(dirfd);
+
if (return_code == ALARMMGR_RESULT_SUCCESS)
strncpy(log_tag, "SET TIMEZONE", sizeof(log_tag) - 1);
else
@@ -2239,9 +2292,10 @@ done:
return return_code;
}
-int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id)
+int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid,
+ const gchar *sender, int *alarm_id)
{
- alarm_info_t alarm_info;
+ base_info_t base_info;
int return_code = ALARMMGR_RESULT_SUCCESS;
int _alarm_id = 0;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2294,32 +2348,34 @@ int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid
bundle_free(b);
}
- alarm_info.start.year = start_year;
- alarm_info.start.month = start_month;
- alarm_info.start.day = start_day;
- alarm_info.start.hour = start_hour;
- alarm_info.start.min = start_min;
- alarm_info.start.sec = start_sec;
+ base_info.start.year = start_year;
+ base_info.start.month = start_month;
+ base_info.start.day = start_day;
+ base_info.start.hour = start_hour;
+ base_info.start.min = start_min;
+ base_info.start.sec = start_sec;
- alarm_info.end.year = end_year;
- alarm_info.end.month = end_month;
- alarm_info.end.day = end_day;
+ base_info.end.year = end_year;
+ base_info.end.month = end_month;
+ base_info.end.day = end_day;
- alarm_info.mode.u_interval.day_of_week = mode_day_of_week;
- alarm_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
+ base_info.mode.u_interval.day_of_week = mode_day_of_week;
+ base_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
- alarm_info.alarm_type = alarm_type;
- alarm_info.reserved_info = reserved_info;
+ base_info.msec = 0;
+ base_info.alarm_type = alarm_type;
+ base_info.reserved_info = reserved_info;
- if ((alarm_info.alarm_type & ALARM_TYPE_INEXACT)) {
- alarm_info.alarm_type |= ALARM_TYPE_PERIOD;
- alarm_info.mode.u_interval.interval =
- __get_proper_interval(mode_interval, alarm_info.alarm_type);
+ if ((base_info.alarm_type & ALARM_TYPE_INEXACT)) {
+ base_info.alarm_type |= ALARM_TYPE_PERIOD;
+ base_info.mode.u_interval.interval =
+ __get_proper_interval(mode_interval);
} else if (mode_interval <= 0) {
- alarm_info.mode.u_interval.interval = 0;
+ base_info.mode.u_interval.interval = 0;
}
- if (!__alarm_create_appsvc(&alarm_info, &_alarm_id, mode_interval, uid, pid, bundle_data, &return_code)) {
+ if (!__alarm_create_appsvc(&base_info, &_alarm_id, mode_interval, uid, pid,
+ sender, bundle_data, &return_code)) {
LOGE("Unable to create alarm! return_code[%d]", return_code);
strncpy(log_tag, "FAIL: CREATE SVC", sizeof(log_tag) - 1);
snprintf(log_message, sizeof(log_message),
@@ -2336,9 +2392,9 @@ int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid
}
int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid,
- int *alarm_id)
+ const gchar *sender, int *alarm_id)
{
- alarm_info_t alarm_info;
+ base_info_t base_info;
int return_code = ALARMMGR_RESULT_SUCCESS;
int _alarm_id = 0;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2360,32 +2416,34 @@ int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid,
mode_interval = (time_t)tmp_mode_interval;
reserved_info = (time_t)tmp_reserved_info;
- alarm_info.start.year = start_year;
- alarm_info.start.month = start_month;
- alarm_info.start.day = start_day;
- alarm_info.start.hour = start_hour;
- alarm_info.start.min = start_min;
- alarm_info.start.sec = start_sec;
+ base_info.start.year = start_year;
+ base_info.start.month = start_month;
+ base_info.start.day = start_day;
+ base_info.start.hour = start_hour;
+ base_info.start.min = start_min;
+ base_info.start.sec = start_sec;
- alarm_info.end.year = end_year;
- alarm_info.end.month = end_month;
- alarm_info.end.day = end_day;
+ base_info.end.year = end_year;
+ base_info.end.month = end_month;
+ base_info.end.day = end_day;
- alarm_info.mode.u_interval.day_of_week = mode_day_of_week;
- alarm_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
+ base_info.mode.u_interval.day_of_week = mode_day_of_week;
+ base_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
- alarm_info.alarm_type = alarm_type;
- alarm_info.reserved_info = reserved_info;
+ base_info.msec = 0;
+ base_info.alarm_type = alarm_type;
+ base_info.reserved_info = reserved_info;
- if ((alarm_info.alarm_type & ALARM_TYPE_INEXACT)) {
- alarm_info.alarm_type |= ALARM_TYPE_PERIOD;
- alarm_info.mode.u_interval.interval =
- __get_proper_interval(mode_interval, alarm_info.alarm_type);
+ if ((base_info.alarm_type & ALARM_TYPE_INEXACT)) {
+ base_info.alarm_type |= ALARM_TYPE_PERIOD;
+ base_info.mode.u_interval.interval =
+ __get_proper_interval(mode_interval);
} else if (mode_interval <= 0) {
- alarm_info.mode.u_interval.interval = 0;
+ base_info.mode.u_interval.interval = 0;
}
- if (!__alarm_create_noti(&alarm_info, &_alarm_id, mode_interval, uid, pid, noti_data, &return_code)) {
+ if (!__alarm_create_noti(&base_info, &_alarm_id, mode_interval, uid, pid,
+ sender, noti_data, &return_code)) {
LOGE("Unable to create alarm! return_code[%d]", return_code);
strncpy(log_tag, "FAIL: CREATE NOTI", sizeof(log_tag) - 1);
snprintf(log_message, sizeof(log_message), "alarmID: %d, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
@@ -2400,9 +2458,10 @@ int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid,
return return_code;
}
-int alarm_manager_alarm_create(GVariant *parameters, uid_t uid, pid_t pid, int *alarm_id)
+int alarm_manager_alarm_create(GVariant *parameters, uid_t uid, pid_t pid,
+ const gchar *sender, int *alarm_id)
{
- alarm_info_t alarm_info;
+ base_info_t base_info;
int return_code = ALARMMGR_RESULT_SUCCESS;
int _alarm_id = 0;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2431,31 +2490,31 @@ int alarm_manager_alarm_create(GVariant *parameters, uid_t uid, pid_t pid, int *
reserved_info = (time_t)tmp_reserved_info;
- alarm_info.start.year = start_year;
- alarm_info.start.month = start_month;
- alarm_info.start.day = start_day;
- alarm_info.start.hour = start_hour;
- alarm_info.start.min = start_min;
- alarm_info.start.sec = start_sec;
+ base_info.start.year = start_year;
+ base_info.start.month = start_month;
+ base_info.start.day = start_day;
+ base_info.start.hour = start_hour;
+ base_info.start.min = start_min;
+ base_info.start.sec = start_sec;
- alarm_info.msec = msec;
+ base_info.msec = msec;
- alarm_info.end.year = end_year;
- alarm_info.end.month = end_month;
- alarm_info.end.day = end_day;
+ base_info.end.year = end_year;
+ base_info.end.month = end_month;
+ base_info.end.day = end_day;
- alarm_info.mode.u_interval.day_of_week = mode_day_of_week;
- alarm_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
+ base_info.mode.u_interval.day_of_week = mode_day_of_week;
+ base_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
- alarm_info.alarm_type = alarm_type;
- alarm_info.reserved_info = reserved_info;
+ base_info.alarm_type = alarm_type;
+ base_info.reserved_info = reserved_info;
if (strcmp(reserved_service_name, "null") == 0)
_reserved_service_name = NULL;
if (strcmp(reserved_service_name_mod, "null") == 0)
_reserved_service_name_mod = NULL;
- if (!__alarm_create(&alarm_info, &_alarm_id, uid, pid, QUANTUMIZE, 0, 0, app_service_name, app_service_name_mod,
+ if (!__alarm_create(&base_info, &_alarm_id, uid, pid, sender, QUANTUMIZE, 0, 0, app_service_name, app_service_name_mod,
_reserved_service_name, _reserved_service_name_mod, &return_code)) {
LOGE("Unable to create alarm! return_code[%d]", return_code);
strncpy(log_tag, "FAIL: CREATE", sizeof(log_tag) - 1);
@@ -2482,9 +2541,9 @@ time_t _get_periodic_alarm_standard_time(void)
}
int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid,
- pid_t pid, int *alarm_id)
+ pid_t pid, const gchar *sender, int *alarm_id)
{
- alarm_info_t alarm_info;
+ base_info_t base_info;
int return_code = ALARMMGR_RESULT_SUCCESS;
int _alarm_id = 0;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2500,48 +2559,49 @@ int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid,
struct tm standard_tm;
time_t standard_time = _get_periodic_alarm_standard_time();
+ tzset();
localtime_r(&standard_time, &standard_tm);
- alarm_info.reserved_info = standard_time;
+ base_info.reserved_info = standard_time;
- alarm_info.start.year = standard_tm.tm_year + 1900;
- alarm_info.start.month = standard_tm.tm_mon + 1;
- alarm_info.start.day = standard_tm.tm_mday;
- alarm_info.start.hour = standard_tm.tm_hour;
- alarm_info.start.min = standard_tm.tm_min;
- alarm_info.start.sec = standard_tm.tm_sec;
+ base_info.start.year = standard_tm.tm_year + 1900;
+ base_info.start.month = standard_tm.tm_mon + 1;
+ base_info.start.day = standard_tm.tm_mday;
+ base_info.start.hour = standard_tm.tm_hour;
+ base_info.start.min = standard_tm.tm_min;
+ base_info.start.sec = standard_tm.tm_sec;
- alarm_info.msec = 0;
+ base_info.msec = 0;
- alarm_info.end.year = 0;
- alarm_info.end.month = 0;
- alarm_info.end.day = 0;
+ base_info.end.year = 0;
+ base_info.end.month = 0;
+ base_info.end.day = 0;
- alarm_info.alarm_type = ALARM_TYPE_VOLATILE;
- alarm_info.alarm_type |= ALARM_TYPE_RELATIVE;
- alarm_info.alarm_type |= ALARM_TYPE_WITHCB;
- alarm_info.alarm_type |= ALARM_TYPE_PERIOD;
+ base_info.alarm_type = ALARM_TYPE_VOLATILE;
+ base_info.alarm_type |= ALARM_TYPE_RELATIVE;
+ base_info.alarm_type |= ALARM_TYPE_WITHCB;
+ base_info.alarm_type |= ALARM_TYPE_PERIOD;
if (interval <= 0) {
- alarm_info.mode.repeat = ALARM_REPEAT_MODE_ONCE;
- alarm_info.mode.u_interval.interval = 0;
+ base_info.mode.repeat = ALARM_REPEAT_MODE_ONCE;
+ base_info.mode.u_interval.interval = 0;
} else {
- alarm_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
+ base_info.mode.repeat = ALARM_REPEAT_MODE_REPEAT;
if (is_ref)
- alarm_info.mode.u_interval.interval = interval * 60;
+ base_info.mode.u_interval.interval = (time_t)interval * 60;
else
- alarm_info.mode.u_interval.interval = __get_proper_interval(interval * 60, alarm_info.alarm_type);
+ base_info.mode.u_interval.interval = __get_proper_interval(interval * 60);
}
- if (!__alarm_create(&alarm_info, &_alarm_id, uid, pid, (periodic_method_e)method, interval * 60, is_ref,
- app_service_name, app_service_name_mod,
- NULL, NULL, &return_code)) {
+ if (!__alarm_create(&base_info, &_alarm_id, uid, pid, sender,
+ (periodic_method_e)method, interval * 60, is_ref, app_service_name,
+ app_service_name_mod, NULL, NULL, &return_code)) {
LOGE("Unable to create alarm! return_code[%d]", return_code);
strncpy(log_tag, "FAIL: CREAT PERIOD", sizeof(log_tag) - 1);
snprintf(log_message, sizeof(log_message), "alarmID: %d, uid: %d, pid: %d, duetime: %d-%d-%d %02d:%02d:%02d",
- _alarm_id, uid, pid, alarm_info.start.year, alarm_info.start.month,
- alarm_info.start.day, alarm_info.start.hour,
- alarm_info.start.min, alarm_info.start.sec);
+ _alarm_id, uid, pid, base_info.start.year, base_info.start.month,
+ base_info.start.day, base_info.start.hour,
+ base_info.start.min, base_info.start.sec);
_save_module_log(log_tag, log_message);
return_code = ERR_ALARM_SYSTEM_FAIL;
} else {
@@ -2552,7 +2612,8 @@ int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid,
return return_code;
}
-int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid)
+int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid,
+ const gchar *sender)
{
int return_code = ALARMMGR_RESULT_SUCCESS;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
@@ -2561,7 +2622,7 @@ int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid)
g_variant_get(parameters, "(i)", &alarm_id);
- return_code = __check_modifiable(uid, pid, alarm_id);
+ return_code = __check_modifiable(uid, pid, sender, alarm_id);
if (return_code != ALARMMGR_RESULT_SUCCESS)
return return_code;
@@ -2580,16 +2641,17 @@ int alarm_manager_alarm_delete(GVariant *parameters, uid_t uid, pid_t pid)
return return_code;
}
-int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid)
+int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid,
+ const gchar *sender)
{
GSList *gs_iter = NULL;
char app_name[MAX_APP_ID_LEN] = { 0 };
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
__alarm_info_t *entry = NULL;
bool is_deleted = false;
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false) {
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name), NULL, uid) == false) {
snprintf(log_message, sizeof(log_message), "pid: %d. Can not get the unique_name.", pid);
_save_module_log("FAIL: DELETE ALL", log_message);
return ERR_ALARM_SYSTEM_FAIL;
@@ -2602,12 +2664,12 @@ int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid)
entry = (__alarm_info_t*)gs_iter->data;
const char *tmp_appname = entry->app_unique_name;
SECURE_LOGD("Try to remove app_name[%s], alarm_id[%d]\n", tmp_appname, entry->alarm_id);
- if (tmp_appname && strncmp(app_name, tmp_appname, strlen(tmp_appname)) == 0) {
+ if (tmp_appname && strcmp(app_name, tmp_appname) == 0) {
if (_remove_from_scheduled_alarm_list(uid, entry->alarm_id))
is_deleted = true;
- alarm_info = &entry->alarm_info;
- if (!(alarm_info->alarm_type & ALARM_TYPE_VOLATILE)) {
+ base_info = &entry->base_info;
+ if (!(base_info->alarm_type & ALARM_TYPE_VOLATILE)) {
if (!_delete_alarms(entry->alarm_id))
SECURE_LOGE("_delete_alarms() is failed. pid[%d], alarm_id[%d]", pid, entry->alarm_id);
}
@@ -2636,10 +2698,10 @@ int alarm_manager_alarm_delete_all(GVariant *parameters, uid_t uid, pid_t pid)
return ALARMMGR_RESULT_SUCCESS;
}
-int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid)
+int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid, const gchar *sender)
{
int return_code = ALARMMGR_RESULT_SUCCESS;
- alarm_info_t alarm_info;
+ base_info_t base_info;
char log_tag[ALARMMGR_LOG_TAG_SIZE] = {0,};
char log_message[ALARMMGR_LOG_MESSAGE_SIZE] = {0,};
int alarm_id;
@@ -2658,28 +2720,29 @@ int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid)
mode_interval = (time_t)tmp_mode_interval;
reserved_info = (time_t)tmp_reserved_info;
- return_code = __check_modifiable(uid, pid, alarm_id);
+ return_code = __check_modifiable(uid, pid, sender, alarm_id);
if (return_code != ALARMMGR_RESULT_SUCCESS)
return return_code;
- alarm_info.start.year = start_year;
- alarm_info.start.month = start_month;
- alarm_info.start.day = start_day;
- alarm_info.start.hour = start_hour;
- alarm_info.start.min = start_min;
- alarm_info.start.sec = start_sec;
+ base_info.start.year = start_year;
+ base_info.start.month = start_month;
+ base_info.start.day = start_day;
+ base_info.start.hour = start_hour;
+ base_info.start.min = start_min;
+ base_info.start.sec = start_sec;
- alarm_info.end.year = end_year;
- alarm_info.end.month = end_month;
- alarm_info.end.day = end_day;
+ base_info.end.year = end_year;
+ base_info.end.month = end_month;
+ base_info.end.day = end_day;
- alarm_info.mode.u_interval.interval = mode_interval;
- alarm_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
+ base_info.mode.u_interval.interval = mode_interval;
+ base_info.mode.repeat = (alarm_repeat_mode_t)mode_repeat;
- alarm_info.alarm_type = alarm_type;
- alarm_info.reserved_info = reserved_info;
+ base_info.msec = 0;
+ base_info.alarm_type = alarm_type;
+ base_info.reserved_info = reserved_info;
- if (!__alarm_update(uid, alarm_id, &alarm_info,
+ if (!__alarm_update(uid, alarm_id, &base_info,
update_flag, &return_code)) {
LOGE("Unable to update the alarm! alarm_id[%d], return_code[%d]", alarm_id, return_code);
strncpy(log_tag, "FAIL: UPDATE", sizeof(log_tag) - 1);
@@ -2691,7 +2754,8 @@ int alarm_manager_alarm_update(GVariant *parameters, uid_t uid, pid_t pid)
return return_code;
}
-int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, int *num_of_ids)
+int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid,
+ const gchar *sender, int *num_of_ids)
{
GSList *gs_iter = NULL;
char app_name[MAX_APP_ID_LEN] = { 0 };
@@ -2700,7 +2764,7 @@ int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, int *num_of_ids)
*num_of_ids = _num_of_ids;
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false)
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name), NULL, uid) == false)
return ERR_ALARM_SYSTEM_FAIL;
SECURE_LOGD("Called by process (uid:%d, pid:%d, unique_name:%s)", uid, pid, app_name);
@@ -2709,7 +2773,7 @@ int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, int *num_of_ids)
entry = (__alarm_info_t*)gs_iter->data;
SECURE_LOGD("app_name=%s, app_unique_name=%s", app_name, entry->app_unique_name);
if (entry->uid == uid &&
- strncmp(app_name, entry->app_unique_name, strlen(app_name)) == 0) {
+ strcmp(app_name, entry->app_unique_name) == 0) {
(_num_of_ids)++;
SECURE_LOGD("inc number of alarms of app (uid:%d, pid:%d, unique_name:%s) is %d.", uid, pid, app_name, _num_of_ids);
}
@@ -2721,45 +2785,39 @@ int alarm_manager_alarm_get_number_of_ids(uid_t uid, pid_t pid, int *num_of_ids)
}
int alarm_manager_alarm_get_list_of_ids(GVariant *parameters, uid_t uid,
- pid_t pid, GVariant **alarm_array, int *num_of_alarm)
+ pid_t pid, const gchar *sender, GVariantBuilder *alarm_array, int *num_of_alarm)
{
GSList *gs_iter = NULL;
char app_name[MAX_APP_ID_LEN] = { 0 };
__alarm_info_t *entry = NULL;
int index = 0;
int max_number_of_ids;
- GVariantBuilder *builder = NULL;
- *alarm_array = g_variant_new("ai", NULL);
+ *num_of_alarm = 0;
g_variant_get(parameters, "(i)", &max_number_of_ids);
-
if (max_number_of_ids <= 0) {
SECURE_LOGE("called for uid(%d) pid(%d), but max_number_of_ids(%d) is less than 0.", uid, pid, max_number_of_ids);
- *num_of_alarm = 0;
return ALARMMGR_RESULT_SUCCESS;
}
- if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false)
+ if (__get_cached_unique_name(pid, sender, app_name, sizeof(app_name), NULL, uid) == false)
return ERR_ALARM_SYSTEM_FAIL;
SECURE_LOGD("Called by process (uid: %d, pid:%d, unique_name=%s).", uid, pid, app_name);
- builder = g_variant_builder_new(G_VARIANT_TYPE("ai"));
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = (__alarm_info_t*)gs_iter->data;
if (entry->uid == uid &&
- strncmp(app_name, (entry->app_unique_name), strlen(app_name)) == 0) {
- g_variant_builder_add(builder, "i", entry->alarm_id);
+ strcmp(app_name, (entry->app_unique_name)) == 0) {
+ g_variant_builder_add(alarm_array, "(i)", entry->alarm_id);
index++;
SECURE_LOGE("called for alarmid(%d), but max_number_of_ids(%d) index %d.", entry->alarm_id, max_number_of_ids, index);
}
}
- *alarm_array = g_variant_new("ai", builder);
*num_of_alarm = index;
- g_variant_builder_unref(builder);
SECURE_LOGE("Called by uid (%d), pid (%d), but max_number_of_ids(%d).", uid, pid, index);
return ALARMMGR_RESULT_SUCCESS;
@@ -2833,11 +2891,11 @@ int alarm_manager_alarm_get_noti_info(GVariant *parameters, uid_t uid, gchar **n
return return_code;
}
-int alarm_manager_alarm_get_info(GVariant *parameters, uid_t uid, alarm_info_t *alarm_info)
+int alarm_manager_alarm_get_info(GVariant *parameters, uid_t uid, base_info_t *base_info)
{
GSList *gs_iter = NULL;
__alarm_info_t *entry = NULL;
- alarm_info_t *_alarm_info = NULL;
+ base_info_t *found_base_info = NULL;
int alarm_id;
g_variant_get(parameters, "(i)", &alarm_id);
@@ -2846,30 +2904,30 @@ int alarm_manager_alarm_get_info(GVariant *parameters, uid_t uid, alarm_info_t *
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = (__alarm_info_t*)gs_iter->data;
if (entry->uid == uid && entry->alarm_id == alarm_id) {
- _alarm_info = &(entry->alarm_info);
+ found_base_info = &(entry->base_info);
break;
}
}
- if (_alarm_info == NULL) {
+ if (found_base_info == NULL) {
LOGE("The alarm(%d) is not found.", alarm_id);
return ERR_ALARM_INVALID_ID;
} else {
LOGD("The alarm(%d) is found.", alarm_id);
- alarm_info->start.year = _alarm_info->start.year;
- alarm_info->start.month = _alarm_info->start.month;
- alarm_info->start.day = _alarm_info->start.day;
- alarm_info->start.hour = _alarm_info->start.hour;
- alarm_info->start.min = _alarm_info->start.min;
- alarm_info->start.sec = _alarm_info->start.sec;
- alarm_info->end.year = _alarm_info->end.year;
- alarm_info->end.month = _alarm_info->end.month;
- alarm_info->end.day = _alarm_info->end.day;
- alarm_info->mode.u_interval.day_of_week =
- _alarm_info->mode.u_interval.day_of_week;
- alarm_info->mode.repeat = _alarm_info->mode.repeat;
- alarm_info->alarm_type = _alarm_info->alarm_type;
- alarm_info->reserved_info = _alarm_info->reserved_info;
+ base_info->start.year = found_base_info->start.year;
+ base_info->start.month = found_base_info->start.month;
+ base_info->start.day = found_base_info->start.day;
+ base_info->start.hour = found_base_info->start.hour;
+ base_info->start.min = found_base_info->start.min;
+ base_info->start.sec = found_base_info->start.sec;
+ base_info->end.year = found_base_info->end.year;
+ base_info->end.month = found_base_info->end.month;
+ base_info->end.day = found_base_info->end.day;
+ base_info->mode.u_interval.day_of_week =
+ found_base_info->mode.u_interval.day_of_week;
+ base_info->mode.repeat = found_base_info->mode.repeat;
+ base_info->alarm_type = found_base_info->alarm_type;
+ base_info->reserved_info = found_base_info->reserved_info;
}
return ALARMMGR_RESULT_SUCCESS;
@@ -2914,7 +2972,7 @@ int alarm_manager_alarm_set_global(GVariant *parameters, uid_t uid)
{
GSList *gs_iter = NULL;
__alarm_info_t *entry = NULL;
- alarm_info_t *alarm_info = NULL;
+ base_info_t *base_info = NULL;
int retval = 0;
int return_code = ALARMMGR_RESULT_SUCCESS;
char *callee_pkgid;
@@ -2927,12 +2985,12 @@ int alarm_manager_alarm_set_global(GVariant *parameters, uid_t uid)
for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) {
entry = (__alarm_info_t*)gs_iter->data;
if (entry->uid == uid && entry->alarm_id == alarm_id) {
- alarm_info = &(entry->alarm_info);
+ base_info = &(entry->base_info);
break;
}
}
- if (alarm_info == NULL) {
+ if (base_info == NULL) {
LOGE("The alarm(%d) is not found.", alarm_id);
return ERR_ALARM_INVALID_ID;
} else {
@@ -3033,40 +3091,41 @@ static int __load_module(const char *path)
plugin_handle = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
if (!plugin_handle) {
LOGE("Failed to load - %s", dlerror());
- return -1;
+ using_rtc = false;
+ return 0;
+ } else {
+ using_rtc = true;
}
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
- RTC_INIT = dlsym(plugin_handle, "RTC_INIT");
- if (!RTC_INIT) {
- LOGE("Failed to find PLUGIN_INIT");
- goto out;
- }
+ RTC_INIT = dlsym(plugin_handle, "RTC_INIT");
+ if (!RTC_INIT) {
+ LOGE("Failed to find PLUGIN_INIT");
+ goto out;
+ }
- CLEAR_WAKEUP_RTC = dlsym(plugin_handle, "CLEAR_WAKEUP_RTC");
- if (!CLEAR_WAKEUP_RTC) {
- LOGE("Failed to find CLEAR_WAKEUP_RTC");
- goto out;
- }
+ CLEAR_WAKEUP_RTC = dlsym(plugin_handle, "CLEAR_WAKEUP_RTC");
+ if (!CLEAR_WAKEUP_RTC) {
+ LOGE("Failed to find CLEAR_WAKEUP_RTC");
+ goto out;
+ }
- SET_WAKEUP_RTC = dlsym(plugin_handle, "SET_WAKEUP_RTC");
- if (!SET_WAKEUP_RTC) {
- LOGE("Failed to find SET_WAKEUP_RTC");
- goto out;
- }
+ SET_WAKEUP_RTC = dlsym(plugin_handle, "SET_WAKEUP_RTC");
+ if (!SET_WAKEUP_RTC) {
+ LOGE("Failed to find SET_WAKEUP_RTC");
+ goto out;
+ }
- SET_WAKEUP_RTC_WITH_DATETIME = dlsym(plugin_handle,
- "SET_WAKEUP_RTC_WITH_DATETIME");
- if (!SET_WAKEUP_RTC_WITH_DATETIME) {
- LOGE("Failed to find SET_WAKEUP_RTC_WITH_DATETIME");
- goto out;
- }
+ SET_WAKEUP_RTC_WITH_DATETIME = dlsym(plugin_handle,
+ "SET_WAKEUP_RTC_WITH_DATETIME");
+ if (!SET_WAKEUP_RTC_WITH_DATETIME) {
+ LOGE("Failed to find SET_WAKEUP_RTC_WITH_DATETIME");
+ goto out;
+ }
- SET_SYSTIME_RTC = dlsym(plugin_handle, "SET_SYSTIME_RTC");
- if (!SET_SYSTIME_RTC) {
- LOGE("Failed to find SET_SYSTIME_RTC");
- goto out;
- }
+ SET_SYSTIME_RTC = dlsym(plugin_handle, "SET_SYSTIME_RTC");
+ if (!SET_SYSTIME_RTC) {
+ LOGE("Failed to find SET_SYSTIME_RTC");
+ goto out;
}
DO_AFTER_TIMEZONE_SET = dlsym(plugin_handle, "DO_AFTER_TIMEZONE_SET");
@@ -3110,12 +3169,9 @@ out:
void _alarm_initialize()
{
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
-
- //For debug
+ time_t latest_settime;
int expire_mode = ALARM_EXPIRE_MODE_NORMAL;
+
vconf_get_int(VCONFKEY_ALARM_EXPIRE_MODE, &expire_mode);
LOGD("alarm_expire_mode : %d", expire_mode);
@@ -3140,6 +3196,7 @@ void _alarm_initialize()
if (_initialize_db() == false) {
LOGE("_initialize_db failed, "
"alarm cannot be stored to database.\n");
+ exit(1);
}
if (__load_module(PATH_LIB_ALARMMGR_PLUGIN) != 0) {
@@ -3147,27 +3204,38 @@ void _alarm_initialize()
exit(1);
}
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
+ if (using_rtc) {
if (RTC_INIT() != 0) {
LOGE("rtc init failed");
+ _save_module_log("FAIL: RTC_INIT", "alarm_manager won't use RTC");
+ using_rtc = false;
+ }
+
+ if (PS_MODE_INIT() != 0) {
+ LOGE("power saving mode init failed");
exit(1);
}
}
- if (PS_MODE_INIT() != 0) {
- LOGE("power saving mode init failed");
- exit(1);
+ if (_get_latest_settime(&latest_settime)) {
+ time_t current_time;
+ time(&current_time);
+ if (current_time < latest_settime) {
+ LOGE("[RTC_RESET] RTC goes back into the past.");
+ _save_module_log("FAIL: RTC_RESET", "RTC goes back into the past.");
+ is_rtc_reset = true;
+ }
}
__initialize_alarm_list();
__initialize_noti();
if (!caller_appid_cache_table) {
- caller_appid_cache_table = g_hash_table_new_full(g_direct_hash,
- g_direct_equal, NULL, __free_cached_value);
+ caller_appid_cache_table = g_hash_table_new_full(g_str_hash,
+ g_str_equal, NULL, __free_cached_value);
}
- if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
+ if (using_rtc) {
tzset();
DO_AFTER_TIMEZONE_SET();
}
diff --git a/server/alarm-service.conf.in b/server/alarm-service.conf.in
index 7ffdafd..22a32d7 100755
--- a/server/alarm-service.conf.in
+++ b/server/alarm-service.conf.in
@@ -39,8 +39,8 @@
<check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_get_next_duetime" privilege="http://tizen.org/privilege/alarm.get"/>
<check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_global" privilege="http://tizen.org/privilege/alarm.set"/>
<check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_get_global" privilege="http://tizen.org/privilege/alarm.get"/>
- <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time" privilege="http://tizen.org/privilege/alarm.set"/>
- <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time_with_propagation_delay" privilege="http://tizen.org/privilege/alarm.set"/>
- <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_timezone" privilege="http://tizen.org/privilege/alarm.set"/>
+ <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time" privilege="http://tizen.org/privilege/systemsettings.admin"/>
+ <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_time_with_propagation_delay" privilege="http://tizen.org/privilege/systemsettings.admin"/>
+ <check send_destination="org.tizen.alarm.manager" send_interface="org.tizen.alarm.manager" send_member="alarm_set_timezone" privilege="http://tizen.org/privilege/systemsettings.admin"/>
</policy>
</busconfig>
diff --git a/server/plugin/platform/src/alarm-server-plugin.c b/server/plugin/platform/src/alarm-server-plugin.c
index 8b78767..d41cef3 100644
--- a/server/plugin/platform/src/alarm-server-plugin.c
+++ b/server/plugin/platform/src/alarm-server-plugin.c
@@ -20,14 +20,13 @@
#include <errno.h>
#include <dlog.h>
#include <sys/ioctl.h>
-#include <sys/stat.h>
#include <linux/rtc.h>
#include "plugin.h"
static const char default_rtc[] = "/dev/rtc";
-int gfd = -1;
-int is_psm = -1;
+static int gfd = -1;
+static int is_psm = -1;
EXPORT int CLEAR_WAKEUP_RTC(void)
{
diff --git a/session-agent/CMakeLists.txt b/session-agent/CMakeLists.txt
index a6417af..af47f5e 100644
--- a/session-agent/CMakeLists.txt
+++ b/session-agent/CMakeLists.txt
@@ -4,7 +4,7 @@ SET(AGENT "alarm_session_agent")
SET(SRC agent.c)
-PKG_CHECK_MODULES(agent_pkgs REQUIRED gio-2.0 glib-2.0 dlog bundle libsystemd-daemon)
+PKG_CHECK_MODULES(agent_pkgs REQUIRED gio-2.0 glib-2.0 dlog bundle libsystemd)
FOREACH(flag ${agent_pkgs_CFLAGS_OTHER})
IF(${flag} MATCHES "\\-D+")
ADD_DEFINITIONS(${flag})
diff --git a/session-agent/agent.c b/session-agent/agent.c
index 370c397..07644db 100755
--- a/session-agent/agent.c
+++ b/session-agent/agent.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2016 - 2022 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#include <stdio.h>
#include <stdlib.h>
-#include <stdbool.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
@@ -35,7 +35,7 @@
#define POLLFD_MAX 1
-GMainLoop *mainloop;
+static GMainLoop *__mainloop;
static int _sock_create(const char *path)
{
@@ -126,7 +126,7 @@ static void _send_noti(char *service_name, int alarm_id, int msec)
conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &err);
if (!conn) {
- LOGE("connection error %s", err->message);
+ LOGE("connection error %s", err ? err->message : "unknown");
g_clear_error(&err);
exit(-1);
}
@@ -151,10 +151,10 @@ static void _send_noti(char *service_name, int alarm_id, int msec)
g_object_unref(conn);
}
-static void flush_data(int fd, uint32_t len)
+static void flush_data(int fd, size_t len)
{
- int r;
- uint32_t s;
+ ssize_t r;
+ size_t s;
char buf[4096];
while (len > 0) {
@@ -172,7 +172,7 @@ static gboolean _alarm_agent_main(gint fd, GIOCondition condition,
gpointer user_data)
{
int r;
- int len;
+ size_t len;
int alarm_id;
int msec;
int clifd;
@@ -182,7 +182,7 @@ static gboolean _alarm_agent_main(gint fd, GIOCondition condition,
socklen_t addrlen;
GVariant *gv;
- addrlen = sizeof(sa);
+ addrlen = (socklen_t)sizeof(sa);
clifd = accept(fd, (struct sockaddr *)&sa, &addrlen);
if (clifd == -1) {
LOGE("Accept: %d", errno);
@@ -246,7 +246,7 @@ static gboolean _alarm_agent_main(gint fd, GIOCondition condition,
gboolean _timeout_handler(gpointer user_data)
{
- g_main_loop_quit(mainloop);
+ g_main_loop_quit(__mainloop);
return G_SOURCE_REMOVE;
}
@@ -264,13 +264,13 @@ int main(int argc, char *argv[])
exit(0);
}
- mainloop = g_main_loop_new(NULL, FALSE);
+ __mainloop = g_main_loop_new(NULL, FALSE);
g_unix_fd_add(sock_fd, G_IO_IN, _alarm_agent_main, NULL);
g_timeout_add_seconds(100, _timeout_handler, NULL);
- g_main_loop_run(mainloop);
+ g_main_loop_run(__mainloop);
- g_main_loop_unref(mainloop);
+ g_main_loop_unref(__mainloop);
close(sock_fd);
return 0;
diff --git a/tool/alarmmgr_add_periodic_alarm_withcb.c b/tool/alarmmgr_add_periodic_alarm_withcb.c
index f4240d0..13ec596 100644
--- a/tool/alarmmgr_add_periodic_alarm_withcb.c
+++ b/tool/alarmmgr_add_periodic_alarm_withcb.c
@@ -48,10 +48,6 @@ int main(int argc, char** argv)
GMainLoop *mainloop;
int result;
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
-
mainloop = g_main_loop_new(NULL, FALSE);
result = alarmmgr_init("org.tizen.alarmmgr.periodic");
diff --git a/tool/alarmmgr_add_reference_periodic_alarm_withcb.c b/tool/alarmmgr_add_reference_periodic_alarm_withcb.c
index c66f788..16b4e52 100644
--- a/tool/alarmmgr_add_reference_periodic_alarm_withcb.c
+++ b/tool/alarmmgr_add_reference_periodic_alarm_withcb.c
@@ -45,10 +45,6 @@ int main(int argc, char** argv)
GMainLoop *mainloop;
int result;
-#if !(GLIB_CHECK_VERSION(2, 36, 0))
- g_type_init();
-#endif
-
mainloop = g_main_loop_new(NULL, FALSE);
result = alarmmgr_init("org.tizen.alarmmgr.refperiodic");
diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
index 900a0be..84ce9aa 100755
--- a/unittest/CMakeLists.txt
+++ b/unittest/CMakeLists.txt
@@ -1,15 +1,12 @@
-LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/server)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/mock)
-ENABLE_TESTING()
-
-SET(GTEST_TEST "gtest-alarmmgr")
-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpie")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpie")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpie -std=c++17")
+
+ADD_DEFINITIONS("-DPLUGIN_LIB_DIR=\"${LIB_INSTALL_DIR}\"")
FILE(GLOB GTEST_TEST_SRCS *.cpp)
SET(GTEST_SERVER_SRCS ${CMAKE_SOURCE_DIR}/server/alarm-manager.c
@@ -17,7 +14,7 @@ SET(GTEST_SERVER_SRCS ${CMAKE_SOURCE_DIR}/server/alarm-manager.c
${CMAKE_SOURCE_DIR}/server/alarm-manager-timer.c
${CMAKE_SOURCE_DIR}/server/alarm-manager-schedule.c
${CMAKE_SOURCE_DIR}/server/alarm-manager-dbus.c
- ${CMAKE_SOURCE_DIR}/server/alarm-manager-db.c)
+ ${CMAKE_SOURCE_DIR}/server/alarm-manager-db.cc)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ GTEST_TEST_SRCS)
AUX_SOURCE_DIRECTORY(${CMAKE_SOURCE_DIR}/mock GTEST_TEST_SRCS)
@@ -32,6 +29,4 @@ LINK_DIRECTORIES(${svr_pkgs_LIBRARY_DIRS})
ADD_EXECUTABLE(${GTEST_TEST} ${GTEST_TEST_SRCS} ${GTEST_SERVER_SRCS})
TARGET_LINK_LIBRARIES(${GTEST_TEST} ${gtest_pkgs_LIBRARIES} ${LIBRARY} ${svr_pkgs_LIBRARIES} alarm rt)
-ADD_TEST(${GTEST_TEST} ${GTEST_TEST})
-
-INSTALL(TARGETS ${GTEST_TEST} DESTINATION ${BIN_INSTALL_DIR})
+iNSTALL(TARGETS ${GTEST_TEST} DESTINATION bin)
diff --git a/unittest/alarm_manager_unittest.cpp b/unittest/alarm_manager_unittest.cpp
index 62d3607..f12030b 100755..100644
--- a/unittest/alarm_manager_unittest.cpp
+++ b/unittest/alarm_manager_unittest.cpp
@@ -1,5 +1,5 @@
/*
-_all * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,415 +13,302 @@ _all * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+#include <appsvc.h>
+#include <bundle_cpp.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
-#include <unistd.h>
#include <stdio.h>
+#include <unistd.h>
-#include <appsvc.h>
-
-#include "unittest.h"
#include "alarm.h"
#include "alarm-internal.h"
-#include "mock/gio_fake.h"
-#include "mock/glib_fake.h"
-#include "mock/aul_fake.h"
-#include "mock/notification_fake.h"
-#include "mock/pkgmgr_info_fake.h"
-
-class AlarmServerTest : public ::testing::Test {
- protected:
- void SetUp() override {
- }
-
- void TearDown() override {
- }
-};
-
-int __aul_app_get_pkgid_bypid_for_uid_fake(int pid, char* pkgid, int size,
- uid_t uid)
-{
- return 0;
-}
-
-static GDBusConnection* __g_bus_get_sync_fake(GBusType type, GCancellable *cancel,
- GError **error)
-{
- GDBusConnection *con = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
- return con;
-}
-
-static guint __g_dbus_connection_signal_subscribe_fake(GDBusConnection *con, const gchar* sender,
- const gchar* interface, const gchar* member, const gchar* object,
- const gchar* arg, GDBusSignalFlags flags, GDBusSignalCallback callback,
- gpointer user_data, GDestroyNotify noti)
-{
- return 1;
-}
-
-static GDBusNodeInfo* __g_dbus_node_info_new_for_xml_fake(const gchar* xml, GError **error)
-{
- GDBusNodeInfo *info = (GDBusNodeInfo*)g_object_new(G_TYPE_OBJECT, NULL);
- return info;
-}
+#include "aul_mock.h"
+#include "dbus_mock.h"
+#include "pkgmgr_info_mock.h"
+#include "test_fixture.h"
+#include "tzplatform_config_mock.h"
+#include "unittest.h"
-static guint __g_bus_own_name_on_connection_fake(GDBusConnection *con, const gchar* name,
- GBusNameOwnerFlags flags, GBusNameAcquiredCallback bus_name_acquired,
- GBusNameLostCallback lost, gpointer user_data, GDestroyNotify noti)
-{
- return 1;
-}
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::Invoke;
-gpointer __g_hash_table_lookup_fake(GHashTable *table, gconstpointer p)
-{
- return NULL;
-}
-
-int __pkgmgrinfo_pkginfo_get_usr_pkginfo_fake(const char *pkgid, uid_t uid,
- pkgmgrinfo_pkginfo_h *handle)
-{
- return 0;
-}
+namespace {
-int __pkgmgrinfo_pkginfo_get_api_version_fake(
- pkgmgrinfo_pkginfo_h handle, char **version)
-{
- return 0;
+GDBusConnection* __g_bus_get_sync_fake(GBusType type, GCancellable* cancel,
+ GError** error) {
+ GDBusConnection* con = (GDBusConnection*)g_object_new(G_TYPE_OBJECT,
+ nullptr);
+ return con;
}
-int __pkgmgrinfo_pkginfo_get_is_global_fake(
- pkgmgrinfo_pkginfo_h handle, bool *is_global)
-{
- *is_global = true;
- return 0;
+void __g_dbus_node_info_unref_fake(GDBusNodeInfo* info) {
+ if (info && info->interfaces) {
+ free(info->interfaces);
+ free(info);
+ }
+ info = nullptr;
+ return;
}
-int __pkgmgrinfo_appinfo_get_usr_appinfo_fake(const char *pkgid, uid_t uid,
- pkgmgrinfo_pkginfo_h *handle)
-{
- return 0;
-}
+GDBusNodeInfo* __g_dbus_node_info_new_for_xml_fake(const gchar* xml,
+ GError** error) {
+ GDBusNodeInfo* info = (GDBusNodeInfo*)malloc(sizeof(GDBusNodeInfo));
+ if (!info)
+ return nullptr;
-int __pkgmgrinfo_appinfo_get_component_type_fake(pkgmgrinfo_appinfo_h handle, char **type)
-{
- return 0;
-}
+ GDBusInterfaceInfo** interface =
+ (GDBusInterfaceInfo**)malloc(sizeof(GDBusInterfaceInfo*));
+ if (!interface) {
+ free(info);
+ return nullptr;
+ }
-int __pkgmgrinfo_pkginfo_destroy_fake(pkgmgrinfo_pkginfo_h handle)
-{
- return 0;
-}
+ info->ref_count = 10;
+ info->path = nullptr;
+ info->interfaces = interface;
+ info->nodes = nullptr;
+ info->annotations = nullptr;
-int __pkgmgrinfo_appinfo_destroy_fake(pkgmgrinfo_appinfo_h handle)
-{
- return 0;
+ return info;
}
-bundle *__bundle_decode_fake(const bundle_raw* raw, const int len)
-{
- bundle *b;
+class Mocks : virtual public ::testing::NiceMock<AulMock>,
+ virtual public ::testing::NiceMock<DbusMock>,
+ virtual public ::testing::NiceMock<PkgmgrInfoMock>,
+ virtual public ::testing::NiceMock<TzplatformConfigMock> {};
+} // namespace
- b = bundle_create();
- bundle_add_str(b, "__APP_SVC_PKG_NAME__", "org.tizen.alarm");
+class AlarmServerTest : public TestFixture {
+ public:
+ AlarmServerTest() : TestFixture(std::make_unique<::Mocks>()) {}
- return b;
-}
-
-TEST_F(AlarmServerTest, alarm_manager_alarm_create_p)
-{
- int ret;
- int alarm_id;
- GVariant *param = NULL;
- gint64 reserved = 1;
+ virtual void SetUp() {}
+ virtual void TearDown() {}
+};
- g_hash_table_lookup_fake.custom_fake = __g_hash_table_lookup_fake;
- g_bus_get_sync_fake.custom_fake = __g_bus_get_sync_fake;
- g_dbus_connection_signal_subscribe_fake.custom_fake = __g_dbus_connection_signal_subscribe_fake;
- g_dbus_node_info_new_for_xml_fake.custom_fake = __g_dbus_node_info_new_for_xml_fake;
- g_bus_own_name_on_connection_fake.custom_fake = __g_bus_own_name_on_connection_fake;
+TEST_F(AlarmServerTest, alarm_manager_alarm_create_p) {
+ EXPECT_CALL(GetMock<TzplatformConfigMock>(), tzplatform_mkpath(_, _))
+ .WillRepeatedly(Invoke([](enum tzplatform_variable id,
+ const char* path) {
+ return ".alarm_test.db";
+ }));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_signal_subscribe(_, _, _,
+ _, _, _, _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
_alarm_initialize();
- param = g_variant_new("(ssiiiiiiiiiiiiixss)",
+ int alarm_id = 0;
+ gint64 reserved = 1;
+ GVariant* param = g_variant_new("(ssiiiiiiiiiiiiixss)",
"app_service_name", "app_service_name_mod",
2019, 11, 1, 12, 59, 59, 400, 2020, 12, 29, 3, 1, 1, reserved,
"reserved_service_name", "reserved_service_name_mod");
-
- ret = alarm_manager_alarm_create(param, 5001, 1, &alarm_id);
+ int ret = alarm_manager_alarm_create(param, 5001, getpid(), "sender",
+ &alarm_id);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_create_appsvc_p)
-{
- int ret;
- int alarm_id;
- GVariant *param = NULL;
- bundle *b = NULL;
- bundle_raw *b_data = NULL;
- int len = 0;
- gint64 reserved = 1;
-
- aul_app_get_pkgid_bypid_for_uid_fake.custom_fake = __aul_app_get_pkgid_bypid_for_uid_fake;
- g_hash_table_lookup_fake.custom_fake = __g_hash_table_lookup_fake;
-
- pkgmgrinfo_pkginfo_get_usr_pkginfo_fake.custom_fake =
- __pkgmgrinfo_pkginfo_get_usr_pkginfo_fake;
- pkgmgrinfo_pkginfo_get_api_version_fake.custom_fake =
- __pkgmgrinfo_pkginfo_get_api_version_fake;
-
- pkgmgrinfo_appinfo_get_usr_appinfo_fake.custom_fake =
- __pkgmgrinfo_appinfo_get_usr_appinfo_fake;
+TEST_F(AlarmServerTest, alarm_manager_alarm_create_appsvc_p) {
+ EXPECT_CALL(GetMock<PkgmgrInfoMock>(),
+ pkgmgrinfo_pkginfo_get_api_version(_, _))
+ .WillRepeatedly(Invoke([](pkgmgrinfo_pkginfo_h handle,
+ char** version) -> int {
+ static char ver[] = "2.0";
+ *version = ver;
+ return 0;
+ }));
+ EXPECT_CALL(GetMock<PkgmgrInfoMock>(), pkgmgrinfo_appinfo_get_pkgid(_, _))
+ .WillRepeatedly(Invoke([](pkgmgrinfo_appinfo_h handle,
+ char **pkgid) -> int {
+ static char sPkgid[] = "org.tizen.alarm_unitest";
+ *pkgid = sPkgid;
+ return 0;
+ }));
- pkgmgrinfo_appinfo_get_component_type_fake.custom_fake =
- __pkgmgrinfo_appinfo_get_component_type_fake;
- pkgmgrinfo_appinfo_destroy_appinfo_fake.custom_fake =
- __pkgmgrinfo_appinfo_destroy_fake;
-
- //bundle_decode_fake.custom_fake = __bundle_decode_fake;
-
- b = bundle_create();
- bundle_add_str(b, "__APP_SVC_PKG_NAME__", "org.tizen.alarm");
- bundle_encode(b, &b_data, &len);
-
- param = g_variant_new("(iiiiiiiiiixiixs)",
+ gint64 reserved = 1;
+ tizen_base::Bundle b = { {"__APP_SVC_PKG_NAME__", "org.tizen.alarm" } };
+ auto raw = b.ToRaw();
+ GVariant* param = g_variant_new("(iiiiiiiiiixiixs)",
2019, 11, 1, 12, 59, 59,
2020, 12, 29,
1, reserved, 1, 0, reserved,
- (char *)b_data);
- ret = alarm_manager_alarm_create_appsvc(param, 5001, 1, &alarm_id);
- bundle_free(b);
- if (b_data)
- free(b_data);
+ reinterpret_cast<char*>(raw.first.get()));
+ int alarm_id = 0;
+ int ret = alarm_manager_alarm_create_appsvc(param, 5001, getpid(), "sender",
+ &alarm_id);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_create_periodic_p)
-{
- int ret;
- int alarm_id;
- GVariant *param = NULL;
-
- param = g_variant_new("(ssiii)",
+TEST_F(AlarmServerTest, alarm_manager_alarm_create_periodic_p) {
+ GVariant* param = g_variant_new("(ssiii)",
"app_service_name", "app_service_name_mod", 1, 0, 1);
- ret = alarm_manager_alarm_create_periodic(param, 5001, 1, &alarm_id);
+ int alarm_id = 0;
+ int ret = alarm_manager_alarm_create_periodic(param, 5001, getpid(), "sender",
+ &alarm_id);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_create_noti_p)
-{
- int ret;
+TEST_F(AlarmServerTest, alarm_manager_alarm_create_noti_p) {
int alarm_id;
- GVariant *param = NULL;
gint64 reserved = 1;
-
- param = g_variant_new("(iiiiiiiiiixiixs)",
+ GVariant* param = g_variant_new("(iiiiiiiiiixiixs)",
2019, 11, 1, 12, 59, 59,
2020, 12, 29, 3,
- 0, reserved, 1, 0, reserved,
+ reserved, 1, 0, reserved,
"bundle");
-
-
- ret = alarm_manager_alarm_create_noti(param, 5001, 1, &alarm_id);
+ int ret = alarm_manager_alarm_create_noti(param, 5001, getpid(), "sender",
+ &alarm_id);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_delete_p)
-{
- int ret;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 1);
-
- ret = alarm_manager_alarm_delete(param, 5001, 1);
+TEST_F(AlarmServerTest, alarm_manager_alarm_delete_p) {
+ GVariant* param = g_variant_new("(i)", 1);
+ int ret = alarm_manager_alarm_delete(param, 5001, getpid(), "sender");
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_delete_all_p)
-{
- int ret;
- GVariant *param = NULL;
-
- ret = alarm_manager_alarm_delete_all(param, 5001, 1);
+TEST_F(AlarmServerTest, alarm_manager_alarm_delete_all_p) {
+ GVariant* param = nullptr;
+ int ret = alarm_manager_alarm_delete_all(param, 5001, getpid(), "sender");
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_update_n)
-{
- int ret;
+TEST_F(AlarmServerTest, alarm_manager_alarm_update_n) {
int alarm_id = 1;
- GVariant *param = NULL;
gint64 reserved = 1;
-
- param = g_variant_new("(iiiiiiiiiixiixi)",
+ GVariant* param = g_variant_new("(iiiiiiiiiixiixi)",
alarm_id,
2019, 11, 1, 12, 59, 59,
2020, 12, 29, 0,
reserved, 0, 0, reserved, 0);
-
- ret = alarm_manager_alarm_update(param, 5001, 1);
+ int ret = alarm_manager_alarm_update(param, 5001, getpid(), "sender");
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_number_of_ids_p)
-{
- int ret;
- int num_of_ids;
-
- ret = alarm_manager_alarm_get_number_of_ids(5001, 1, &num_of_ids);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_number_of_ids_p) {
+ int num_of_ids = 0;
+ int ret = alarm_manager_alarm_get_number_of_ids(5001, getpid(), "sender",
+ &num_of_ids);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_list_of_ids_p)
-{
- int ret;
- int num_of_alarm;
- GVariant *alarm_array = NULL;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 10);
-
- ret = alarm_manager_alarm_get_list_of_ids(param, 5001, 1, &alarm_array,
- &num_of_alarm);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_list_of_ids_p) {
+ int num_of_alarm = 0;
+ GVariantBuilder *alarm_array = nullptr;
+ GVariant* param = g_variant_new("(i)", 10);
+ int ret = alarm_manager_alarm_get_list_of_ids(param, 5001, getpid(), "sender",
+ alarm_array, &num_of_alarm);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_appsvc_info_n)
-{
- int ret;
- gchar *b_data = NULL;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 10);
-
- ret = alarm_manager_alarm_get_appsvc_info(param, 5001, &b_data);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_appsvc_info_n) {
+ gchar *b_data = nullptr;
+ GVariant* param = g_variant_new("(i)", 10);
+ int ret = alarm_manager_alarm_get_appsvc_info(param, 5001, &b_data);
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
+ if (b_data)
+ free(b_data);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_noti_info_n)
-{
- int ret;
- gchar *b_data = NULL;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 10);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_noti_info_n) {
+ gchar *b_data = nullptr;
+ GVariant* param = g_variant_new("(i)", 10);
- ret = alarm_manager_alarm_get_noti_info(param, 5001, &b_data);
+ int ret = alarm_manager_alarm_get_noti_info(param, 5001, &b_data);
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
+ if (b_data)
+ free(b_data);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_info_n)
-{
- int ret;
- alarm_info_t info;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 10);
-
- ret = alarm_manager_alarm_get_info(param, 5001, &info);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_info_n) {
+ base_info_t info;
+ GVariant* param = g_variant_new("(i)", 10);
+ int ret = alarm_manager_alarm_get_info(param, 5001, &info);
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_next_duetime_n)
-{
- int ret;
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_next_duetime_n) {
time_t duetime;
- GVariant *param = NULL;
-
- param = g_variant_new("(i)", 10);
-
- ret = alarm_manager_alarm_get_next_duetime(param, 5001, &duetime);
+ GVariant* param = g_variant_new("(i)", 10);
+ int ret = alarm_manager_alarm_get_next_duetime(param, 5001, &duetime);
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_all_info_p)
-{
- int ret;
- char *db_path;
-
- ret = alarm_manager_alarm_get_all_info(5001, &db_path);
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_all_info_p) {
+ char* db_path = nullptr;
+ int ret = alarm_manager_alarm_get_all_info(5001, &db_path);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
+ if (db_path)
+ free(db_path);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_set_rtc_time_n)
-{
- int ret;
- GVariant *param = NULL;
-
- param = g_variant_new("(iiiiii)", 2019, 11, 1, 12, 12, 12);
-
- ret = alarm_manager_alarm_set_rtc_time(param);
+TEST_F(AlarmServerTest, alarm_manager_alarm_set_rtc_time_n) {
+ GVariant* param = g_variant_new("(iiiiii)", 2019, 11, 1, 12, 12, 12);
+ int ret = alarm_manager_alarm_set_rtc_time(param);
EXPECT_EQ(ERR_ALARM_SYSTEM_FAIL, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_set_time_n)
-{
- int ret;
- GVariant *param = NULL;
-
- param = g_variant_new("(x)", 20190012);
-
- ret = alarm_manager_alarm_set_time(param, 1);
+TEST_F(AlarmServerTest, alarm_manager_alarm_set_time_n) {
+ GVariant* param = g_variant_new("(x)", 20190012);
+ int ret = alarm_manager_alarm_set_time(param, getpid(), "sender");
EXPECT_EQ(ERR_ALARM_SYSTEM_FAIL, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_set_time_with_propagation_delay_n)
-{
- int ret;
- GVariant *param = NULL;
-
- param = g_variant_new("(xxxx)", 20190012, 2949294, 292929, 29299292);
-
- ret = alarm_manager_alarm_set_time_with_propagation_delay(param, 1);
+TEST_F(AlarmServerTest, alarm_manager_alarm_set_time_with_propagation_delay_n) {
+ GVariant* param = g_variant_new("(xxxx)", 20190012, 2949294, 292929,
+ 29299292);
+ int ret = alarm_manager_alarm_set_time_with_propagation_delay(param, getpid(),
+ "sender");
EXPECT_EQ(ERR_ALARM_SYSTEM_FAIL, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_set_timezone_n)
-{
- int ret;
- GVariant *param = NULL;
-
- param = g_variant_new("(s)", "/usr/share/zoneinfo/Asia/Seoul");
-
- ret = alarm_manager_alarm_set_timezone(param);
+TEST_F(AlarmServerTest, alarm_manager_alarm_set_timezone_n) {
+ GVariant* param = g_variant_new("(s)", "/usr/share/zoneinfo/Asia/Seoul");
+ int ret = alarm_manager_alarm_set_timezone(param);
EXPECT_EQ(ERR_ALARM_SYSTEM_FAIL, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_set_global_n)
-{
- int ret;
- GVariant *param = NULL;
- GVariant *param2 = NULL;
+TEST_F(AlarmServerTest, alarm_manager_alarm_set_global) {
+ EXPECT_CALL(GetMock<PkgmgrInfoMock>(), pkgmgrinfo_pkginfo_is_global(_, _))
+ .WillRepeatedly(
+ Invoke([](pkgmgrinfo_pkginfo_h, bool *is_global) -> int {
+ *is_global = true;
+ return 0;
+ }));
+
gint64 reserved = 1;
int alarm_id;
-
- g_hash_table_lookup_fake.custom_fake = __g_hash_table_lookup_fake;
- pkgmgrinfo_pkginfo_get_usr_pkginfo_fake.custom_fake =
- __pkgmgrinfo_pkginfo_get_usr_pkginfo_fake;
- pkgmgrinfo_pkginfo_is_global_fake.custom_fake =
- __pkgmgrinfo_pkginfo_get_is_global_fake;
- pkgmgrinfo_pkginfo_destroy_pkginfo_fake.custom_fake =
- __pkgmgrinfo_pkginfo_destroy_fake;
-
- param = g_variant_new("(ssiiiiiiiiiiiiixss)",
+ GVariant* param = g_variant_new("(ssiiiiiiiiiiiiixss)",
"app_service_name", "app_service_name_mod",
2019, 11, 1, 12, 59, 59, 400, 2020, 12, 29, 3, 1, 1, reserved,
"reserved_service_name", "reserved_service_name_mod");
-
- ret = alarm_manager_alarm_create(param, 5001, 1, &alarm_id);
- param2 = g_variant_new("(ib)", alarm_id, true);
-
+ int ret = alarm_manager_alarm_create(param, 5001, getpid(), "sender", &alarm_id);
+ GVariant* param2 = g_variant_new("(ib)", alarm_id, true);
ret = alarm_manager_alarm_set_global(param2, 5001);
- EXPECT_EQ(ERR_ALARM_SYSTEM_FAIL, ret);
+ EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmServerTest, alarm_manager_alarm_get_global_n)
-{
- int ret;
- GVariant *param = NULL;
+TEST_F(AlarmServerTest, alarm_manager_alarm_get_global_n) {
gboolean global;
-
- param = g_variant_new("(i)", 1);
-
- ret = alarm_manager_alarm_get_global(param, &global);
+ GVariant* param = g_variant_new("(i)", 1);
+ int ret = alarm_manager_alarm_get_global(param, &global);
EXPECT_EQ(ERR_ALARM_INVALID_ID, ret);
}
+
diff --git a/unittest/alarmlib_unittest.cpp b/unittest/alarmlib_unittest.cpp
index dc01df1..66b9737 100755
--- a/unittest/alarmlib_unittest.cpp
+++ b/unittest/alarmlib_unittest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,160 +13,158 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+#include <appsvc.h>
+#include <bundle_cpp.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
-#include <unistd.h>
#include <stdio.h>
+#include <unistd.h>
-#include <appsvc.h>
-
-#include "unittest.h"
#include "alarm.h"
-#include "mock/gio_fake.h"
-#include "mock/glib_fake.h"
-#include "mock/notification_fake.h"
-
-void __g_dbus_node_info_unref_fake(GDBusNodeInfo *info)
-{
- free(info->interfaces);
- free(info);
- info = NULL;
+#include "aul_mock.h"
+#include "dbus_mock.h"
+#include "glib_mock.h"
+#include "notification_mock.h"
+#include "pkgmgr_info_mock.h"
+#include "test_fixture.h"
+#include "unittest.h"
+
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::Invoke;
+
+namespace {
+
+void __g_dbus_node_info_unref_fake(GDBusNodeInfo *info) {
+ if (info && info->interfaces) {
+ free(info->interfaces);
+ free(info);
+ }
+ info = nullptr;
return;
}
GDBusConnection* __g_bus_get_sync_fake(GBusType type,
- GCancellable *cancellable, GError **error)
-{
- GDBusConnection *con = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
+ GCancellable* cancellable, GError** error) {
+ GDBusConnection* con = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, nullptr);
return con;
}
-GDBusProxy* __g_dbus_proxy_new_sync_fake(GDBusConnection *con,
- GDBusProxyFlags flag, GDBusInterfaceInfo *info, const gchar *name,
- const gchar *path, const gchar *interface, GCancellable *cancellable,
- GError **error)
-{
- GDBusProxy *proxy = (GDBusProxy*)g_object_new(G_TYPE_OBJECT, NULL);
+GDBusProxy* __g_dbus_proxy_new_sync_fake(GDBusConnection* con,
+ GDBusProxyFlags flag, GDBusInterfaceInfo* info, const gchar* name,
+ const gchar* path, const gchar* interface, GCancellable* cancellable,
+ GError** error) {
+ GDBusProxy *proxy = (GDBusProxy*)g_object_new(G_TYPE_OBJECT, nullptr);
return proxy;
}
-GDBusNodeInfo* __g_dbus_node_info_new_for_xml_fake(const gchar *xml, GError **error)
-{
- GDBusNodeInfo *info = (GDBusNodeInfo*)malloc(sizeof(GDBusNodeInfo));
+GDBusNodeInfo* __g_dbus_node_info_new_for_xml_fake(const gchar* xml, GError** error) {
+ GDBusNodeInfo* info = (GDBusNodeInfo*)malloc(sizeof(GDBusNodeInfo));
+ if (!info)
+ return nullptr;
+
+ GDBusInterfaceInfo **interface =
+ (GDBusInterfaceInfo**)malloc(sizeof(GDBusInterfaceInfo*));
+ if (!interface) {
+ free(info);
+ return nullptr;
+ }
info->ref_count = 10;
- info->path = NULL;
- info->interfaces = (GDBusInterfaceInfo**)malloc(sizeof(GDBusInterfaceInfo));
- info->nodes = NULL;
- info->annotations = NULL;
+ info->path = nullptr;
+ info->interfaces = interface;
+ info->nodes = nullptr;
+ info->annotations = nullptr;
return info;
}
-guint __g_dbus_connection_register_object_fake(GDBusConnection *con,
- const gchar *path, GDBusInterfaceInfo *info,
- const GDBusInterfaceVTable *table, gpointer user_data,
- GDestroyNotify user_data_free_func, GError **error)
-{
- return 1;
-}
-
-gboolean __g_dbus_connection_unregister_object_fake(GDBusConnection *con,
- guint id)
-{
- return true;
-}
+GVariant* __g_dbus_proxy_call_sync_fake_negative(GDBusProxy* proxy, const gchar* method,
+ GVariant* param, GDBusCallFlags flag, gint timeout, GCancellable* cancellable,
+ GError** error) {
+ GQuark quark = g_quark_from_static_string("test");
+ *error = g_error_new(quark, G_DBUS_ERROR_ACCESS_DENIED, "Error");
-guint __g_bus_own_name_on_connection_fake(GDBusConnection *con, const gchar *name,
- GBusNameOwnerFlags flag, GBusNameAcquiredCallback acquired_cb,
- GBusNameLostCallback lost_cb, gpointer user_data,
- GDestroyNotify user_data_free_func)
-{
- return 1;
+ return nullptr;
}
-GVariant* __g_dbus_proxy_call_sync_fake_negative(GDBusProxy *proxy, const gchar* method,
- GVariant *param, GDBusCallFlags flag, gint timeout, GCancellable *cancellable,
- GError **error)
-{
- GQuark quark = g_quark_from_static_string("test");
- *error = g_error_new(quark, G_DBUS_ERROR_ACCESS_DENIED, "Error");
+GVariant* __notification_ipc_make_gvariant_from_noti_fake(notification_h,
+ bool translate) {
+ GVariant* noti_gv = g_variant_new_string("test");
- return NULL;
+ return noti_gv;
}
-void __g_dbus_proxy_call_fake(GDBusProxy *proxy, const gchar* method,
- GVariant *param, GDBusCallFlags flag, gint timeout, GCancellable *cancellable,
- GAsyncReadyCallback cb, gpointer user_data)
-{
- return;
+int __pkgmgrinfo_pkginfo_get_api_version_fake(pkgmgrinfo_pkginfo_h handle,
+ char** version) {
+ *version = strdup("3.0");
+ return 0;
}
-gsize __g_variant_get_size_fake(GVariant *var)
-{
- int size = 1;
- return (gsize)size;
+int __handler(alarm_id_t alarm_id, void* user_param) {
+ return 0;
}
-GVariant* __notification_ipc_make_gvariant_from_noti_fake(notification_h,
- bool translate)
-{
- GVariant *noti_gv = NULL;
-
- noti_gv = g_variant_new_string("test");
-
- return noti_gv;
-}
+class Mocks : virtual public ::testing::NiceMock<AulMock>,
+ virtual public ::testing::NiceMock<DbusMock>,
+ virtual public ::testing::NiceMock<GlibMock>,
+ virtual public ::testing::NiceMock<NotificationMock>,
+ virtual public ::testing::NiceMock<PkgmgrInfoMock> {};
-class AlarmLibTest : public ::testing::Test {
- protected:
- void SetUp() override {
- alarm = alarmmgr_create_alarm();
+} // namesapce
- g_bus_get_sync_fake.custom_fake = __g_bus_get_sync_fake;
- g_dbus_proxy_new_sync_fake.custom_fake = __g_dbus_proxy_new_sync_fake;
- g_dbus_node_info_unref_fake.custom_fake = __g_dbus_node_info_unref_fake;
- }
- void TearDown() override {
- alarmmgr_free_alarm(alarm);
- }
+class AlarmLibTest : public TestFixture {
+ public:
+ AlarmLibTest() : TestFixture(std::make_unique<::Mocks>()) {}
+ void SetUp() override {
+ alarm_ = alarmmgr_create_alarm();
+ }
+ void TearDown() override {
+ alarmmgr_free_alarm(alarm_);
+ }
- alarm_entry_t *alarm;
+ protected:
+ alarm_entry_t* alarm_ = nullptr;
};
-TEST_F(AlarmLibTest, alarmmgr_init_p)
-{
- int ret;
- char testapp[256] = "org.tizen.alarmmgrtestapp";
-
- g_dbus_node_info_new_for_xml_fake.custom_fake = __g_dbus_node_info_new_for_xml_fake;
- g_dbus_connection_register_object_fake.custom_fake = __g_dbus_connection_register_object_fake;
- g_dbus_connection_unregister_object_fake.custom_fake = __g_dbus_connection_unregister_object_fake;
- g_bus_own_name_on_connection_fake.custom_fake = __g_bus_own_name_on_connection_fake;
-
- ret = alarmmgr_init(testapp);
+TEST_F(AlarmLibTest, alarmmgr_init_p) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
+
+ int ret = alarmmgr_init("org.tizen.alarmmgrtestapp");
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
alarmmgr_fini();
}
-static int __handler(alarm_id_t alarm_id, void *user_param)
-{
- return 0;
-}
-
-TEST_F(AlarmLibTest, alarmmgr_set_cb_p)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_cb_p) {
+ int ret = alarmmgr_set_cb([](alarm_id_t alarm_id, void *user_param) -> int {
+ return 0;
+ }, nullptr);
- ret = alarmmgr_set_cb(__handler, NULL);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_get_time_p)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_get_time_p) {
alarm_date_t date;
alarm_date_t get_date;
@@ -177,464 +175,594 @@ TEST_F(AlarmLibTest, alarmmgr_set_get_time_p)
date.min = 1;
date.sec = 1;
- ret = alarmmgr_set_time(alarm, date);
+ int ret = alarmmgr_set_time(alarm_, date);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_get_time(alarm, &get_date);
+ ret = alarmmgr_get_time(alarm_, &get_date);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
EXPECT_EQ(date.year, get_date.year);
}
-TEST_F(AlarmLibTest, alarmmgr_set_get_repeat_mode_p)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_get_repeat_mode_p) {
alarm_repeat_mode_t get_mode;
int interval;
- ret = alarmmgr_set_repeat_mode(alarm, ALARM_REPEAT_MODE_REPEAT, 1000);
+ int ret = alarmmgr_set_repeat_mode(alarm_, ALARM_REPEAT_MODE_REPEAT, 1000);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_get_repeat_mode(alarm, &get_mode, &interval);
+ ret = alarmmgr_get_repeat_mode(alarm_, &get_mode, &interval);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
EXPECT_EQ(ALARM_REPEAT_MODE_REPEAT, get_mode);
}
-TEST_F(AlarmLibTest, alarmmgr_set_get_type_p)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_get_type_p) {
int get_type;
- ret = alarmmgr_set_type(alarm, ALARM_TYPE_VOLATILE);
+ int ret = alarmmgr_set_type(alarm_, ALARM_TYPE_VOLATILE);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_get_type(alarm, &get_type);
+ ret = alarmmgr_get_type(alarm_, &get_type);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
EXPECT_EQ(ALARM_TYPE_VOLATILE, get_type);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_appsvc_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- bundle *b;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- b = bundle_create();
- ASSERT_NE(b, nullptr);
-
- ret = appsvc_set_pkgname(b,"org.tizen.calendar");
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_appsvc_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<PkgmgrInfoMock>(),
+ pkgmgrinfo_pkginfo_get_api_version(_, _))
+ .WillRepeatedly(Invoke(__pkgmgrinfo_pkginfo_get_api_version_fake));
+
+ tizen_base::Bundle b;
+ int ret = appsvc_set_pkgname(b.GetHandle(),"org.tizen.setting");
EXPECT_EQ(0, ret);
- ret = appsvc_set_operation(b, APPSVC_OPERATION_DEFAULT);
+ ret = appsvc_set_operation(b.GetHandle(), APPSVC_OPERATION_DEFAULT);
EXPECT_EQ(0, ret);
- ret = alarmmgr_add_alarm_appsvc(ALARM_TYPE_DEFAULT, 100, 0, (void *)b,
- &alarm_id);
+ alarm_id_t alarm_id;
+ ret = alarmmgr_add_alarm_appsvc(ALARM_TYPE_DEFAULT, 100, 0,
+ b.GetHandle(), &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
- bundle_free(b);
}
-TEST_F(AlarmLibTest, alarmmgr_get_alarm_appsvc_n)
-{
- int ret;
- alarm_id_t alarm_id = 10;
+TEST_F(AlarmLibTest, alarmmgr_get_alarm_appsvc_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- bundle *get_b;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- get_b = (bundle *)alarmmgr_get_alarm_appsvc_info(alarm_id, &ret);
+ int ret = -1;
+ alarm_id_t alarm_id = 10;
+ bundle* get_b = static_cast<bundle*>(alarmmgr_get_alarm_appsvc_info(alarm_id,
+ &ret));
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
-
bundle_free(get_b);
}
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_noti_n) {
+ EXPECT_CALL(GetMock<GlibMock>(), g_variant_get_size(_))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<NotificationMock>(),
+ notification_ipc_make_gvariant_from_noti(_, _))
+ .WillRepeatedly(Invoke(__notification_ipc_make_gvariant_from_noti_fake));
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_noti_n)
-{
- int ret;
alarm_id_t alarm_id;
notification_h noti = nullptr;
-
- g_variant_get_size_fake.custom_fake = __g_variant_get_size_fake;
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
- notification_ipc_make_gvariant_from_noti_fake.custom_fake = __notification_ipc_make_gvariant_from_noti_fake;
-
- ret = alarmmgr_add_alarm_noti(ALARM_TYPE_DEFAULT, 100, 0, noti,
+ int ret = alarmmgr_add_alarm_noti(ALARM_TYPE_DEFAULT, 100, 0, noti,
&alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
+TEST_F(AlarmLibTest, alarmmgr_get_alarm_noti_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
-TEST_F(AlarmLibTest, alarmmgr_get_alarm_noti_n)
-{
- int ret;
- notification_h get_noti;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_get_alarm_noti_info(1, &get_noti);
+ notification_h get_noti = nullptr;
+ int ret = alarmmgr_get_alarm_noti_info(1, &get_noti);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_rtc_time_n)
-{
- int ret;
- alarm_date_t date = {2020, 4, 5, 10, 10, 0};
+TEST_F(AlarmLibTest, alarmmgr_set_rtc_time_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_set_rtc_time(&date);
+ alarm_date_t date = {2020, 4, 5, 10, 10, 0};
+ int ret = alarmmgr_set_rtc_time(&date);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_with_localtime_n)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_with_localtime_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
+
alarm_id_t alarm_id;
alarm_date_t test_time;
- char testapp[256] = "org.tizen.alarmmgrtestapp";
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
test_time.year = 2022;
test_time.month = 1;
test_time.day = 1;
-
test_time.hour = 1;
test_time.min = 1;
test_time.sec = 5;
- ret = alarmmgr_init(testapp);
+ alarmmgr_fini();
+ int ret = alarmmgr_init("org.tizen.alarmmgrtestapp");
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_set_time(alarm,test_time);
+ ret = alarmmgr_set_time(alarm_,test_time);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_set_type(alarm, ALARM_TYPE_DEFAULT);
+ ret = alarmmgr_set_type(alarm_, ALARM_TYPE_DEFAULT);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_set_repeat_mode(alarm, ALARM_REPEAT_MODE_REPEAT, 1000);
+ ret = alarmmgr_set_repeat_mode(alarm_, ALARM_REPEAT_MODE_REPEAT, 1000);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_add_alarm_with_localtime(alarm, testapp, &alarm_id);
+ ret = alarmmgr_add_alarm_with_localtime(alarm_, "org.tizen.alarmmgrtestapp",
+ &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
alarmmgr_fini();
}
-TEST_F(AlarmLibTest, alarmmgr_get_info_n)
-{
- int ret;
- alarm_entry_t get_alarm;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_get_info_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_get_info(1, &get_alarm);
+ alarm_entry_t get_alarm;
+ int ret = alarmmgr_get_info(1, &get_alarm);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_appsvc_with_localtime_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- bundle *b;
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_appsvc_with_localtime_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- alarm_date_t test_time;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- b = bundle_create();
- ASSERT_NE(b, nullptr);
-
- ret = appsvc_set_pkgname(b,"org.tizen.calendar");
+ tizen_base::Bundle b;
+ int ret = appsvc_set_pkgname(b.GetHandle(),"org.tizen.calendar");
EXPECT_EQ(0, ret);
- ret = appsvc_set_operation(b, APPSVC_OPERATION_DEFAULT);
+ ret = appsvc_set_operation(b.GetHandle(), APPSVC_OPERATION_DEFAULT);
EXPECT_EQ(0, ret);
+ alarm_id_t alarm_id;
+ alarm_date_t test_time;
+
test_time.year = 2022;
test_time.month = 1;
test_time.day = 1;
-
test_time.hour = 1;
test_time.min = 1;
test_time.sec = 5;
- ret = alarmmgr_set_time(alarm,test_time);
+ ret = alarmmgr_set_time(alarm_,test_time);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_set_type(alarm, ALARM_TYPE_DEFAULT);
+ ret = alarmmgr_set_type(alarm_, ALARM_TYPE_DEFAULT);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_add_alarm_appsvc_with_localtime(alarm, (void *)b,
+ ret = alarmmgr_add_alarm_appsvc_with_localtime(alarm_, b.GetHandle(),
&alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
-
- bundle_free(b);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_noti_with_localtime_n)
-{
- int ret;
- alarm_id_t alarm_id;
- notification_h noti = nullptr;
-
- notification_ipc_make_gvariant_from_noti_fake.custom_fake = __notification_ipc_make_gvariant_from_noti_fake;
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_set_repeat_mode(alarm, ALARM_REPEAT_MODE_REPEAT, 1000);
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_noti_with_localtime_n) {
+ EXPECT_CALL(GetMock<GlibMock>(), g_variant_get_size(_))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<NotificationMock>(),
+ notification_ipc_make_gvariant_from_noti(_, _))
+ .WillRepeatedly(Invoke(__notification_ipc_make_gvariant_from_noti_fake));
+
+ int ret = alarmmgr_set_repeat_mode(alarm_, ALARM_REPEAT_MODE_REPEAT, 1000);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_add_alarm_noti_with_localtime(alarm, noti, &alarm_id);
+ alarm_id_t alarm_id;
+ notification_h noti = nullptr;
+ ret = alarmmgr_add_alarm_noti_with_localtime(alarm_, noti, &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_set_repeat_mode(alarm, ALARM_REPEAT_MODE_REPEAT, 1000);
+ int ret = alarmmgr_set_repeat_mode(alarm_, ALARM_REPEAT_MODE_REPEAT, 1000);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
+ alarm_id_t alarm_id;
ret = alarmmgr_add_alarm(ALARM_TYPE_VOLATILE, 100, 1000, "gtest-alarmmgr",
&alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_add_alarm_precision_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_add_alarm_precision_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_add_alarm_precision(ALARM_TYPE_VOLATILE, 100, 1000,
+ alarm_id_t alarm_id;
+ int ret = alarmmgr_add_alarm_precision(ALARM_TYPE_VOLATILE, 100, 1000,
"gtest-alarmmgr", &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_add_get_alarm_withcb_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_add_get_alarm_withcb_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
- ret = alarmmgr_add_alarm_withcb(ALARM_TYPE_VOLATILE, 100, 1000,
- __handler, NULL, &alarm_id);
+ alarmmgr_fini();
+ alarm_id_t alarm_id;
+ int ret = alarmmgr_add_alarm_withcb(ALARM_TYPE_VOLATILE, 100, 1000,
+ __handler, nullptr, &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
+ alarmmgr_fini();
}
-TEST_F(AlarmLibTest, alarmmgr_add_get_alarm_withcb_precision_n)
-{
- int ret;
- alarm_id_t alarm_id;
+TEST_F(AlarmLibTest, alarmmgr_add_get_alarm_withcb_precision_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_add_alarm_withcb_precision(ALARM_TYPE_VOLATILE, 100, 1000,
- __handler, NULL, &alarm_id);
+ alarm_id_t alarm_id;
+ int ret = alarmmgr_add_alarm_withcb_precision(ALARM_TYPE_VOLATILE, 100, 1000,
+ __handler, nullptr, &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
+ alarmmgr_fini();
}
-TEST_F(AlarmLibTest, alarmmgr_remove_alarm_n)
-{
- int ret;
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_remove_alarm_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_remove_alarm(1);
+ int ret = alarmmgr_remove_alarm(1);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_remove_all_n)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_remove_all_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_remove_all();
+ int ret = alarmmgr_remove_all();
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-int enum_fn(alarm_id_t alarm_id, void *user_param)
-{
- return 0;
-}
-
-TEST_F(AlarmLibTest, alarmmgr_enum_alarm_ids_n)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_enum_alarm_ids_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_enum_alarm_ids(enum_fn, nullptr);
+ int ret = alarmmgr_enum_alarm_ids([](alarm_id_t alarm_id,
+ void *user_param) -> int {
+ return 0;
+ }, nullptr);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_get_next_duetime_n)
-{
- int ret;
- time_t next_time;
+TEST_F(AlarmLibTest, alarmmgr_get_next_duetime_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_get_next_duetime(1, &next_time);
+ time_t next_time;
+ int ret = alarmmgr_get_next_duetime(1, &next_time);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-int handler(alarm_id_t alarm_id, void *user_param)
-{
- return 0;
-}
+TEST_F(AlarmLibTest, alarmmgr_add_periodic_alarm_withcb_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
-TEST_F(AlarmLibTest, alarmmgr_add_periodic_alarm_withcb_n)
-{
- int ret;
alarm_id_t alarm_id;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_add_periodic_alarm_withcb(1000, CUT_OFF, handler, NULL,
- &alarm_id);
+ int ret = alarmmgr_add_periodic_alarm_withcb(1000, CUT_OFF,
+ [](alarm_id_t alarm_id, void*) -> int {
+ return 0;
+ }, nullptr, &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
+ alarmmgr_fini();
}
-TEST_F(AlarmLibTest, alarmmgr_add_reference_periodic_alarm_withcb_n)
-{
- int ret;
- alarm_id_t alarm_id;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_add_reference_periodic_alarm_withcb_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_new_for_xml(_, _))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_new_for_xml_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_register_object(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_connection_unregister_object(_, _))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_own_name_on_connection(_, _, _,
+ _, _, _, _))
+ .WillRepeatedly(Return(1));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_node_info_unref(_))
+ .WillRepeatedly(Invoke(__g_dbus_node_info_unref_fake));
- ret = alarmmgr_add_reference_periodic_alarm_withcb(1000, handler, NULL,
- &alarm_id);
+ alarm_id_t alarm_id;
+ int ret = alarmmgr_add_reference_periodic_alarm_withcb(1000,
+ [](alarm_id_t alarm_id, void*) -> int {
+ return 0;
+ }, nullptr, &alarm_id);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
+ alarmmgr_fini();
}
-TEST_F(AlarmLibTest, alarmmgr_set_systime_n)
-{
- int ret;
- time_t current_time;
+TEST_F(AlarmLibTest, alarmmgr_set_systime_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ time_t current_time;
time(&current_time);
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_set_systime(current_time);
+ int ret = alarmmgr_set_systime(current_time);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_systime_with_propagation_delay_n)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_systime_with_propagation_delay_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+
struct timespec newtime;
struct timespec reqtime;
-
clock_gettime(CLOCK_REALTIME, &newtime);
clock_gettime(CLOCK_REALTIME, &reqtime);
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_set_systime_with_propagation_delay(newtime, reqtime);
+ int ret = alarmmgr_set_systime_with_propagation_delay(newtime, reqtime);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-int set_time_cb(int result, void *user_param)
-{
- return 0;
-}
+TEST_F(AlarmLibTest, alarmmgr_set_systime_async_p) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
-TEST_F(AlarmLibTest, alarmmgr_set_systime_async_p)
-{
- int ret;
time_t current_time;
-
- g_dbus_proxy_call_fake.custom_fake = __g_dbus_proxy_call_fake;
-
time(&current_time);
-
- ret = alarmmgr_set_systime_async(current_time, set_time_cb, NULL);
+ int ret = alarmmgr_set_systime_async(current_time,
+ [](int result, void*) -> int {
+ return 0;
+ }, nullptr);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_systime_with_propagation_delay_async_p)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_systime_with_propagation_delay_async_p) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+
struct timespec newtime;
struct timespec reqtime;
-
- g_dbus_proxy_call_fake.custom_fake = __g_dbus_proxy_call_fake;
-
clock_gettime(CLOCK_REALTIME, &newtime);
clock_gettime(CLOCK_REALTIME, &reqtime);
-
newtime.tv_sec += 100;
reqtime.tv_sec += 100;
-
- ret = alarmmgr_set_systime_with_propagation_delay_async(newtime,
- reqtime, set_time_cb, NULL);
+ int ret = alarmmgr_set_systime_with_propagation_delay_async(newtime, reqtime,
+ [](int result, void*) -> int {
+ return 0;
+ },nullptr);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_timezone_n)
-{
- int ret;
- char zone[] = "/usr/share/zoneinfo/Asia/Seoul";
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_set_timezone_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_set_timezone(zone);
+ char zone[] = "/usr/share/zoneinfo/Asia/Seoul";
+ int ret = alarmmgr_set_timezone(zone);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_set_global_n)
-{
- int ret;
+TEST_F(AlarmLibTest, alarmmgr_set_global_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
-
- ret = alarmmgr_set_global(1, true);
+ int ret = alarmmgr_set_global(1, true);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_get_global_n)
-{
- int ret;
- bool global;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_get_global_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
- ret = alarmmgr_get_global(1, &global);
+ bool global;
+ int ret = alarmmgr_get_global(1, &global);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
-TEST_F(AlarmLibTest, alarmmgr_update_alarm_n)
-{
- int ret;
- alarm_date_t test_time;
-
- g_dbus_proxy_call_sync_fake.custom_fake = __g_dbus_proxy_call_sync_fake_negative;
+TEST_F(AlarmLibTest, alarmmgr_update_alarm_n) {
+ EXPECT_CALL(GetMock<DbusMock>(), g_bus_get_sync(_, _, _))
+ .WillRepeatedly(Invoke(__g_bus_get_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_new_sync(
+ _, _, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_new_sync_fake));
+ EXPECT_CALL(GetMock<DbusMock>(), g_dbus_proxy_call_sync(_, _, _, _, _, _, _))
+ .WillRepeatedly(Invoke(__g_dbus_proxy_call_sync_fake_negative));
+ alarm_date_t test_time;
test_time.year = 2022;
test_time.month = 1;
test_time.day = 1;
-
test_time.hour = 1;
test_time.min = 1;
test_time.sec = 5;
- ret = alarmmgr_set_time(alarm, test_time);
+ int ret = alarmmgr_set_time(alarm_, test_time);
EXPECT_EQ(ALARMMGR_RESULT_SUCCESS, ret);
- ret = alarmmgr_update_alarm(1, alarm, ALARM_UPDATE_FLAG_TIME);
+ ret = alarmmgr_update_alarm(1, alarm_, ALARM_UPDATE_FLAG_TIME);
EXPECT_EQ(ERR_ALARM_NO_PERMISSION, ret);
}
diff --git a/unittest/unittest.cpp b/unittest/unittest.cpp
index e214950..8d1f366 100755
--- a/unittest/unittest.cpp
+++ b/unittest/unittest.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,10 +19,37 @@
#include "unittest.h"
-int main(int argc, char **argv)
-{
- testing::InitGoogleTest(&argc, argv);
+#ifdef LOG_INTERNAL
+#include <dlog.h>
- return RUN_ALL_TESTS();
+extern "C" int __dlog_print(log_id_t log_id, int prio, const char *tag, const char *fmt, ...) {
+ printf("%s:", tag);
+ va_list ap;
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ printf("\n");
+
+ return 0;
+}
+#endif
+
+int main(int argc, char **argv) {
+ int ret = 0;
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ } catch(...) {
+ std::cout << "Exception occured" << std::endl;
+ return 1;
+ }
+
+ try {
+ return RUN_ALL_TESTS();
+ } catch(const ::testing::internal::GoogleTestFailureException& e) {
+ std::cout << "GoogleTestFailureException occured:" << e.what() << std::endl;
+ ret = 1;
+ }
+
+ return ret;
}