diff options
Diffstat (limited to 'buffer.c')
-rw-r--r-- | buffer.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -12,7 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include "includes.h" | 14 | #include "includes.h" |
15 | RCSID("$OpenBSD: buffer.c,v 1.16 2002/06/26 08:54:18 markus Exp $"); | 15 | RCSID("$OpenBSD: buffer.c,v 1.19 2003/09/18 07:54:48 markus Exp $"); |
16 | 16 | ||
17 | #include "xmalloc.h" | 17 | #include "xmalloc.h" |
18 | #include "buffer.h" | 18 | #include "buffer.h" |
@@ -23,8 +23,11 @@ RCSID("$OpenBSD: buffer.c,v 1.16 2002/06/26 08:54:18 markus Exp $"); | |||
23 | void | 23 | void |
24 | buffer_init(Buffer *buffer) | 24 | buffer_init(Buffer *buffer) |
25 | { | 25 | { |
26 | buffer->alloc = 4096; | 26 | const u_int len = 4096; |
27 | buffer->buf = xmalloc(buffer->alloc); | 27 | |
28 | buffer->alloc = 0; | ||
29 | buffer->buf = xmalloc(len); | ||
30 | buffer->alloc = len; | ||
28 | buffer->offset = 0; | 31 | buffer->offset = 0; |
29 | buffer->end = 0; | 32 | buffer->end = 0; |
30 | } | 33 | } |
@@ -34,8 +37,11 @@ buffer_init(Buffer *buffer) | |||
34 | void | 37 | void |
35 | buffer_free(Buffer *buffer) | 38 | buffer_free(Buffer *buffer) |
36 | { | 39 | { |
37 | memset(buffer->buf, 0, buffer->alloc); | 40 | if (buffer->alloc > 0) { |
38 | xfree(buffer->buf); | 41 | memset(buffer->buf, 0, buffer->alloc); |
42 | buffer->alloc = 0; | ||
43 | xfree(buffer->buf); | ||
44 | } | ||
39 | } | 45 | } |
40 | 46 | ||
41 | /* | 47 | /* |
@@ -99,6 +105,7 @@ restart: | |||
99 | goto restart; | 105 | goto restart; |
100 | } | 106 | } |
101 | /* Increase the size of the buffer and retry. */ | 107 | /* Increase the size of the buffer and retry. */ |
108 | |||
102 | newlen = buffer->alloc + len + 32768; | 109 | newlen = buffer->alloc + len + 32768; |
103 | if (newlen > 0xa00000) | 110 | if (newlen > 0xa00000) |
104 | fatal("buffer_append_space: alloc %u not supported", | 111 | fatal("buffer_append_space: alloc %u not supported", |