diff options
Diffstat (limited to 'src/libunixonacid/unixmessage_unput.c')
-rw-r--r-- | src/libunixonacid/unixmessage_unput.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/libunixonacid/unixmessage_unput.c b/src/libunixonacid/unixmessage_unput.c index 63e94b8..e869110 100644 --- a/src/libunixonacid/unixmessage_unput.c +++ b/src/libunixonacid/unixmessage_unput.c @@ -9,14 +9,15 @@ int unixmessage_unput_and_maybe_drop (unixmessage_sender_t *b, int drop) { diuint *start ; unsigned int n = genalloc_len(diuint, &b->offsets) ; + register int *fds ; + register unsigned int i ; if (!n) return 0 ; start = genalloc_s(diuint, &b->offsets) + n - 1 ; - if (drop) - { - register int *fds = genalloc_s(int, &b->fds) + start->right ; - register unsigned int i = genalloc_len(int, &b->fds) - start->right ; - while (i--) fd_close(fds[i] < 0 ? -(fds[i]+1) : fds[i]) ; - } + fds = genalloc_s(int, &b->fds) + start->right ; + i = genalloc_len(int, &b->fds) - start->right ; + while (i--) + if (fds[i] < 0) (*b->closecb)(-(fds[i]+1), b->closecbdata) ; + else if (drop) fd_close(fds[i]) ; b->data.len = start->left ; genalloc_setlen(int, &b->fds, start->right) ; genalloc_setlen(diuint, &b->offsets, n-1) ; |