diff options
Diffstat (limited to 'scripts/basic/fixdep.c')
-rw-r--r-- | scripts/basic/fixdep.c | 75 |
1 files changed, 20 insertions, 55 deletions
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index 91bb4c13f121..9f9238eaec19 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c | |||
@@ -264,42 +264,36 @@ static int strrcmp(const char *s, const char *sub) | |||
264 | return memcmp(s + slen - sublen, sub, sublen); | 264 | return memcmp(s + slen - sublen, sub, sublen); |
265 | } | 265 | } |
266 | 266 | ||
267 | static void do_config_file(const char *filename) | 267 | static void *read_file(const char *filename) |
268 | { | 268 | { |
269 | struct stat st; | 269 | struct stat st; |
270 | int fd; | 270 | int fd; |
271 | char *map; | 271 | char *buf; |
272 | 272 | ||
273 | fd = open(filename, O_RDONLY); | 273 | fd = open(filename, O_RDONLY); |
274 | if (fd < 0) { | 274 | if (fd < 0) { |
275 | fprintf(stderr, "fixdep: error opening config file: "); | 275 | fprintf(stderr, "fixdep: error opening file: "); |
276 | perror(filename); | 276 | perror(filename); |
277 | exit(2); | 277 | exit(2); |
278 | } | 278 | } |
279 | if (fstat(fd, &st) < 0) { | 279 | if (fstat(fd, &st) < 0) { |
280 | fprintf(stderr, "fixdep: error fstat'ing config file: "); | 280 | fprintf(stderr, "fixdep: error fstat'ing file: "); |
281 | perror(filename); | 281 | perror(filename); |
282 | exit(2); | 282 | exit(2); |
283 | } | 283 | } |
284 | if (st.st_size == 0) { | 284 | buf = malloc(st.st_size + 1); |
285 | close(fd); | 285 | if (!buf) { |
286 | return; | ||
287 | } | ||
288 | map = malloc(st.st_size + 1); | ||
289 | if (!map) { | ||
290 | perror("fixdep: malloc"); | 286 | perror("fixdep: malloc"); |
291 | exit(2); | 287 | exit(2); |
292 | } | 288 | } |
293 | if (read(fd, map, st.st_size) != st.st_size) { | 289 | if (read(fd, buf, st.st_size) != st.st_size) { |
294 | perror("fixdep: read"); | 290 | perror("fixdep: read"); |
295 | exit(2); | 291 | exit(2); |
296 | } | 292 | } |
297 | map[st.st_size] = '\0'; | 293 | buf[st.st_size] = '\0'; |
298 | close(fd); | 294 | close(fd); |
299 | 295 | ||
300 | parse_config_file(map); | 296 | return buf; |
301 | |||
302 | free(map); | ||
303 | } | 297 | } |
304 | 298 | ||
305 | /* | 299 | /* |
@@ -314,6 +308,7 @@ static void parse_dep_file(char *m) | |||
314 | int is_last, is_target; | 308 | int is_last, is_target; |
315 | int saw_any_target = 0; | 309 | int saw_any_target = 0; |
316 | int is_first_dep = 0; | 310 | int is_first_dep = 0; |
311 | void *buf; | ||
317 | 312 | ||
318 | while (1) { | 313 | while (1) { |
319 | /* Skip any "white space" */ | 314 | /* Skip any "white space" */ |
@@ -372,7 +367,10 @@ static void parse_dep_file(char *m) | |||
372 | is_first_dep = 0; | 367 | is_first_dep = 0; |
373 | } else | 368 | } else |
374 | printf(" %s \\\n", s); | 369 | printf(" %s \\\n", s); |
375 | do_config_file(s); | 370 | |
371 | buf = read_file(s); | ||
372 | parse_config_file(buf); | ||
373 | free(buf); | ||
376 | } | 374 | } |
377 | } | 375 | } |
378 | 376 | ||
@@ -397,46 +395,10 @@ static void parse_dep_file(char *m) | |||
397 | printf("$(deps_%s):\n", target); | 395 | printf("$(deps_%s):\n", target); |
398 | } | 396 | } |
399 | 397 | ||
400 | static void print_deps(const char *filename) | ||
401 | { | ||
402 | struct stat st; | ||
403 | int fd; | ||
404 | char *buf; | ||
405 | |||
406 | fd = open(filename, O_RDONLY); | ||
407 | if (fd < 0) { | ||
408 | fprintf(stderr, "fixdep: error opening depfile: "); | ||
409 | perror(filename); | ||
410 | exit(2); | ||
411 | } | ||
412 | if (fstat(fd, &st) < 0) { | ||
413 | fprintf(stderr, "fixdep: error fstat'ing depfile: "); | ||
414 | perror(filename); | ||
415 | exit(2); | ||
416 | } | ||
417 | if (st.st_size == 0) { | ||
418 | close(fd); | ||
419 | return; | ||
420 | } | ||
421 | buf = malloc(st.st_size + 1); | ||
422 | if (!buf) { | ||
423 | perror("fixdep: malloc"); | ||
424 | exit(2); | ||
425 | } | ||
426 | if (read(fd, buf, st.st_size) != st.st_size) { | ||
427 | perror("fixdep: read"); | ||
428 | exit(2); | ||
429 | } | ||
430 | buf[st.st_size] = '\0'; | ||
431 | close(fd); | ||
432 | |||
433 | parse_dep_file(buf); | ||
434 | |||
435 | free(buf); | ||
436 | } | ||
437 | |||
438 | int main(int argc, char *argv[]) | 398 | int main(int argc, char *argv[]) |
439 | { | 399 | { |
400 | void *buf; | ||
401 | |||
440 | if (argc == 5 && !strcmp(argv[1], "-e")) { | 402 | if (argc == 5 && !strcmp(argv[1], "-e")) { |
441 | insert_extra_deps = 1; | 403 | insert_extra_deps = 1; |
442 | argv++; | 404 | argv++; |
@@ -448,7 +410,10 @@ int main(int argc, char *argv[]) | |||
448 | cmdline = argv[3]; | 410 | cmdline = argv[3]; |
449 | 411 | ||
450 | print_cmdline(); | 412 | print_cmdline(); |
451 | print_deps(depfile); | 413 | |
414 | buf = read_file(depfile); | ||
415 | parse_dep_file(buf); | ||
416 | free(buf); | ||
452 | 417 | ||
453 | return 0; | 418 | return 0; |
454 | } | 419 | } |