@@ -8,6 +8,10 @@ enc_rt_dtor(ErlNifEnv* env, void* obj){
8
8
EncEntry * entry = (EncEntry * )obj ;
9
9
enif_release_binary (& entry -> bin );
10
10
entry -> bin .data = NULL ;
11
+ if (entry -> ignored ){
12
+ enif_free (entry -> ignored );
13
+ entry -> ignored = NULL ;
14
+ }
11
15
entry = NULL ;
12
16
}
13
17
@@ -73,7 +77,7 @@ make_encoder_resource_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){
73
77
enif_get_uint (env , argv [4 ], & bin_sz );
74
78
PrivData * priv = (PrivData * )enif_priv_data (env );
75
79
unsigned resource_sz = enc_resource_size (rs_len , fs_len );
76
- EncEntry * enc_entry = (EncEntry * )enif_alloc_resource (priv -> encoder_RSTYPE , resource_sz );
80
+ EncEntry * enc_entry = (EncEntry * )enif_alloc_resource (priv -> encoder_RSTYPE , resource_sz );
77
81
//memset(enc_entry, 0, resource_sz);
78
82
enc_entry -> records_cnt = rs_len ;
79
83
enc_entry -> fields_cnt = fs_len ;
@@ -101,6 +105,7 @@ make_encoder_resource_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){
101
105
i ++ ;
102
106
list = tail ;
103
107
}
108
+
104
109
list = argv [3 ];
105
110
i = 0 ;
106
111
while (enif_get_list_cell (env , list , & head , & tail )){
@@ -116,6 +121,23 @@ make_encoder_resource_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){
116
121
i ++ ;
117
122
list = tail ;
118
123
}
124
+
125
+ list = argv [6 ];
126
+ if (!enif_get_list_length (env , list , & (enc_entry -> ignored_len )))
127
+ goto error ;
128
+ enc_entry -> ignored = (ERL_NIF_TERM * )enif_alloc (enc_entry -> ignored_len * sizeof (ERL_NIF_TERM ));
129
+ i = 0 ;
130
+ while (enif_get_list_cell (env , list , & head , & tail )){
131
+ // ignored term should be atoms
132
+ if (enif_is_atom (env , head )){
133
+ enc_entry -> ignored [i ] = head ;
134
+ }else {
135
+ enif_free (enc_entry -> ignored );
136
+ goto error ;
137
+ }
138
+ i ++ ;
139
+ list = tail ;
140
+ }
119
141
ERL_NIF_TERM ret = enif_make_resource (env , (void * )enc_entry );
120
142
enif_release_resource (enc_entry );
121
143
return ret ;
@@ -201,7 +223,7 @@ nif_funcs[] = {
201
223
{"encode_res" , 2 , encode_nif }, // with resource
202
224
{"decode_opt" , 2 , decode_nif }, // with options
203
225
{"decode_res" , 4 , decode_nif }, // with options, resource and strict flag
204
- {"make_encoder_resource" , 6 , make_encoder_resource_nif },
226
+ {"make_encoder_resource" , 7 , make_encoder_resource_nif },
205
227
{"make_decoder_resource" , 6 , make_decoder_resource_nif }
206
228
};
207
229
0 commit comments