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,25 +223,26 @@ static void internal_remove_timer(H3270 *session, void * timer) | ||
| 223 | 223 | ||
| 224 | static void * internal_add_poll(H3270 *session, int fd, LIB3270_IO_FLAG flag, void(*call)(H3270 *, int, LIB3270_IO_FLAG, void *), void *userdata ) | 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 | ip->session = session; | 228 | ip->session = session; |
| 229 | ip->enabled = 1; | 229 | ip->enabled = 1; |
| 230 | ip->fd = fd; | 230 | ip->fd = fd; |
| 231 | ip->flag = flag; | 231 | ip->flag = flag; |
| 232 | - ip->userdata = userdata; | ||
| 233 | ip->call = call; | 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 | return ip; | 236 | return ip; |
| 241 | } | 237 | } |
| 242 | 238 | ||
| 243 | static void internal_remove_poll(H3270 *session, void *id) | 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 | input_t *ip; | 246 | input_t *ip; |
| 246 | input_t *prev = (input_t *)NULL; | 247 | input_t *prev = (input_t *)NULL; |
| 247 | 248 | ||
| @@ -266,18 +267,19 @@ static void internal_remove_poll(H3270 *session, void *id) | @@ -266,18 +267,19 @@ static void internal_remove_poll(H3270 *session, void *id) | ||
| 266 | 267 | ||
| 267 | lib3270_free(ip); | 268 | lib3270_free(ip); |
| 268 | session->inputs_changed = 1; | 269 | session->inputs_changed = 1; |
| 270 | + */ | ||
| 269 | } | 271 | } |
| 270 | 272 | ||
| 271 | static void internal_set_poll_state(H3270 *session, void *id, int enabled) | 273 | static void internal_set_poll_state(H3270 *session, void *id, int enabled) |
| 272 | { | 274 | { |
| 273 | input_t *ip; | 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 | if (ip == (input_t *)id) | 279 | if (ip == (input_t *)id) |
| 278 | { | 280 | { |
| 279 | ip->enabled = enabled ? 1 : 0; | 281 | ip->enabled = enabled ? 1 : 0; |
| 280 | - session->inputs_changed = 1; | 282 | + session->input.changed = 1; |
| 281 | break; | 283 | break; |
| 282 | } | 284 | } |
| 283 | 285 | ||
| @@ -303,10 +305,9 @@ LIB3270_EXPORT void lib3270_set_poll_state(H3270 *session, void *id, int enabled | @@ -303,10 +305,9 @@ LIB3270_EXPORT void lib3270_set_poll_state(H3270 *session, void *id, int enabled | ||
| 303 | 305 | ||
| 304 | LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) | 306 | LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) |
| 305 | { | 307 | { |
| 306 | - | ||
| 307 | input_t *ip; | 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 | if(ip->fd == fd) | 312 | if(ip->fd == fd) |
| 312 | { | 313 | { |
| @@ -321,10 +322,9 @@ LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) | @@ -321,10 +322,9 @@ LIB3270_EXPORT void lib3270_remove_poll_fd(H3270 *session, int fd) | ||
| 321 | 322 | ||
| 322 | LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag) | 323 | LIB3270_EXPORT void lib3270_update_poll_fd(H3270 *session, int fd, LIB3270_IO_FLAG flag) |
| 323 | { | 324 | { |
| 324 | - | ||
| 325 | input_t *ip; | 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 | if(ip->fd == fd) | 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,7 +63,7 @@ int lib3270_default_event_dispatcher(H3270 *hSession, int block) | ||
| 63 | 63 | ||
| 64 | retry: | 64 | retry: |
| 65 | 65 | ||
| 66 | - hSession->inputs_changed = 0; | 66 | + hSession->input.changed = 0; |
| 67 | 67 | ||
| 68 | // If we've processed any input, then don't block again. | 68 | // If we've processed any input, then don't block again. |
| 69 | if(processed_any) | 69 | if(processed_any) |
| @@ -75,7 +75,7 @@ retry: | @@ -75,7 +75,7 @@ retry: | ||
| 75 | FD_ZERO(&wfds); | 75 | FD_ZERO(&wfds); |
| 76 | FD_ZERO(&xfds); | 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 | if(!ip->enabled) | 80 | if(!ip->enabled) |
| 81 | { | 81 | { |
| @@ -147,13 +147,13 @@ retry: | @@ -147,13 +147,13 @@ retry: | ||
| 147 | } | 147 | } |
| 148 | else | 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 | if((ip->flag & LIB3270_IO_FLAG_READ) && FD_ISSET(ip->fd, &rfds)) | 152 | if((ip->flag & LIB3270_IO_FLAG_READ) && FD_ISSET(ip->fd, &rfds)) |
| 153 | { | 153 | { |
| 154 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_READ,ip->userdata); | 154 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_READ,ip->userdata); |
| 155 | processed_any = True; | 155 | processed_any = True; |
| 156 | - if (hSession->inputs_changed) | 156 | + if (hSession->input.changed) |
| 157 | goto retry; | 157 | goto retry; |
| 158 | } | 158 | } |
| 159 | 159 | ||
| @@ -161,7 +161,7 @@ retry: | @@ -161,7 +161,7 @@ retry: | ||
| 161 | { | 161 | { |
| 162 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_WRITE,ip->userdata); | 162 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_WRITE,ip->userdata); |
| 163 | processed_any = True; | 163 | processed_any = True; |
| 164 | - if (hSession->inputs_changed) | 164 | + if (hSession->input.changed) |
| 165 | goto retry; | 165 | goto retry; |
| 166 | } | 166 | } |
| 167 | 167 | ||
| @@ -169,7 +169,7 @@ retry: | @@ -169,7 +169,7 @@ retry: | ||
| 169 | { | 169 | { |
| 170 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_EXCEPTION,ip->userdata); | 170 | (*ip->call)(ip->session,ip->fd,LIB3270_IO_FLAG_EXCEPTION,ip->userdata); |
| 171 | processed_any = True; | 171 | processed_any = True; |
| 172 | - if (hSession->inputs_changed) | 172 | + if (hSession->input.changed) |
| 173 | goto retry; | 173 | goto retry; |
| 174 | } | 174 | } |
| 175 | } | 175 | } |
| @@ -195,7 +195,7 @@ retry: | @@ -195,7 +195,7 @@ retry: | ||
| 195 | } | 195 | } |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | - if (hSession->inputs_changed) | 198 | + if (hSession->input.changed) |
| 199 | goto retry; | 199 | goto retry; |
| 200 | 200 | ||
| 201 | return processed_any; | 201 | return processed_any; |
src/core/session.c
| @@ -142,12 +142,7 @@ void lib3270_session_free(H3270 *h) | @@ -142,12 +142,7 @@ void lib3270_session_free(H3270 *h) | ||
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | // Release inputs; | 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 | trace("Releasing session %p",h); | 147 | trace("Releasing session %p",h); |
| 153 | lib3270_free(h); | 148 | lib3270_free(h); |
src/include/lib3270-internals.h
| @@ -310,14 +310,14 @@ typedef struct timeout | @@ -310,14 +310,14 @@ typedef struct timeout | ||
| 310 | */ | 310 | */ |
| 311 | typedef struct _input_t | 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 | } input_t; | 322 | } input_t; |
| 323 | 323 | ||
| @@ -685,8 +685,12 @@ struct _h3270 | @@ -685,8 +685,12 @@ struct _h3270 | ||
| 685 | #endif // HAVE_LIBSSL | 685 | #endif // HAVE_LIBSSL |
| 686 | 686 | ||
| 687 | timeout_t * timeouts; | 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 | // Trace methods. | 695 | // Trace methods. |
| 692 | struct | 696 | struct |