]>
Commit | Line | Data |
---|---|---|
28f540f4 | 1 | #include <stdio.h> |
cccda09f UD |
2 | #include <stdlib.h> |
3 | #include <string.h> | |
4 | ||
28f540f4 RM |
5 | |
6 | typedef struct _Buffer { | |
7 | char *buff; | |
8 | int room, used; | |
9 | } Buffer; | |
10 | ||
cccda09f UD |
11 | #if __STDC__ - 0 |
12 | void InitBuffer (Buffer *b); | |
13 | void AppendToBuffer (register Buffer *b, const char *str, register int len); | |
14 | void ReadFile (register Buffer *buffer, FILE *input); | |
15 | #endif | |
16 | ||
28f540f4 RM |
17 | #define INIT_BUFFER_SIZE 10000 |
18 | ||
19 | void InitBuffer(b) | |
20 | Buffer *b; | |
21 | { | |
22 | b->room = INIT_BUFFER_SIZE; | |
23 | b->used = 0; | |
24 | b->buff = (char *)malloc(INIT_BUFFER_SIZE*sizeof(char)); | |
25 | } | |
26 | ||
27 | void AppendToBuffer(b, str, len) | |
28 | register Buffer *b; | |
cccda09f | 29 | const char *str; |
28f540f4 RM |
30 | register int len; |
31 | { | |
32 | while (b->used + len > b->room) { | |
33 | b->buff = (char *)realloc(b->buff, 2*b->room*(sizeof(char))); | |
34 | b->room *= 2; | |
35 | } | |
36 | strncpy(b->buff + b->used, str, len); | |
37 | b->used += len; | |
38 | } | |
39 | ||
40 | void ReadFile(buffer, input) | |
41 | register Buffer *buffer; | |
42 | FILE *input; | |
43 | { | |
44 | char buf[BUFSIZ + 1]; | |
45 | register int bytes; | |
46 | ||
47 | buffer->used = 0; | |
48 | while (!feof(input) && (bytes = fread(buf, 1, BUFSIZ, input)) > 0) { | |
49 | AppendToBuffer(buffer, buf, bytes); | |
50 | } | |
51 | AppendToBuffer(buffer, "", 1); | |
52 | } | |
53 | ||
cccda09f UD |
54 | int |
55 | main(int argc, char *argv[]) | |
28f540f4 RM |
56 | { |
57 | char * filename = "xbug.c"; | |
58 | FILE *input; | |
59 | Buffer buffer; | |
cccda09f | 60 | |
28f540f4 | 61 | InitBuffer(&buffer); |
cccda09f | 62 | |
28f540f4 RM |
63 | if (!freopen (filename, "r", stdin)) |
64 | fprintf(stderr, "cannot open file\n"); | |
cccda09f | 65 | |
28f540f4 RM |
66 | if (!(input = popen("/bin/cat", "r"))) |
67 | fprintf(stderr, "cannot run \n"); | |
cccda09f | 68 | |
28f540f4 RM |
69 | ReadFile(&buffer, input); |
70 | pclose(input); | |
71 | ||
72 | return 0; | |
73 | } |