(root)/
gcc-13.2.0/
fixincludes/
fixlib.h
       1  
       2  /* Install modified versions of certain ANSI-incompatible system header
       3     files which are fixed to work correctly with ANSI C and placed in a
       4     directory that GCC will search.
       5  
       6     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2009, 2012
       7     Free Software Foundation, Inc.
       8  
       9  This file is part of GCC.
      10  
      11  GCC is free software; you can redistribute it and/or modify
      12  it under the terms of the GNU General Public License as published by
      13  the Free Software Foundation; either version 3, or (at your option)
      14  any later version.
      15  
      16  GCC is distributed in the hope that it will be useful,
      17  but WITHOUT ANY WARRANTY; without even the implied warranty of
      18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19  GNU General Public License for more details.
      20  
      21  You should have received a copy of the GNU General Public License
      22  along with GCC; see the file COPYING3.  If not see
      23  <http://www.gnu.org/licenses/>.  */
      24  
      25  #ifndef GCC_FIXLIB_H
      26  #define GCC_FIXLIB_H
      27  
      28  #include "config.h"
      29  #include "system.h"
      30  #include <signal.h>
      31  
      32  #include "xregex.h"
      33  #include "libiberty.h"
      34  
      35  #ifndef STDIN_FILENO
      36  # define STDIN_FILENO   0
      37  #endif
      38  #ifndef STDOUT_FILENO
      39  # define STDOUT_FILENO  1
      40  #endif
      41  
      42  #if ! defined( SIGCHLD ) && defined( SIGCLD )
      43  #  define SIGCHLD SIGCLD
      44  #endif
      45  
      46  #ifndef SIGQUIT
      47  #define SIGQUIT SIGTERM
      48  #endif
      49  #ifndef SIGIOT
      50  #define SIGIOT SIGTERM
      51  #endif
      52  #ifndef SIGPIPE
      53  #define SIGPIPE SIGTERM
      54  #endif
      55  #ifndef SIGALRM
      56  #define SIGALRM SIGTERM
      57  #endif
      58  #ifndef SIGKILL
      59  #define SIGKILL SIGTERM
      60  #endif
      61  
      62  typedef int t_success;
      63  
      64  #define FAILURE         (-1)
      65  #define SUCCESS           0
      66  #define PROBLEM           1
      67  
      68  #define SUCCEEDED(p)    ((p) == SUCCESS)
      69  #define SUCCESSFUL(p)   SUCCEEDED (p)
      70  #define FAILED(p)       ((p) < SUCCESS)
      71  #define HADGLITCH(p)    ((p) > SUCCESS)
      72  
      73  #ifndef DEBUG
      74  # define STATIC static
      75  #else
      76  # define STATIC
      77  #endif
      78  
      79  #define tSCC static const char
      80  #define tCC  const char
      81  #define tSC  static char
      82  
      83  /* If this particular system's header files define the macro `MAXPATHLEN',
      84     we happily take advantage of it; otherwise we use a value which ought
      85     to be large enough.  */
      86  #ifndef MAXPATHLEN
      87  # define MAXPATHLEN     4096
      88  #endif
      89  
      90  #ifndef EXIT_SUCCESS
      91  # define EXIT_SUCCESS 0
      92  #endif
      93  #ifndef EXIT_FAILURE
      94  # define EXIT_FAILURE 1
      95  #endif
      96  
      97  #define EXIT_BROKEN  3
      98  
      99  #define NUL             '\0'
     100  
     101  #ifndef NOPROCESS
     102  #define NOPROCESS	((pid_t) -1)
     103  #define NULLPROCESS	((pid_t)0)
     104  
     105  #define EXIT_PANIC	99
     106  #endif /* NOPROCESS */
     107  
     108  #define IGNORE_ARG(a)   ((void)(a))
     109  
     110  typedef enum t_bool
     111  {
     112    BOOL_FALSE, BOOL_TRUE
     113  } t_bool;
     114  
     115  typedef int apply_fix_p_t;  /* Apply Fix Predicate Type */
     116  
     117  #define APPLY_FIX 0
     118  #define SKIP_FIX  1
     119  
     120  #define ENV_TABLE                                    \
     121    _ENV_( pz_machine,   BOOL_TRUE, "TARGET_MACHINE",  \
     122           "output from config.guess" )                \
     123                                                       \
     124    _ENV_( pz_orig_dir,  BOOL_TRUE, "ORIGDIR",         \
     125           "directory of fixincl and applyfix" )       \
     126                                                       \
     127    _ENV_( pz_src_dir,   BOOL_TRUE, "SRCDIR",          \
     128           "directory of original files" )             \
     129                                                       \
     130    _ENV_( pz_input_dir, BOOL_TRUE, "INPUT",           \
     131           "current directory for fixincl" )           \
     132                                                       \
     133    _ENV_( pz_dest_dir,  BOOL_TRUE, "DESTDIR",         \
     134           "output directory" )                        \
     135                                                       \
     136    _ENV_( pz_mn_name_pat, BOOL_FALSE, "MN_NAME_PAT",  \
     137           "regex matching forbidden identifiers" )    \
     138                                                       \
     139    _ENV_( pz_verbose,  BOOL_FALSE, "VERBOSE",         \
     140           "amount of user entertainment" )            \
     141                                                       \
     142    _ENV_( pz_find_base, BOOL_TRUE, "FIND_BASE",       \
     143           "leader to trim from file names" )          \
     144                                                       \
     145    _ENV_( pz_test_mode, BOOL_FALSE, "TEST_MODE",      \
     146           "run fixincludes in test mode" )
     147  
     148  #define _ENV_(v,m,n,t)   extern tCC* v;
     149  ENV_TABLE
     150  #undef _ENV_
     151  
     152  /*  Test Descriptor
     153  
     154      Each fix may have associated tests that determine
     155      whether the fix needs to be applied or not.
     156      Each test has a type (from the te_test_type enumeration);
     157      associated test text; and, if the test is TT_EGREP or
     158      the negated form TT_NEGREP, a pointer to the compiled
     159      version of the text string.
     160  
     161      */
     162  typedef enum
     163  {
     164    TT_TEST, TT_EGREP, TT_NEGREP, TT_FUNCTION, TT_CKSUM
     165  } te_test_type;
     166  
     167  typedef struct test_desc tTestDesc;
     168  
     169  struct test_desc
     170  {
     171    te_test_type type;
     172    const char *pz_test_text;
     173    regex_t *p_test_regex;
     174  };
     175  
     176  typedef struct patch_desc tPatchDesc;
     177  
     178  /*  Fix Descriptor
     179  
     180      Everything you ever wanted to know about how to apply
     181      a particular fix (which files, how to qualify them,
     182      how to actually make the fix, etc...)
     183  
     184      NB:  the FD_ defines are BIT FLAGS, even though
     185           some are mutually exclusive
     186  
     187      */
     188  #define FD_MACH_ONLY      0x0000
     189  #define FD_MACH_IFNOT     0x0001
     190  #define FD_SHELL_SCRIPT   0x0002
     191  #define FD_SUBROUTINE     0x0004
     192  #define FD_REPLACEMENT    0x0008
     193  #define FD_SKIP_TEST      0x8000
     194  
     195  typedef struct fix_desc tFixDesc;
     196  struct fix_desc
     197  {
     198    tCC*        fix_name;       /* Name of the fix */
     199    tCC*        file_list;      /* List of files it applies to */
     200    tCC**       papz_machs;     /* List of machine/os-es it applies to */
     201    int         test_ct;
     202    int         fd_flags;
     203    tTestDesc*  p_test_desc;
     204    tCC**       patch_args;
     205    long        unused;
     206  };
     207  
     208  typedef struct {
     209    int         type_name_len;
     210    tCC*        pz_type;
     211    tCC*        pz_TYPE;
     212    tCC*        pz_gtype;
     213  } t_gnu_type_map;
     214  
     215  extern int gnu_type_map_ct;
     216  
     217  typedef enum {
     218    VERB_SILENT = 0,
     219    VERB_FIXES,
     220    VERB_APPLIES,
     221    VERB_PROGRESS,
     222    VERB_TESTS,
     223    VERB_EVERYTHING
     224  } te_verbose;
     225  
     226  extern te_verbose  verbose_level;
     227  
     228  #define VLEVEL(l)  ((unsigned int) verbose_level >= (unsigned int) l)
     229  #define NOT_SILENT VLEVEL(VERB_FIXES)
     230  
     231  typedef enum {
     232    TESTING_OFF = 0,
     233    TESTING_ON  = 1
     234  } fixinc_mode_t;
     235  
     236  extern fixinc_mode_t fixinc_mode;
     237  
     238  #ifdef HAVE_MMAP_FILE
     239  #define UNLOAD_DATA() do { if (curr_data_mapped) { \
     240    munmap ((void*)pz_curr_data, data_map_size); close (data_map_fd); } \
     241    else free ((void*)pz_curr_data); } while(0)
     242  #else
     243  #define UNLOAD_DATA() free ((void*)pz_curr_data)
     244  #endif
     245  
     246  /*
     247   *  Exported procedures
     248   */
     249  char * load_file_data ( FILE* fp );
     250  
     251  #ifdef IS_CXX_HEADER_NEEDED
     252  t_bool is_cxx_header ( tCC* filename, tCC* filetext );
     253  #endif /* IS_CXX_HEADER_NEEDED */
     254  
     255  #ifdef SKIP_QUOTE_NEEDED
     256  tCC*   skip_quote ( char  q, char* text );
     257  #endif
     258  
     259  void   compile_re ( tCC* pat, regex_t* re, int match, tCC *e1, tCC *e2 );
     260  
     261  void   apply_fix ( tFixDesc* p_fixd, tCC* filname );
     262  apply_fix_p_t
     263         run_test ( tCC* t_name, tCC* f_name, tCC* text );
     264  
     265  #ifdef SEPARATE_FIX_PROC
     266  char*  make_raw_shell_str ( char* pz_d, tCC* pz_s, size_t smax );
     267  #endif
     268  
     269  t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who );
     270  
     271  void   initialize_opts ( void );
     272  
     273  #if defined(__MINGW32__)
     274  
     275  void   fix_path_separators ( char* p );
     276  
     277  /* prepend shell name to command passed to system call */
     278  int    system_with_shell ( char* s );
     279  
     280  #else
     281  
     282  /* normal call */
     283  #define system_with_shell system
     284  
     285  #endif /* defined(__MINGW32__) */
     286  
     287  #endif /* ! GCC_FIXLIB_H */