string_table_length = 0;
process_file (file_name)     char * file_name;{  FILE *       file;  struct stat  statbuf;  unsigned int i;  if (stat (file_name, & statbuf) < 0)    {      error (_("Cannot stat input file %s.\n"), file_name);      return;    }  file = fopen (file_name, "rb");  if (file == NULL)    {      error (_("Input file %s not found.\n"), file_name);      return;    }  if (! get_file_header (file))    {      error (_("%s: Failed to read file header\n"), file_name);      fclose (file);      return;    }  /* Initialise per file variables.  */  for (i = NUM_ELEM (version_info); i--;)    version_info[i] = 0;  for (i = NUM_ELEM (dynamic_info); i--;)    dynamic_info[i] = 0;  /* Process the file.  */  if (show_name)    printf (_("\nFile: %s\n"), file_name);  if (! process_file_header ())    {      fclose (file);      return;    }  process_section_headers (file);  process_program_headers (file);  process_dynamic_segment (file);  process_relocs (file);  process_symbol_table (file);  process_syminfo (file);  process_version_sections (file);  process_section_contents (file);  process_corefile_contents (file);  process_arch_specific (file);  fclose (file);  if (section_headers)    {      free (section_headers);      section_headers = NULL;    }  if (string_table)    {      free (string_table);      string_table = NULL;    }  if (dynamic_strings)    {      free (dynamic_strings);      dynamic_strings = NULL;    }  if (dynamic_symbols)    {      free (dynamic_symbols);      dynamic_symbols = NULL;      num_dynamic_syms = 0;    }  if (dynamic_syminfo)    {      free (dynamic_syminfo);      dynamic_syminfo = NULL;    }}