xref: /netbsd-src/external/gpl3/binutils/dist/binutils/bfdtest1.c (revision cb63e24e8d6aae7ddac1859a9015f48b1d8bd90e)
1 /* A program to test BFD.
2    Copyright (C) 2012-2024 Free Software Foundation, Inc.
3 
4    This file is part of the GNU Binutils.
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20 
21 #include "sysdep.h"
22 #include "bfd.h"
23 
24 static void
die(const char * s)25 die (const char *s)
26 {
27   printf ("oops: %s\n", s);
28   exit (1);
29 }
30 
31 int
main(int argc,char ** argv)32 main (int argc, char **argv)
33 {
34   bfd *archive;
35   bfd *last, *next;
36   int count;
37 
38   if (argc != 2)
39     die ("usage: bfdtest1 <archive>");
40 
41   archive = bfd_openr (argv[1], NULL);
42   if (archive == NULL)
43     die ("no such archive");
44 
45   if (!bfd_check_format (archive, bfd_archive))
46     {
47       bfd_close (archive);
48       die ("bfd_check_format");
49     }
50 
51   for (count = 0, last = bfd_openr_next_archived_file (archive, NULL);
52        last;
53        last = next)
54     {
55       next = bfd_openr_next_archived_file (archive, last);
56       bfd_close (last);
57       count++;
58     }
59 
60   for (last = bfd_openr_next_archived_file (archive, NULL);
61        last;
62        last = next)
63     {
64       next = bfd_openr_next_archived_file (archive, last);
65       bfd_close (last);
66       count--;
67     }
68 
69   if (count != 0)
70     die ("element count differs in second scan");
71 
72   if (!bfd_close (archive))
73     die ("bfd_close");
74 
75   return 0;
76 }
77