1 diff -durN freedt-0.18.orig/iolib.c freedt-0.18/iolib.c
2 --- freedt-0.18.orig/iolib.c 2003-05-27 20:06:16.000000000 +0200
3 +++ freedt-0.18/iolib.c 2004-02-04 14:26:18.408747224 +0100
7 /* Format an argument into the buffer. */
8 -static void format_arg(buffer *b, char t, va_list *va) {
9 +static void format_arg(buffer *b, char t, va_list va) {
12 - char *s = va_arg(*va, char *);
13 + char *s = va_arg(va, char *);
18 - buffer *src = va_arg(*va, buffer *);
19 + buffer *src = va_arg(va, buffer *);
24 - int i = va_arg(*va, int);
25 + int i = va_arg(va, int);
26 format_long(b, i, 10);
30 - unsigned int i = va_arg(*va, unsigned int);
31 + unsigned int i = va_arg(va, unsigned int);
32 format_ulong(b, i, 10);
36 - int i = va_arg(*va, int);
37 + int i = va_arg(va, int);
38 format_long(b, i, 16);
42 - unsigned int i = va_arg(*va, unsigned int);
43 + unsigned int i = va_arg(va, unsigned int);
44 format_ulong(b, i, 16);
48 - long i = va_arg(*va, long);
49 + long i = va_arg(va, long);
50 format_long(b, i, 10);
54 - unsigned long i = va_arg(*va, unsigned long);
55 + unsigned long i = va_arg(va, unsigned long);
56 format_ulong(b, i, 10);
60 - unsigned long i = va_arg(*va, unsigned long);
61 + unsigned long i = va_arg(va, unsigned long);
62 format_long(b, i & 0xff, 10);
64 format_long(b, (i >> 8) & 0xff, 10);
68 die("unexpected end of format");
69 - format_arg(b, *p, &va);
70 + format_arg(b, *p, va);
74 diff -durN freedt-0.18.orig/iolib.c~ freedt-0.18/iolib.c~
75 --- freedt-0.18.orig/iolib.c~ 1970-01-01 01:00:00.000000000 +0100
76 +++ freedt-0.18/iolib.c~ 2003-05-27 20:06:16.000000000 +0200
81 +#include <sys/types.h>
82 +#include <sys/stat.h>
89 +/* Default file descriptors. */
94 +/* The granularity with which to allocate buffer sizes;
95 + the allocated size of a buffer will always be a multiple of this. */
96 +#define BUFFERUNIT 256
98 +/* Die with a constant error message. */
99 +#define die(s) do { write(2, s, sizeof(s) - 1); exit(20); } while (0)
101 +/* Adjust the size of a buffer without destroying its contents. */
102 +static void bsetsize(buffer *b, int len) {
109 + /* This always rounds up the allocated size so that
110 + adding characters to a buf one at a time doesn't
111 + cause a realloc for each character. */
112 + int size = BUFFERUNIT * ((len / BUFFERUNIT) + 1);
113 + if (size != b->size) {
114 + b->s = realloc(b->s, size + 1);
116 + die("out of memory");
122 +void bsetlength(buffer *b, int len) {
127 +void bfree(buffer *b) {
131 +void bmake(buffer *b, const char *s) {
133 + bappendm(b, s, strlen(s));
136 +void bappendm(buffer *dest, const char *src, int len) {
138 + bsetlength(dest, l + len);
139 + memcpy(dest->s + l, src, len);
142 +void bappends(buffer *dest, const char *s) {
143 + bappendm(dest, s, strlen(s));
146 +void bappendc(buffer *dest, char c) {
147 + bappendm(dest, &c, 1);
150 +void bappend(buffer *dest, const buffer *src) {
151 + bappendm(dest, src->s, src->len);
154 +int blength(const buffer *b) {
158 +const char *bstr(const buffer *b) {
159 + if (b->len == 0) return "";
160 + b->s[b->len] = '\0';
164 +int bindex(const buffer *b, char c) {
170 + pos = (char *) memchr(b->s, c, b->len);
177 +void breplacec(buffer *b, char from, char to) {
178 + char *p = b->s, *end = p + b->len;
179 + for (; p < end; p++) {
180 + if (*p == from) *p = to;
184 +void bpopl(buffer *b, int n, buffer *saveto) {
185 + if (saveto != NULL)
186 + bappendm(saveto, b->s, n);
187 + /* FIXME: It would be more efficient to maintain a "start" pointer
188 + and only memmove once we have more than a certain amount of space
191 + memmove(b->s, b->s + n, b->len);
194 +int writea(int fd, const char *s, int n) {
199 + c = write(fd, s, n);
200 + } while (c < 0 && errno == EINTR);
210 +int writeb(int fd, const buffer *b) {
211 + return write(fd, b->s, b->len);
214 +int writeba(int fd, const buffer *b) {
215 + return writea(fd, b->s, b->len);
218 +int readb(int fd, buffer *b, int n) {
224 + if (b->size < (b->len + n))
225 + bsetsize(b, b->len + n);
227 + c = read(fd, b->s + b->len, n);
234 +int readba(int fd, buffer *b) {
237 + c = readb(fd, b, 4096);
242 +int readuntilb(int fd, buffer *b, int max, char term, buffer *overflow) {
247 + pos = (char *) memchr(overflow->s, term, overflow->len);
249 + /* Remove the \n from overflow, but also trim it
250 + from the string read. */
251 + bpopl(overflow, 1 + pos - overflow->s, b);
252 + bsetlength(b, b->len - 1);
256 + /* If no maximum size is specified, then read as much as
258 + c = readb(fd, overflow, (max) ? (max - overflow->len) : 4096);
264 +int readlineb(int fd, buffer *b, int max, buffer *overflow) {
265 + return readuntilb(fd, b, max, '\n', overflow);
268 +/* Return the representation of a digit. */
269 +static char format_digit(int n) {
270 + if (n < 10) return '0' + n;
271 + if (n < 36) return 'A' + (n - 10);
275 +/* Format an unsigned long into the buffer. */
276 +static void format_ulong(buffer *b, unsigned long n, int base) {
277 + if (n >= base) format_ulong(b, n / base, base);
278 + bappendc(b, format_digit(n % base));
281 +/* Format a signed long into the buffer. */
282 +static void format_long(buffer *b, long n, int base) {
285 + format_ulong(b, -n, base);
287 + format_ulong(b, n, base);
291 +/* Format an argument into the buffer. */
292 +static void format_arg(buffer *b, char t, va_list *va) {
295 + char *s = va_arg(*va, char *);
300 + buffer *src = va_arg(*va, buffer *);
305 + int i = va_arg(*va, int);
306 + format_long(b, i, 10);
310 + unsigned int i = va_arg(*va, unsigned int);
311 + format_ulong(b, i, 10);
315 + int i = va_arg(*va, int);
316 + format_long(b, i, 16);
320 + unsigned int i = va_arg(*va, unsigned int);
321 + format_ulong(b, i, 16);
325 + long i = va_arg(*va, long);
326 + format_long(b, i, 10);
330 + unsigned long i = va_arg(*va, unsigned long);
331 + format_ulong(b, i, 10);
335 + unsigned long i = va_arg(*va, unsigned long);
336 + format_long(b, i & 0xff, 10);
338 + format_long(b, (i >> 8) & 0xff, 10);
340 + format_long(b, (i >> 16) & 0xff, 10);
342 + format_long(b, (i >> 24) & 0xff, 10);
350 + die("unknown format character");
354 +/* Format a list of arguments into the buffer. */
355 +static void vaformat(buffer *b, const char *fmt, va_list va) {
357 + const char *p = strchr(fmt, '@');
361 + bappendm(b, fmt, p - fmt);
364 + die("unexpected end of format");
365 + format_arg(b, *p, &va);
372 +int format(int fd, const char *fmt, ...) {
378 + vaformat(&b, fmt, va);
379 + r = writeba(fd, &b);
386 +void bformat(buffer *b, const char *fmt, ...) {
390 + vaformat(b, fmt, va);