1*c8d645caSAndroid Build Coastguard Worker #include <stdio.h>
2*c8d645caSAndroid Build Coastguard Worker #include <stdlib.h>
3*c8d645caSAndroid Build Coastguard Worker #include <string.h>
4*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
5*c8d645caSAndroid Build Coastguard Worker #include "test.pb.h"
6*c8d645caSAndroid Build Coastguard Worker #include "unittests.h"
7*c8d645caSAndroid Build Coastguard Worker
8*c8d645caSAndroid Build Coastguard Worker const char STR[] = "test str";
9*c8d645caSAndroid Build Coastguard Worker #define ALIGN 0x100
10*c8d645caSAndroid Build Coastguard Worker
main(int argc,char ** argv)11*c8d645caSAndroid Build Coastguard Worker int main(int argc, char **argv)
12*c8d645caSAndroid Build Coastguard Worker {
13*c8d645caSAndroid Build Coastguard Worker int status = 0;
14*c8d645caSAndroid Build Coastguard Worker uint8_t buffer[512] = {0};
15*c8d645caSAndroid Build Coastguard Worker int i;
16*c8d645caSAndroid Build Coastguard Worker pb_ostream_t ostream;
17*c8d645caSAndroid Build Coastguard Worker MyMessage msg = MyMessage_init_zero;
18*c8d645caSAndroid Build Coastguard Worker char *pStr, *pStrAligned;
19*c8d645caSAndroid Build Coastguard Worker ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
20*c8d645caSAndroid Build Coastguard Worker
21*c8d645caSAndroid Build Coastguard Worker /* copy STR to a malloced 0x100 aligned address */
22*c8d645caSAndroid Build Coastguard Worker pStr = malloc(sizeof(STR) + ALIGN);
23*c8d645caSAndroid Build Coastguard Worker pStrAligned = (char*)((uintptr_t)(pStr + ALIGN) & ~(ALIGN - 1));
24*c8d645caSAndroid Build Coastguard Worker memcpy(pStrAligned, STR, sizeof(STR));
25*c8d645caSAndroid Build Coastguard Worker
26*c8d645caSAndroid Build Coastguard Worker msg.submessage.somestring = pStrAligned;
27*c8d645caSAndroid Build Coastguard Worker printf("%p: '%s'\n", msg.submessage.somestring, msg.submessage.somestring);
28*c8d645caSAndroid Build Coastguard Worker
29*c8d645caSAndroid Build Coastguard Worker if (!pb_encode(&ostream, MyMessage_fields, &msg)) {
30*c8d645caSAndroid Build Coastguard Worker fprintf(stderr, "Encode failed: %s\n", PB_GET_ERROR(&ostream));
31*c8d645caSAndroid Build Coastguard Worker return 1;
32*c8d645caSAndroid Build Coastguard Worker }
33*c8d645caSAndroid Build Coastguard Worker
34*c8d645caSAndroid Build Coastguard Worker free(pStr);
35*c8d645caSAndroid Build Coastguard Worker msg.submessage.somestring = NULL;
36*c8d645caSAndroid Build Coastguard Worker
37*c8d645caSAndroid Build Coastguard Worker printf("response payload (%d):", (int)ostream.bytes_written);
38*c8d645caSAndroid Build Coastguard Worker for (i = 0; i < ostream.bytes_written; i++) {
39*c8d645caSAndroid Build Coastguard Worker printf("%02X", buffer[i]);
40*c8d645caSAndroid Build Coastguard Worker }
41*c8d645caSAndroid Build Coastguard Worker printf("\n");
42*c8d645caSAndroid Build Coastguard Worker
43*c8d645caSAndroid Build Coastguard Worker TEST(ostream.bytes_written != 0);
44*c8d645caSAndroid Build Coastguard Worker
45*c8d645caSAndroid Build Coastguard Worker return status;
46*c8d645caSAndroid Build Coastguard Worker }
47*c8d645caSAndroid Build Coastguard Worker
48