Commit a15d2dbb33ff5450d857d0419ee62a06d87a43c0
1 parent
cf6fe3da
Exists in
master
and in
3 other branches
Updating input list to use the new chained list managers.
Showing
4 changed files
with
33 additions
and
34 deletions
Show diff stats
src/core/iocalls.c
... | ... | @@ -223,25 +223,26 @@ static void internal_remove_timer(H3270 *session, void * timer) |
223 | 223 | |
224 | 224 | static void * internal_add_poll(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata ) |
225 | 225 | { |
226 | - input_t *ip = (input_t *) lib3270_malloc(sizeof(input_t)); | |
226 | + input_t *ip = (input_t *) lib3270_linked_list_append_node(&session->input.list,sizeof(input_t), userdata); | |
227 | 227 | |
228 | 228 | ip->session = session; |
229 | 229 | ip->enabled = 1; |
230 | 230 | ip->fd = fd; |
231 | 231 | ip->flag = flag; |
232 | - ip->userdata = userdata; | |
233 | 232 | ip->call = call; |
234 | 233 | |
235 | - ip->next = (input_t *) session->inputs; | |
236 | - | |
237 | - session->inputs = ip; | |
238 | - session->inputs_changed = 1; | |
234 | + session->input.changed = 1; | |
239 | 235 | |
240 | 236 | return ip; |
241 | 237 | } |
242 | 238 | |
243 | 239 | static void internal_remove_poll(H3270 *session, void *id) |
244 | 240 | { |
241 | + lib3270_linked_list_delete_node(&session->input.list,id); | |
242 | + | |
243 | + session->input.changed = 1; | |
244 | + | |
245 | + /* | |
245 | 246 | input_t *ip; |
246 | 247 | input_t *prev = (input_t *)NULL; |
247 | 248 | |
... | ... | @@ -266,18 +267,19 @@ static void internal_remove_poll(H3270 *session, void *id) |
266 | 267 | |
267 | 268 | lib3270_free(ip); |
268 | 269 | session->inputs_changed = 1; |
270 | + */ | |
269 | 271 | } |
270 | 272 | |
271 | 273 | static void internal_set_poll_state(H3270 *session, void *id, int enabled) |
272 | 274 | { |
273 | 275 | input_t *ip; |
274 | 276 | |
275 | - for (ip = session->inputs; ip != (input_t *) NULL; ip = (input_t *) ip->next) | |
277 | + for (ip = (input_t *) session->input.list.first; ip; ip = (input_t *) ip->next) | |
276 | 278 | { |
277 | 279 | if (ip == (input_t *)id) |
278 | 280 | { |
279 | 281 | ip->enabled = enabled ? 1 : 0; |
280 | - session->inputs_changed = 1; | |
282 | + session->input.changed = 1; | |
281 | 283 | break; |
282 | 284 | } |
283 | 285 | |
... | ... | @@ -303,10 +305,9 @@ LIB3270_EXPORT void lib3270_set_poll_state(H3270 *session, void *id, int enabled |
303 | 305 | |
304 | 306 | LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) |
305 | 307 | { |
306 | - | |
307 | 308 | input_t *ip; |
308 | 309 | |
309 | - for (ip = session->inputs; ip != (input_t *)NULL; ip = ip->next) | |
310 | + for (ip = (input_t *) session->input.list.first; ip; ip = ip->next) | |
310 | 311 | { |
311 | 312 | if(ip->fd == fd) |
312 | 313 | { |
... | ... | @@ -321,10 +322,9 @@ LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) |
321 | 322 | |
322 | 323 | LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag) |
323 | 324 | { |
324 | - | |
325 | 325 | input_t *ip; |
326 | 326 | |
327 | - for (ip = session->inputs; ip != (input_t *)NULL; ip = (input_t *) ip->next) | |
327 | + for (ip = (input_t *) session->input.list.first; ip; ip = ip->next) | |
328 | 328 | { |
329 | 329 | if(ip->fd == fd) |
330 | 330 | { | ... | ... |
src/core/linux/event_dispatcher.c
... | ... | @@ -63,7 +63,7 @@ int lib3270_default_event_dispatcher(H3270 *hSession, int block) |
63 | 63 | |
64 | 64 | retry: |
65 | 65 | |
66 | - hSession->inputs_changed = 0; | |
66 | + hSession->input.changed = 0; | |
67 | 67 | |
68 | 68 | // If we've processed any input, then don't block again. |
69 | 69 | if(processed_any) |
... | ... | @@ -75,7 +75,7 @@ retry: |
75 | 75 | FD_ZERO(&wfds); |
76 | 76 | FD_ZERO(&xfds); |
77 | 77 | |
78 | - for (ip = hSession->inputs; ip != (input_t *)NULL; ip = (input_t *) ip->next) | |
78 | + for (ip = (input_t *) hSession->input.list.first; ip != (input_t *)NULL; ip = (input_t *) ip->next) | |
79 | 79 | { |
80 | 80 | if(!ip->enabled) |
81 | 81 | { |
... | ... | @@ -147,13 +147,13 @@ retry: |
147 | 147 | } |
148 | 148 | else |
149 | 149 | { |
150 | - for (ip = hSession->inputs; ip != (input_t *) NULL; ip = (input_t *) ip->next) | |
150 | + for (ip = (input_t *) hSession->input.list.first; ip != (input_t *) NULL; ip = (input_t *) ip->next) | |
151 | 151 | { |
152 | 152 | if((ip->flag & LIB3270_IO_FLAG_READ) && FD_ISSET(ip->fd, &rfds)) |
153 | 153 | { |
154 | 154 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_READ,ip->userdata); |
155 | 155 | processed_any = True; |
156 | - if (hSession->inputs_changed) | |
156 | + if (hSession->input.changed) | |
157 | 157 | goto retry; |
158 | 158 | } |
159 | 159 | |
... | ... | @@ -161,7 +161,7 @@ retry: |
161 | 161 | { |
162 | 162 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_WRITE,ip->userdata); |
163 | 163 | processed_any = True; |
164 | - if (hSession->inputs_changed) | |
164 | + if (hSession->input.changed) | |
165 | 165 | goto retry; |
166 | 166 | } |
167 | 167 | |
... | ... | @@ -169,7 +169,7 @@ retry: |
169 | 169 | { |
170 | 170 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_EXCEPTION,ip->userdata); |
171 | 171 | processed_any = True; |
172 | - if (hSession->inputs_changed) | |
172 | + if (hSession->input.changed) | |
173 | 173 | goto retry; |
174 | 174 | } |
175 | 175 | } |
... | ... | @@ -195,7 +195,7 @@ retry: |
195 | 195 | } |
196 | 196 | } |
197 | 197 | |
198 | - if (hSession->inputs_changed) | |
198 | + if (hSession->input.changed) | |
199 | 199 | goto retry; |
200 | 200 | |
201 | 201 | return processed_any; | ... | ... |
src/core/session.c
... | ... | @@ -142,12 +142,7 @@ void lib3270_session_free(H3270 *h) |
142 | 142 | } |
143 | 143 | |
144 | 144 | // Release inputs; |
145 | - while(h->inputs) | |
146 | - { | |
147 | - input_t *ip = h->inputs; | |
148 | - h->inputs = (input_t *) ip->next; | |
149 | - lib3270_free(ip); | |
150 | - } | |
145 | + lib3270_linked_list_free(&h->input.list); | |
151 | 146 | |
152 | 147 | trace("Releasing session %p",h); |
153 | 148 | lib3270_free(h); | ... | ... |
src/include/lib3270-internals.h
... | ... | @@ -310,14 +310,14 @@ typedef struct timeout |
310 | 310 | */ |
311 | 311 | typedef struct _input_t |
312 | 312 | { |
313 | - unsigned char enabled; | |
314 | - struct _input_t * next; | |
315 | - H3270 * session; | |
316 | - int fd; | |
317 | - LIB3270_IO_FLAG flag; | |
318 | - void * userdata; | |
313 | + LIB3270_LINKED_LIST_HEAD; | |
314 | + | |
315 | + unsigned char enabled; | |
316 | + H3270 * session; | |
317 | + int fd; | |
318 | + LIB3270_IO_FLAG flag; | |
319 | 319 | |
320 | - void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | |
320 | + void (*call)(H3270 *, int, LIB3270_IO_FLAG, void *); | |
321 | 321 | |
322 | 322 | } input_t; |
323 | 323 | |
... | ... | @@ -685,8 +685,12 @@ struct _h3270 |
685 | 685 | #endif // HAVE_LIBSSL |
686 | 686 | |
687 | 687 | timeout_t * timeouts; |
688 | - input_t * inputs; | |
689 | - int inputs_changed : 1; | |
688 | + | |
689 | + struct | |
690 | + { | |
691 | + struct lib3270_linked_list_head list; | |
692 | + int changed : 1; | |
693 | + } input; | |
690 | 694 | |
691 | 695 | // Trace methods. |
692 | 696 | struct | ... | ... |