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