summaryrefslogtreecommitdiffstats
path: root/sysdep/unix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix')
-rw-r--r--sysdep/unix/io.c63
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;