diff options
author | Martin Mares <mj@ucw.cz> | 2004-06-05 10:56:43 +0200 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2004-06-05 10:56:43 +0200 |
commit | 4da25acb0ab964826f133025493a9b80d8bef509 (patch) | |
tree | 3b6fe4128cbdc9a278eeafa59aa25778de71d1b9 /sysdep | |
parent | c6bdc78befaf5ae9e5e3c58a8df1301d5cafd4e7 (diff) | |
download | bird-4da25acb0ab964826f133025493a9b80d8bef509.tar bird-4da25acb0ab964826f133025493a9b80d8bef509.zip |
Cleaned up sk_reallocate() and friends.
Also, removed the `if (s)' test, because I believe that as the whole
socket interface doesn't accent NULL pointers, sk_reallocate() shouldn't
be the only exception.
Diffstat (limited to 'sysdep')
-rw-r--r-- | sysdep/unix/io.c | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index b216e63..4030b86 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -422,14 +422,37 @@ sk_next(sock *s) } static void -sk_free(resource *r) +sk_alloc_bufs(sock *s) { - sock *s = (sock *) r; + if (!s->rbuf && s->rbsize) + s->rbuf = s->rbuf_alloc = xmalloc(s->rbsize); + s->rpos = s->rbuf; + if (!s->tbuf && s->tbsize) + s->tbuf = s->tbuf_alloc = xmalloc(s->tbsize); + s->tpos = s->ttx = s->tbuf; +} +static void +sk_free_bufs(sock *s) +{ if (s->rbuf_alloc) - xfree(s->rbuf_alloc); + { + xfree(s->rbuf_alloc); + s->rbuf = s->rbuf_alloc = NULL; + } if (s->tbuf_alloc) - xfree(s->tbuf_alloc); + { + xfree(s->tbuf_alloc); + s->tbuf = s->tbuf_alloc = NULL; + } +} + +static void +sk_free(resource *r) +{ + sock *s = (sock *) r; + + sk_free_bufs(s); if (s->fd >= 0) { close(s->fd); @@ -440,6 +463,13 @@ sk_free(resource *r) } } +void +sk_reallocate(sock *s) +{ + sk_free_bufs(s); + sk_alloc_bufs(s); +} + static void sk_dump(resource *r) { @@ -589,31 +619,6 @@ bad: } static void -sk_alloc_bufs(sock *s) -{ - if (!s->rbuf && s->rbsize) - s->rbuf = s->rbuf_alloc = xmalloc(s->rbsize); - s->rpos = s->rbuf; - if (!s->tbuf && s->tbsize) - s->tbuf = s->tbuf_alloc = xmalloc(s->tbsize); - s->tpos = s->ttx = s->tbuf; -} - -void -sk_reallocate(sock *s) -{ - if(!s) return; - - if (s->rbuf_alloc) - xfree(s->rbuf_alloc); - s->rbuf = NULL; - if (s->tbuf_alloc) - xfree(s->tbuf_alloc); - s->tbuf = NULL; - sk_alloc_bufs(s); -} - -static void sk_tcp_connected(sock *s) { s->type = SK_TCP; |