From: Chih-Hung Hsieh Date: Thu, 8 Oct 2015 18:05:23 +0000 (-0700) Subject: Move recursive nested function to file scope. X-Git-Tag: elfutils-0.164~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57fa86e08bdd901c0b42cc97947e620334f6ef68;p=thirdparty%2Felfutils.git Move recursive nested function to file scope. Prepare src/ld.c to compile with clang. Signed-off-by: Chih-Hung Hsieh --- diff --git a/src/ChangeLog b/src/ChangeLog index 5e69d3a4e..168bc7254 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2015-10-08 Chih-Hung Hsieh + + * ld.c (determine_output_format): Move recursive nested + function "try" to file scope. + 2015-10-04 Mark Wielaard * strip.c (handle_elf): Only sanity check section symbols to not diff --git a/src/ld.c b/src/ld.c index 6e96ae26b..b9a4f64b7 100644 --- a/src/ld.c +++ b/src/ld.c @@ -1049,6 +1049,53 @@ parse_B_option_2 (const char *arg) } +static inline int +try (int fd, Elf *elf) +{ + int result = 0; + + if (elf == NULL) + return 0; + + if (elf_kind (elf) == ELF_K_ELF) + { + /* We have an ELF file. We now can find out + what the output format should be. */ + XElf_Ehdr_vardef(ehdr); + + /* Get the ELF header of the object. */ + xelf_getehdr (elf, ehdr); + if (ehdr != NULL) + ld_state.ebl = + ebl_openbackend_machine (ehdr->e_machine); + + result = 1; + } + else if (elf_kind (elf) == ELF_K_AR) + { + /* Try the archive members. This could + potentially lead to wrong results if the + archive contains files for more than one + architecture. But this is the user's + problem. */ + Elf *subelf; + Elf_Cmd cmd = ELF_C_READ_MMAP; + + while ((subelf = elf_begin (fd, cmd, elf)) != NULL) + { + cmd = elf_next (subelf); + + if (try (fd, subelf) != 0) + break; + } + } + + elf_end (elf); + + return result; +} + + static void determine_output_format (void) { @@ -1078,52 +1125,7 @@ determine_output_format (void) int fd = open (runp->name, O_RDONLY); if (fd != -1) { - int try (Elf *elf) - { - int result = 0; - - if (elf == NULL) - return 0; - - if (elf_kind (elf) == ELF_K_ELF) - { - /* We have an ELF file. We now can find out - what the output format should be. */ - XElf_Ehdr_vardef(ehdr); - - /* Get the ELF header of the object. */ - xelf_getehdr (elf, ehdr); - if (ehdr != NULL) - ld_state.ebl = - ebl_openbackend_machine (ehdr->e_machine); - - result = 1; - } - else if (elf_kind (elf) == ELF_K_AR) - { - /* Try the archive members. This could - potentially lead to wrong results if the - archive contains files for more than one - architecture. But this is the user's - problem. */ - Elf *subelf; - Elf_Cmd cmd = ELF_C_READ_MMAP; - - while ((subelf = elf_begin (fd, cmd, elf)) != NULL) - { - cmd = elf_next (subelf); - - if (try (subelf) != 0) - break; - } - } - - elf_end (elf); - - return result; - } - - if (try (elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0) + if (try (fd, elf_begin (fd, ELF_C_READ_MMAP, NULL)) != 0) /* Found a file. */ break; }