xref: /aosp_15_r20/external/nanopb-c/tests/regression/issue_504/test.c (revision c8d645cafcee3f91213d30caa0fe303887010b9b)
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