forked from cloudwu/pbc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_pbc.c
More file actions
82 lines (63 loc) · 1.89 KB
/
Copy pathtest_pbc.c
File metadata and controls
82 lines (63 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "pbc.h"
#include "alloc.h"
#include <stdlib.h>
#include <stdio.h>
static void
read_file (const char *filename , struct pbc_slice *slice) {
FILE *f = fopen(filename, "rb");
if (f == NULL) {
slice->buffer = NULL;
slice->len = 0;
return;
}
fseek(f,0,SEEK_END);
slice->len = ftell(f);
fseek(f,0,SEEK_SET);
slice->buffer = malloc(slice->len);
fread(slice->buffer, 1 , slice->len , f);
fclose(f);
}
void
test_des(struct pbc_env * env)
{
struct pbc_slice slice;
read_file("descriptor.pb", &slice);
struct pbc_rmessage * msg = pbc_rmessage_new(env, "google.protobuf.FileDescriptorSet", &slice);
struct pbc_rmessage * file = pbc_rmessage_message(msg,"file",0);
printf("name = %s\n",pbc_rmessage_string(file, "name", 0 , NULL));
printf("package = %s\n",pbc_rmessage_string(file, "package", 0 , NULL));
int sz = pbc_rmessage_size(file, "dependency");
printf("dependency[%d] =\n" , sz);
int i;
for (i=0;i<sz;i++) {
printf("\t%s\n",pbc_rmessage_string(file, "dependency", i , NULL));
}
sz = pbc_rmessage_size(file, "message_type");
printf("message_type[%d] = \n",sz);
for (i=0;i<sz;i++) {
struct pbc_rmessage * message_type = pbc_rmessage_message(file,"message_type",i);
printf("\tname = %s\n",pbc_rmessage_string(message_type,"name",0,NULL));
}
pbc_rmessage_delete(msg);
free(slice.buffer);
struct pbc_wmessage * wmsg = pbc_wmessage_new(env , "google.protobuf.EnumDescriptorProto");
pbc_wmessage_string(wmsg,"name","test",0);
struct pbc_wmessage * value = pbc_wmessage_message(wmsg,"value");
pbc_wmessage_string(value,"name","Hello",0);
pbc_wmessage_integer(value,"value",1,0);
value = pbc_wmessage_message(wmsg,"value");
pbc_wmessage_string(value,"name","World",0);
pbc_wmessage_integer(value,"number",2,0);
pbc_wmessage_delete(wmsg);
}
int
main()
{
struct pbc_env * env = pbc_new();
// memory();
test_des(env);
// memory();
pbc_delete(env);
memory();
return 0;
}