]>
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 | void InitBuffer (Buffer *b); |
12 | void AppendToBuffer (register Buffer *b, const char *str, register int len); | |
13 | void ReadFile (register Buffer *buffer, FILE *input); | |
cccda09f | 14 | |
28f540f4 RM |
15 | #define INIT_BUFFER_SIZE 10000 |
16 | ||
17 | void InitBuffer(b) | |
18 | Buffer *b; | |
19 | { | |
20 | b->room = INIT_BUFFER_SIZE; | |
21 | b->used = 0; | |
22 | b->buff = (char *)malloc(INIT_BUFFER_SIZE*sizeof(char)); | |
23 | } | |
24 | ||
25 | void AppendToBuffer(b, str, len) | |
26 | register Buffer *b; | |
cccda09f | 27 | const char *str; |
28f540f4 RM |
28 | register int len; |
29 | { | |
30 | while (b->used + len > b->room) { | |
31 | b->buff = (char *)realloc(b->buff, 2*b->room*(sizeof(char))); | |
32 | b->room *= 2; | |
33 | } | |
34 | strncpy(b->buff + b->used, str, len); | |
35 | b->used += len; | |
36 | } | |
37 | ||
38 | void ReadFile(buffer, input) | |
39 | register Buffer *buffer; | |
40 | FILE *input; | |
41 | { | |
42 | char buf[BUFSIZ + 1]; | |
43 | register int bytes; | |
44 | ||
45 | buffer->used = 0; | |
46 | while (!feof(input) && (bytes = fread(buf, 1, BUFSIZ, input)) > 0) { | |
47 | AppendToBuffer(buffer, buf, bytes); | |
48 | } | |
49 | AppendToBuffer(buffer, "", 1); | |
50 | } | |
51 | ||
cccda09f UD |
52 | int |
53 | main(int argc, char *argv[]) | |
28f540f4 | 54 | { |
d41c6f61 | 55 | char filename[] = "xbug.c"; |
28f540f4 RM |
56 | FILE *input; |
57 | Buffer buffer; | |
cccda09f | 58 | |
28f540f4 | 59 | InitBuffer(&buffer); |
cccda09f | 60 | |
28f540f4 RM |
61 | if (!freopen (filename, "r", stdin)) |
62 | fprintf(stderr, "cannot open file\n"); | |
cccda09f | 63 | |
74015205 UD |
64 | unsetenv ("LD_LIBRARY_PATH"); |
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 | } |