1 /* Copyright (C) 2021 Free Software Foundation, Inc.
2    Contributed by Oracle.
3 
4    This file is part of 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, or (at your option)
9    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, 51 Franklin Street - Fifth Floor, Boston,
19    MA 02110-1301, USA.  */
20 
21 #ifndef _DBE_FILE_H
22 #define _DBE_FILE_H
23 
24 #include <fcntl.h>
25 
26 class DbeJarFile;
27 class Experiment;
28 template <class ITEM> class Vector;
29 
30 class DbeFile
31 {
32 public:
33 
34   enum
35   {
36     F_NOT_FOUND     = 0,
37     F_FICTION       = 1,
38     F_LOADOBJ       = 2,
39     F_SOURCE        = 4,
40     F_JAVACLASS     = 8,
41     F_JAVA_SOURCE   = 16,
42     F_DOT_O         = 32,
43     F_DEBUG_FILE    = 64,
44     F_DOT_A_LIB     = 128,
45     F_DIR_OR_JAR    = 256,
46     F_DIRECTORY     = 512,
47     F_FILE          = 1024,
48     F_JAR_FILE      = 2048,
49     F_UNKNOWN       = 65536
50   };
51 
52   DbeFile (const char *filename);
53   ~DbeFile ();
54 
55   char *
get_name()56   get_name ()
57   {
58     return name;
59   };
60 
61   bool
get_need_refind()62   get_need_refind ()
63   {
64     return need_refind;
65   };
66 
67   char *get_location (bool find_needed = true);
68   char *getResolvedPath ();
69   char *get_location_info ();
70   struct stat64 *get_stat ();
71   bool compare (DbeFile *df);
72   void set_need_refind (bool val);
73   void set_location (const char *filename);
74   int check_access (const char *filename);
75   char *find_file (const char *filename);
76   DbeFile *getJarDbeFile (char *fnm, int sym);
77   char *find_in_jar_file (const char *filename, DbeJarFile *jfile);
78   DbeJarFile *get_jar_file ();
79 
80   bool inArchive;
81   int filetype;
82   struct stat64 sbuf;
83   DbeFile *container;
84   char *orig_location;
85   Experiment *experiment;
86 
87 protected:
88   static bool isJarOrZip (const char *fnm);
89   char *find_package_name (const char *filename, const char *dirname);
90   char *find_in_directory (const char *filename, const char *dirname);
91   bool find_in_pathmap (char *filename);
92   void find_in_archives (char *filename);
93   void find_in_setpath (char *filename, Vector<char*> *searchPath);
94   void find_in_classpath (char *filename, Vector<DbeFile*> *classPath);
95 
96   char *name;
97   char *location;
98   char *location_info;
99   bool need_refind;
100   DbeJarFile *jarFile;
101 };
102 
103 #endif /* _DBE_FILE_H */
104