diff options
Diffstat (limited to 'src/fbuilder/build_bin.c')
-rw-r--r-- | src/fbuilder/build_bin.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/fbuilder/build_bin.c b/src/fbuilder/build_bin.c index 1230fb780..602610750 100644 --- a/src/fbuilder/build_bin.c +++ b/src/fbuilder/build_bin.c | |||
@@ -21,15 +21,16 @@ | |||
21 | 21 | ||
22 | static FileDB *bin_out = NULL; | 22 | static FileDB *bin_out = NULL; |
23 | 23 | ||
24 | static void process_bin(const char *fname) { | 24 | static void process_bin(char *fname, FILE *fp) { |
25 | assert(fname); | 25 | assert(fname); |
26 | assert(fp); | ||
26 | 27 | ||
27 | // process trace file | 28 | // process trace file |
28 | FILE *fp = fopen(fname, "r"); | 29 | /* FILE *fp = fdopen(fd, "r"); */ |
29 | if (!fp) { | 30 | /* if (!fp) { */ |
30 | fprintf(stderr, "Error: cannot open %s\n", fname); | 31 | /* fprintf(stderr, "Error: cannot open %s\n", fname); */ |
31 | exit(1); | 32 | /* exit(1); */ |
32 | } | 33 | /* } */ |
33 | 34 | ||
34 | char buf[MAX_BUF]; | 35 | char buf[MAX_BUF]; |
35 | while (fgets(buf, MAX_BUF, fp)) { | 36 | while (fgets(buf, MAX_BUF, fp)) { |
@@ -90,16 +91,18 @@ static void process_bin(const char *fname) { | |||
90 | bin_out = filedb_add(bin_out, ptr); | 91 | bin_out = filedb_add(bin_out, ptr); |
91 | } | 92 | } |
92 | 93 | ||
93 | fclose(fp); | 94 | /* fclose(fp); */ |
94 | } | 95 | } |
95 | 96 | ||
96 | 97 | ||
97 | // process fname, fname.1, fname.2, fname.3, fname.4, fname.5 | 98 | // process fname, fname.1, fname.2, fname.3, fname.4, fname.5 |
98 | void build_bin(const char *fname, FILE *fp) { | 99 | void build_bin(char *fname, FILE *fp, FILE *fpo) { |
99 | assert(fname); | 100 | assert(fname); |
101 | assert(fp); | ||
102 | assert(fpo); | ||
100 | 103 | ||
101 | // run fname | 104 | // run fname |
102 | process_bin(fname); | 105 | process_bin(fname, fp); |
103 | 106 | ||
104 | // run all the rest | 107 | // run all the rest |
105 | struct stat s; | 108 | struct stat s; |
@@ -109,18 +112,23 @@ void build_bin(const char *fname, FILE *fp) { | |||
109 | if (asprintf(&newname, "%s.%d", fname, i) == -1) | 112 | if (asprintf(&newname, "%s.%d", fname, i) == -1) |
110 | errExit("asprintf"); | 113 | errExit("asprintf"); |
111 | if (stat(newname, &s) == 0) | 114 | if (stat(newname, &s) == 0) |
112 | process_bin(newname); | 115 | { |
116 | int nfd = open(newname, O_RDONLY); | ||
117 | FILE *nfp = fdopen(nfd, "r"); | ||
118 | process_bin(newname, nfp); | ||
119 | fclose(nfp); | ||
120 | } | ||
113 | free(newname); | 121 | free(newname); |
114 | } | 122 | } |
115 | 123 | ||
116 | if (bin_out) { | 124 | if (bin_out) { |
117 | fprintf(fp, "private-bin "); | 125 | fprintf(fpo, "private-bin "); |
118 | FileDB *ptr = bin_out; | 126 | FileDB *ptr = bin_out; |
119 | while (ptr) { | 127 | while (ptr) { |
120 | fprintf(fp, "%s,", ptr->fname); | 128 | fprintf(fpo, "%s,", ptr->fname); |
121 | ptr = ptr->next; | 129 | ptr = ptr->next; |
122 | } | 130 | } |
123 | fprintf(fp, "\n"); | 131 | fprintf(fpo, "\n"); |
124 | fprintf(fp, "# private-lib\n"); | 132 | fprintf(fpo, "# private-lib\n"); |
125 | } | 133 | } |
126 | } | 134 | } |