summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyuho Jo <kyuho.jo@samsung.com>2015-07-13 10:52:14 +0900
committerKyuho Jo <kyuho.jo@samsung.com>2015-07-13 10:54:42 +0900
commitaaf2a402d048349457fbe4573bef70164848a0f4 (patch)
tree9c9669da664b0242e40fd6279449a23a60fd593b
parentcbfa6f24be3926280a35777f193c07689d6c4915 (diff)
downloadcom-core-tizen_3.0.m1_tv.tar.gz
com-core-tizen_3.0.m1_tv.tar.bz2
com-core-tizen_3.0.m1_tv.zip
Change-Id: If30e154b77f23b72588fbf4cf9be1082d0d6f4e6 Signed-off-by: Kyuho Jo <kyuho.jo@samsung.com>
-rw-r--r--src/packet.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/packet.c b/src/packet.c
index ffdca79..a28bc6d 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -244,6 +244,7 @@ static inline struct packet *packet_body_filler(struct packet *packet, int paylo
{
char *payload;
char *str;
+ int align;
while (*ptr) {
payload = packet->data->payload + packet->data->head.payload_size;
@@ -251,7 +252,12 @@ static inline struct packet *packet_body_filler(struct packet *packet, int paylo
switch (*ptr) {
case 'i':
case 'I':
- packet->data->head.payload_size += sizeof(int);
+ align = (unsigned long)payload & (sizeof(int) - 1);
+ if (align) {
+ align = sizeof(int) - align;
+ }
+
+ packet->data->head.payload_size += sizeof(int) + align;
packet->data = check_and_expand_packet(packet->data, &payload_size);
if (!packet->data) {
packet->state = INVALID;
@@ -260,7 +266,7 @@ static inline struct packet *packet_body_filler(struct packet *packet, int paylo
goto out;
}
- *((int *)payload) = (int)va_arg(va, int);
+ *((int *)(payload + align)) = (int)va_arg(va, int);
break;
case 's':
case 'S':
@@ -292,7 +298,12 @@ static inline struct packet *packet_body_filler(struct packet *packet, int paylo
break;
case 'd':
case 'D':
- packet->data->head.payload_size += sizeof(double);
+ align = (unsigned long)payload & (sizeof(double) - 1);
+ if (align) {
+ align = sizeof(double) - align;
+ }
+
+ packet->data->head.payload_size += sizeof(double) + align;
packet->data = check_and_expand_packet(packet->data, &payload_size);
if (!packet->data) {
packet->state = INVALID;
@@ -301,7 +312,7 @@ static inline struct packet *packet_body_filler(struct packet *packet, int paylo
goto out;
}
- *((double *)payload) = (double)va_arg(va, double);
+ *((double *)(payload + align)) = (double)va_arg(va, double);
break;
default:
ErrPrint("Invalid type [%c]\n", *ptr);
@@ -502,6 +513,7 @@ EAPI int packet_get(const struct packet *packet, const char *fmt, ...)
int *int_ptr;
double *double_ptr;
char **str_ptr;
+ int align;
if (!packet || packet->state != VALID) {
return -EINVAL;
@@ -515,16 +527,25 @@ EAPI int packet_get(const struct packet *packet, const char *fmt, ...)
switch (*ptr) {
case 'i':
case 'I':
+ align = (unsigned long)payload & (sizeof(int) - 1);
+ if (align) {
+ align = sizeof(int) - align;
+ }
+
int_ptr = (int *)va_arg(va, int *);
- *int_ptr = *((int *)payload);
- offset += sizeof(int);
+ *int_ptr = *((int *)(payload + align));
+ offset += (sizeof(int) + align);
ret++;
break;
case 'd':
case 'D':
+ align = (unsigned long)payload & (sizeof(double) - 1);
+ if (align) {
+ align = sizeof(double) - align;
+ }
double_ptr = (double *)va_arg(va, double *);
- *double_ptr = *((double *)payload);
- offset += sizeof(double);
+ *double_ptr = *((double *)(payload + align));
+ offset += (sizeof(double) + align);
ret++;
break;
case 's':