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 | ... | ... |