From: Dmitry Bogatov Date: Tue, 26 Nov 2013 13:50:34 +0000 (+0400) Subject: [REFACTOR] Refactor semi-pure calculation of msg_data payload length X-Git-Tag: Tizen_SDK_2.3~106 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ad6630a40e76c20aefb05295f4335df6e77eb005;p=platform%2Fcore%2Fsystem%2Fswap-manager.git [REFACTOR] Refactor semi-pure calculation of msg_data payload length Change-Id: I25d46ab034e85055e8e7945984c2b72462031bca Signed-off-by: Dmitry Bogatov --- diff --git a/daemon/da_protocol.h b/daemon/da_protocol.h index 1bb3e89..573bcd8 100644 --- a/daemon/da_protocol.h +++ b/daemon/da_protocol.h @@ -268,6 +268,14 @@ struct process_info_t { float load; }; +/** + * NOTE: + * + * Adding pointer memebers to struct %system_info_t REQUIRES updating code, + * calculating length of bytevector, suitable for serializing it. See + * msg_data_payload_length() + * + */ struct system_info_t { // system_cpu float app_cpu_usage; diff --git a/daemon/sys_stat.c b/daemon/sys_stat.c index 8fd29c2..31b849a 100644 --- a/daemon/sys_stat.c +++ b/daemon/sys_stat.c @@ -2532,19 +2532,14 @@ int sys_stat_prepare(void) return 0; } -struct msg_data_t *pack_system_info(struct system_info_t *sys_info) +static uint32_t msg_data_payload_length(const struct system_info_t *sys_info) { - struct msg_data_t *msg = NULL; - char *p = NULL; - int i = 0; - uint32_t len = 0; + uint32_t len = sizeof(*sys_info); - len += sizeof(*sys_info); - - // num_of_cpu is unknown at compile time + /* num_of_cpu is unknown at compile time */ len += 2 * num_of_cpu * sizeof(float); - // subtract pointers + /* subtract pointers */ len -= sizeof(sys_info->cpu_frequency) + sizeof(sys_info->cpu_load); len -= sizeof(sys_info->thread_load) + sizeof(sys_info->process_load); @@ -2556,6 +2551,16 @@ struct msg_data_t *pack_system_info(struct system_info_t *sys_info) len += sys_info->count_of_processes * sizeof(*sys_info->process_load); + return len; +} + +struct msg_data_t *pack_system_info(struct system_info_t *sys_info) +{ + const int len = msg_data_payload_length(sys_info); + struct msg_data_t *msg = NULL; + char *p = NULL; + int i = 0; + msg = malloc(MSG_DATA_HDR_LEN + len); if (!msg) { LOGE("Cannot alloc message: %d bytes\n", len);