Several more internal fixinc tests...

Bruce Korb bkorb@sco.COM
Sun May 14 14:40:00 GMT 2000


With this patch, all fixes that operate against any file
are now tested for and patched internally.  Unfortunately,
when I wrote the test text for the IO and CTRL macro fixes,
it seems there is either a mistake in my understanding or
a mistake in the fixup code  :-(

My understanding is that these should be fixed:

  #ifndef IO_QUOTES_DEF_CHECK
  #define BSD43__IOWR(n, x) (('n'<<8)+x)
  #endif  /* IO_QUOTES_DEF_CHECK */

  #ifndef IO_QUOTES_USE_CHECK
  #define TIOCFOO BSD43__IOWR(T, 1)
  #endif  /* IO_QUOTES_USE_CHECK */

  #ifndef CTRL_QUOTES_DEF_CHECK
  #define BSD43_CTRL(n, x) (('n'<<8)+x)
  #endif  /* CTRL_QUOTES_DEF_CHECK */

  #ifndef CTRL_QUOTES_USE_CHECK
  #define TIOCFOO BSD43_CTRL(T, 1)
  #endif  /* CTRL_QUOTES_USE_CHECK */

They are selected for fixing, but the code leaves them unchanged.
OTOH, nobody has complained for a really long time.....


Since the attached patch does not alter this behavior,
I am checking this in.  "make check" in ${top_builddir}/gcc/fixinc
will fail.
Index: check.diff
===================================================================
RCS file: /cvs/gcc/egcs/gcc/fixinc/check.diff,v
retrieving revision 1.3
diff -u -r1.3 check.diff
--- check.diff	2000/05/14 19:29:02	1.3
+++ check.diff	2000/05/14 21:13:22
@@ -444,14 +444,90 @@
 *** inc/sys/wait.h
 --- res/sys/wait.h
 ***************
-*** 2,6 ****
---- 2,7 ----
+*** 2,7 ****
+--- 2,8 ----
   
   #ifndef AIX_SYSWAIT_CHECK
   /* bos325, */
 + struct rusage;
   extern pid_t wait3();
+  /* pid_t wait3(int *, int, struct rusage *); */
   #endif  /* AIX_SYSWAIT_CHECK */
+*** inc/testing.h
+--- res/testing.h
+***************
+*** 1,33 ****
+  
+  
+  #ifndef IO_QUOTES_DEF_CHECK
+! #define BSD43__IOWR(n, x) (('n'<<8)+x)
+  #endif  /* IO_QUOTES_DEF_CHECK */
+  
+  
+  #ifndef IO_QUOTES_USE_CHECK
+! #define TIOCFOO BSD43__IOWR(T, 1)
+  #endif  /* IO_QUOTES_USE_CHECK */
+  
+  
+  #ifndef CTRL_QUOTES_DEF_CHECK
+! #define BSD43_CTRL(n, x) (('n'<<8)+x)
+  #endif  /* CTRL_QUOTES_DEF_CHECK */
+  
+  
+  #ifndef CTRL_QUOTES_USE_CHECK
+! #define TIOCFOO BSD43_CTRL(T, 1)
+  #endif  /* CTRL_QUOTES_USE_CHECK */
+  
+  
+  #ifndef MACHINE_NAME_CHECK
+! #ifdef i386 /* no uniform machine_name test, so
+                 this only works on i?86 machines */
+  #endif  /* MACHINE_NAME_CHECK */
+  
+  
+  #ifndef UNDEFINE_NULL_CHECK
+  #define NULL 0UL
+  #define NULL	((void*)0)
+  
+  #endif  /* UNDEFINE_NULL_CHECK */
+--- 1,37 ----
+  
+  
+  #ifndef IO_QUOTES_DEF_CHECK
+! #define BSD43__IOWR(n, x) ((n<<8)+x)
+  #endif  /* IO_QUOTES_DEF_CHECK */
+  
+  
+  #ifndef IO_QUOTES_USE_CHECK
+! #define TIOCFOO BSD43__IOWR('T', 1)
+  #endif  /* IO_QUOTES_USE_CHECK */
+  
+  
+  #ifndef CTRL_QUOTES_DEF_CHECK
+! #define BSD43_CTRL(n, x) ((n<<8)+x)
+  #endif  /* CTRL_QUOTES_DEF_CHECK */
+  
+  
+  #ifndef CTRL_QUOTES_USE_CHECK
+! #define TIOCFOO BSD43_CTRL('T', 1)
+  #endif  /* CTRL_QUOTES_USE_CHECK */
+  
+  
+  #ifndef MACHINE_NAME_CHECK
+! #ifdef __i386__ /* no uniform machine_name test, so
+                 this only works on i?86 machines */
+  #endif  /* MACHINE_NAME_CHECK */
+  
+  
+  #ifndef UNDEFINE_NULL_CHECK
++ #ifndef NULL
+  #define NULL 0UL
++ #endif
++ #ifndef NULL
+  #define NULL	((void*)0)
++ #endif
+  
+  #endif  /* UNDEFINE_NULL_CHECK */
 *** inc/time.h
 --- res/time.h
 ***************
@@ -480,5 +556,5 @@
   
   
   #ifndef ALPHA_SBRK_CHECK
-! extern void* sbrk(ptrdiff_t increment);
+! extern void *sbrk(ptrdiff_t increment);
   #endif  /* ALPHA_SBRK_CHECK */
Index: check.tpl
===================================================================
RCS file: /cvs/gcc/egcs/gcc/fixinc/check.tpl,v
retrieving revision 1.2
diff -u -r1.2 check.tpl
--- check.tpl	2000/05/11 13:41:12	1.2
+++ check.tpl	2000/05/14 21:13:22
@@ -29,7 +29,11 @@
 
   _IF test_text _exist ! =][=
     _IF replace _exist ! =]
-echo No test for [=hackname=][=
+echo No test for [=hackname=] in inc/[=
+      _IF files _exist =][=
+        files[0] =][=
+      _ELSE =]testing.h[=
+      _ENDIF =][=
     _ENDIF =][=
   _ELSE =]
 cat >> inc/[=
Index: fixincl.x
===================================================================
RCS file: /cvs/gcc/egcs/gcc/fixinc/fixincl.x,v
retrieving revision 1.63
diff -u -r1.63 fixincl.x
--- fixincl.x	2000/05/14 19:29:02	1.63
+++ fixincl.x	2000/05/14 21:13:23
@@ -803,8 +803,9 @@
 /*
  *  Fix Command Arguments for Aix_Volatile
  */
-const char* apzAix_VolatilePatch[] = { "sed",
-    "-e", "s/typedef volatile int sig_atomic_t/typedef int sig_atomic_t/",
+const char* apzAix_VolatilePatch[] = {
+    "format",
+    "typedef int sig_atomic_t",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -838,8 +839,9 @@
 /*
  *  Fix Command Arguments for Alpha_Getopt
  */
-const char* apzAlpha_GetoptPatch[] = { "sed",
-    "-e", "s/getopt(int, char \\*\\[\\],[ ]*char \\*)/getopt(int, char *const[], const char *)/",
+const char* apzAlpha_GetoptPatch[] = {
+    "format",
+    "getopt(int, char *const[], const char *)",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -873,8 +875,9 @@
 /*
  *  Fix Command Arguments for Alpha_Parens
  */
-const char* apzAlpha_ParensPatch[] = { "sed",
-    "-e", "s/#ifndef(__mips64)/#ifndef __mips64/",
+const char* apzAlpha_ParensPatch[] = {
+    "format",
+    "#ifndef __mips64",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -908,8 +911,9 @@
 /*
  *  Fix Command Arguments for Alpha_Sbrk
  */
-const char* apzAlpha_SbrkPatch[] = { "sed",
-    "-e", "s/char\\([ \t]*\\*[\t ]*sbrk[ \t]*(\\)/void\\1/",
+const char* apzAlpha_SbrkPatch[] = {
+    "format",
+    "void *sbrk(",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -1659,44 +1663,9 @@
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Description of Io_Quotes_Use fix
- */
-#define IO_QUOTES_USE_FIXIDX             38
-tSCC zIo_Quotes_UseName[] =
-     "io_quotes_use";
-
-/*
- *  File name selection pattern
- */
-#define zIo_Quotes_UseList (char*)NULL
-/*
- *  Machine/OS name selection pattern
- */
-#define apzIo_Quotes_UseMachs (const char**)NULL
-
-/*
- *  content selection pattern - do fix if pattern found
- */
-tSCC zIo_Quotes_UseSelect0[] =
-       "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*\\( *[^,']";
-
-#define    IO_QUOTES_USE_TEST_CT  1
-tTestDesc aIo_Quotes_UseTests[] = {
-  { TT_EGREP,    zIo_Quotes_UseSelect0, (regex_t*)NULL }, };
-
-/*
- *  Fix Command Arguments for Io_Quotes_Use
- */
-const char* apzIo_Quotes_UsePatch[] = {
-    "char_macro_use",
-    "IO",
-    (char*)NULL };
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * *
- *
  *  Description of Io_Quotes_Def fix
  */
-#define IO_QUOTES_DEF_FIXIDX             39
+#define IO_QUOTES_DEF_FIXIDX             38
 tSCC zIo_Quotes_DefName[] =
      "io_quotes_def";
 
@@ -1729,44 +1698,44 @@
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- *  Description of Ctrl_Quotes_Use fix
+ *  Description of Io_Quotes_Use fix
  */
-#define CTRL_QUOTES_USE_FIXIDX           40
-tSCC zCtrl_Quotes_UseName[] =
-     "ctrl_quotes_use";
+#define IO_QUOTES_USE_FIXIDX             39
+tSCC zIo_Quotes_UseName[] =
+     "io_quotes_use";
 
 /*
  *  File name selection pattern
  */
-#define zCtrl_Quotes_UseList (char*)NULL
+#define zIo_Quotes_UseList (char*)NULL
 /*
  *  Machine/OS name selection pattern
  */
-#define apzCtrl_Quotes_UseMachs (const char**)NULL
+#define apzIo_Quotes_UseMachs (const char**)NULL
 
 /*
  *  content selection pattern - do fix if pattern found
  */
-tSCC zCtrl_Quotes_UseSelect0[] =
-       "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
+tSCC zIo_Quotes_UseSelect0[] =
+       "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*\\( *[^,']";
 
-#define    CTRL_QUOTES_USE_TEST_CT  1
-tTestDesc aCtrl_Quotes_UseTests[] = {
-  { TT_EGREP,    zCtrl_Quotes_UseSelect0, (regex_t*)NULL }, };
+#define    IO_QUOTES_USE_TEST_CT  1
+tTestDesc aIo_Quotes_UseTests[] = {
+  { TT_EGREP,    zIo_Quotes_UseSelect0, (regex_t*)NULL }, };
 
 /*
- *  Fix Command Arguments for Ctrl_Quotes_Use
+ *  Fix Command Arguments for Io_Quotes_Use
  */
-const char* apzCtrl_Quotes_UsePatch[] = {
+const char* apzIo_Quotes_UsePatch[] = {
     "char_macro_use",
-    "CTRL",
+    "IO",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
  *  Description of Ctrl_Quotes_Def fix
  */
-#define CTRL_QUOTES_DEF_FIXIDX           41
+#define CTRL_QUOTES_DEF_FIXIDX           40
 tSCC zCtrl_Quotes_DefName[] =
      "ctrl_quotes_def";
 
@@ -1799,6 +1768,41 @@
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
  *
+ *  Description of Ctrl_Quotes_Use fix
+ */
+#define CTRL_QUOTES_USE_FIXIDX           41
+tSCC zCtrl_Quotes_UseName[] =
+     "ctrl_quotes_use";
+
+/*
+ *  File name selection pattern
+ */
+#define zCtrl_Quotes_UseList (char*)NULL
+/*
+ *  Machine/OS name selection pattern
+ */
+#define apzCtrl_Quotes_UseMachs (const char**)NULL
+
+/*
+ *  content selection pattern - do fix if pattern found
+ */
+tSCC zCtrl_Quotes_UseSelect0[] =
+       "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
+
+#define    CTRL_QUOTES_USE_TEST_CT  1
+tTestDesc aCtrl_Quotes_UseTests[] = {
+  { TT_EGREP,    zCtrl_Quotes_UseSelect0, (regex_t*)NULL }, };
+
+/*
+ *  Fix Command Arguments for Ctrl_Quotes_Use
+ */
+const char* apzCtrl_Quotes_UsePatch[] = {
+    "char_macro_use",
+    "CTRL",
+    (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
  *  Description of Ip_Missing_Semi fix
  */
 #define IP_MISSING_SEMI_FIXIDX           42
@@ -4206,13 +4210,13 @@
  *  content selection pattern - do fix if pattern found
  */
 tSCC zUndefine_NullSelect0[] =
-       "^#[ \t]*define[ \t]*[ \t]NULL[ \t\r]";
+       "^#[ \t]*define[ \t]+NULL[ \t]";
 
 /*
  *  content bypass pattern - skip fix if pattern found
  */
 tSCC zUndefine_NullBypass0[] =
-       "#[ \t]*(ifn|un)def[ \t]*[ \t]NULL($|[ \t\r])";
+       "#[ \t]*(ifn|un)def[ \t]+NULL($|[ \t\r])";
 
 #define    UNDEFINE_NULL_TEST_CT  2
 tTestDesc aUndefine_NullTests[] = {
@@ -4222,9 +4226,13 @@
 /*
  *  Fix Command Arguments for Undefine_Null
  */
-const char* apzUndefine_NullPatch[] = { "sed",
-    "-e", "/^#[ \t]*define[ \t][ \t]*NULL[ \t\r]/i\\\n\
-#undef NULL\n",
+const char* apzUndefine_NullPatch[] = {
+    "format",
+    "#ifndef NULL%2\n\
+#define NULL%1%2\n\
+#endif%2\n",
+    "^#[ \t]*define[ \t]*[ \t]NULL([^\r\n\
+]+)([\r]*)\n",
     (char*)NULL };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -4763,22 +4771,22 @@
 
   {  zAix_VolatileName,    zAix_VolatileList,
      apzAix_VolatileMachs,
-     AIX_VOLATILE_TEST_CT, FD_MACH_ONLY,
+     AIX_VOLATILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aAix_VolatileTests,   apzAix_VolatilePatch },
 
   {  zAlpha_GetoptName,    zAlpha_GetoptList,
      apzAlpha_GetoptMachs,
-     ALPHA_GETOPT_TEST_CT, FD_MACH_ONLY,
+     ALPHA_GETOPT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aAlpha_GetoptTests,   apzAlpha_GetoptPatch },
 
   {  zAlpha_ParensName,    zAlpha_ParensList,
      apzAlpha_ParensMachs,
-     ALPHA_PARENS_TEST_CT, FD_MACH_ONLY,
+     ALPHA_PARENS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aAlpha_ParensTests,   apzAlpha_ParensPatch },
 
   {  zAlpha_SbrkName,    zAlpha_SbrkList,
      apzAlpha_SbrkMachs,
-     ALPHA_SBRK_TEST_CT, FD_MACH_ONLY,
+     ALPHA_SBRK_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aAlpha_SbrkTests,   apzAlpha_SbrkPatch },
 
   {  zArm_Norcroft_HintName,    zArm_Norcroft_HintList,
@@ -4881,26 +4889,26 @@
      ISC_OMITS_WITH_STDC_TEST_CT, FD_MACH_ONLY,
      aIsc_Omits_With_StdcTests,   apzIsc_Omits_With_StdcPatch },
 
-  {  zIo_Quotes_UseName,    zIo_Quotes_UseList,
-     apzIo_Quotes_UseMachs,
-     IO_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
-     aIo_Quotes_UseTests,   apzIo_Quotes_UsePatch },
-
   {  zIo_Quotes_DefName,    zIo_Quotes_DefList,
      apzIo_Quotes_DefMachs,
      IO_QUOTES_DEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aIo_Quotes_DefTests,   apzIo_Quotes_DefPatch },
 
-  {  zCtrl_Quotes_UseName,    zCtrl_Quotes_UseList,
-     apzCtrl_Quotes_UseMachs,
-     CTRL_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
-     aCtrl_Quotes_UseTests,   apzCtrl_Quotes_UsePatch },
+  {  zIo_Quotes_UseName,    zIo_Quotes_UseList,
+     apzIo_Quotes_UseMachs,
+     IO_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aIo_Quotes_UseTests,   apzIo_Quotes_UsePatch },
 
   {  zCtrl_Quotes_DefName,    zCtrl_Quotes_DefList,
      apzCtrl_Quotes_DefMachs,
      CTRL_QUOTES_DEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aCtrl_Quotes_DefTests,   apzCtrl_Quotes_DefPatch },
 
+  {  zCtrl_Quotes_UseName,    zCtrl_Quotes_UseList,
+     apzCtrl_Quotes_UseMachs,
+     CTRL_QUOTES_USE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+     aCtrl_Quotes_UseTests,   apzCtrl_Quotes_UsePatch },
+
   {  zIp_Missing_SemiName,    zIp_Missing_SemiList,
      apzIp_Missing_SemiMachs,
      IP_MISSING_SEMI_TEST_CT, FD_MACH_ONLY,
@@ -5223,7 +5231,7 @@
 
   {  zUndefine_NullName,    zUndefine_NullList,
      apzUndefine_NullMachs,
-     UNDEFINE_NULL_TEST_CT, FD_MACH_ONLY,
+     UNDEFINE_NULL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
      aUndefine_NullTests,   apzUndefine_NullPatch },
 
   {  zUnixware7_Byteorder_FixName,    zUnixware7_Byteorder_FixList,
Index: inclhack.def
===================================================================
RCS file: /cvs/gcc/egcs/gcc/fixinc/inclhack.def,v
retrieving revision 1.63
diff -u -r1.63 inclhack.def
--- inclhack.def	2000/05/14 19:29:02	1.63
+++ inclhack.def	2000/05/14 21:13:24
@@ -517,8 +517,8 @@
 
 
 /*
- *  sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition
- *  of struct rusage, so the prototype (added by fixproto) causes havoc.
+ *  sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the
+ *  definition of struct rusage, so the prototype added by fixproto fails.
  */
 fix = {
     hackname  = aix_syswait;
@@ -527,7 +527,9 @@
     select    = "bos325,";
     c_fix     = format;
     c_fix_arg = "struct rusage;\n%0";
-    test_text = "/* bos325, */\nextern pid_t wait3();";
+    test_text = "/* bos325, */\n"
+    "extern pid_t wait3();\n"
+    "\t/* pid_t wait3(int *, int, struct rusage *); */";
 };
 
 
@@ -541,8 +543,8 @@
     hackname  = aix_volatile;
     files     = sys/signal.h;
     select    = "typedef volatile int sig_atomic_t";
-    sed      = "s/typedef volatile int sig_atomic_t"
-                "/typedef int sig_atomic_t/";
+    c_fix     = format;
+    c_fix_arg = "typedef int sig_atomic_t";
     test_text = "typedef volatile int sig_atomic_t;";
 };
 
@@ -555,8 +557,8 @@
     files     = "stdio.h";
     files     = "stdlib.h";
     select    = 'getopt\(int, char \*\[\], *char \*\)';
-    sed    = 's/getopt(int, char \*\[\],[ ]*char \*)/'
-               'getopt(int, char *const[], const char *)/';
+    c_fix     = format;
+    c_fix_arg = "getopt(int, char *const[], const char *)";
     test_text = 'extern int getopt(int, char *[], char *);';
 };
 
@@ -568,7 +570,8 @@
     hackname  = alpha_parens;
     files     = sym.h;
     select    = '#ifndef\(__mips64\)';
-    sed      = "s/#ifndef(__mips64)/#ifndef __mips64/";
+    c_fix     = format;
+    c_fix_arg = "#ifndef __mips64";
     test_text = "#ifndef(__mips64) /* bogus */\nextern int foo;\n#endif";
 };
 
@@ -580,7 +583,8 @@
     hackname = alpha_sbrk;
     files    = unistd.h;
     select   = "char[ \t]*\\*[\t ]*sbrk[ \t]*\\(";
-    sed  = "s/char\\([ \t]*\\*[\t ]*sbrk[ \t]*(\\)/void\\1/";
+    c_fix     = format;
+    c_fix_arg = "void *sbrk(";
     test_text = "extern char* sbrk(ptrdiff_t increment);";
 };
 
@@ -968,61 +972,73 @@
 };
 
 /*
- *  Fix various macros used to define ioctl numbers.  The traditional
- *  syntax was
- *  #define _IO(n, x) (('n'<<8)+x)
- *  #define TIOCFOO _IO(T, 1)
+ *  Fix various macros used to define ioctl numbers.
+ *  The traditional syntax was:
+ *
+ *    #define _IO(n, x) (('n'<<8)+x)
+ *    #define TIOCFOO _IO(T, 1)
+ *
  *  but this does not work with the C standard, which disallows macro
  *  expansion inside strings.  We have to rewrite it thus:
- *  #define _IO(n, x) ((n<<8)+x)
- *  #define TIOCFOO  _IO('T', 1)
+ *
+ *    #define _IO(n, x) ((n<<8)+x)
+ *    #define TIOCFOO  _IO('T', 1)
+ *
  *  The select expressions match too much, but the c_fix code is cautious.
  *
  *  _IO might be: _IO DESIO BSD43__IO with W, R, WR, C, ... suffixes.
  */
 fix = {
-    hackname  = io_quotes_use;
-    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
-                "\\( *[^,']";
-    c_fix     = char_macro_use;
+    hackname  = io_quotes_def;
+    select    = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\(([a-zA-Z]).*'\\1'";
+    c_fix     = char_macro_def;
     c_fix_arg = "IO";
+    test_text = "#define BSD43__IOWR(n, x) (('n'<<8)+x)";
 };
 
 fix = {
-    hackname  = io_quotes_def;
-    select    = "define[ \t]+[A-Z0-9_]+IO[A-Z]*\\(([a-zA-Z]).*'\\1'";
-    c_fix     = char_macro_def;
+    hackname  = io_quotes_use;
+    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+IO[A-Z]*[ \t]*"
+                "\\( *[^,']";
+    c_fix     = char_macro_use;
     c_fix_arg = "IO";
+    test_text = "#define TIOCFOO BSD43__IOWR(T, 1)";
 };
  
  
 /*
- *  Fix various macros used to define ioctl numbers.  The traditional
- *  syntax was
- *  #define _CTRL(n, x) (('n'<<8)+x)
- *  #define TIOCFOO _CTRL(T, 1)
+ *  Fix various macros used to define ioctl numbers.
+ *  The traditional syntax was:
+ *
+ *    #define _CTRL(n, x) (('n'<<8)+x)
+ *    #define TCTRLCFOO _CTRL(T, 1)
+ *
  *  but this does not work with the C standard, which disallows macro
  *  expansion inside strings.  We have to rewrite it thus:
- *  #define _CTRL(n, x) ((n<<8)+x)
- *  #define TIOCFOO  _CTRL('T', 1)
+ *
+ *    #define _CTRL(n, x) ((n<<8)+x)
+ *    #define TCTRLCFOO  _CTRL('T', 1)
+ *
  *  The select expressions match too much, but the c_fix code is cautious.
  *
  *  CTRL might be: CTRL _CTRL ISCTRL BSD43_CTRL ...
  */
 fix = {
-    hackname  = ctrl_quotes_use;
-    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
-    c_fix     = char_macro_use;
-    c_fix_arg = "CTRL";
-};
-  
-fix = {
     hackname  = ctrl_quotes_def;
     select    = "define[ \t]+[A-Z0-9_]+CTRL\\(([a-zA-Z]).*'\\1'";
     c_fix     = char_macro_def;
     c_fix_arg = "CTRL";
+    test_text = "#define BSD43_CTRL(n, x) (('n'<<8)+x)";
 };
 
+fix = {
+    hackname  = ctrl_quotes_use;
+    select    = "define[ \t]+[A-Z0-9_]+[ \t]+[A-Z0-9_]+CTRL[ \t]*\\( *[^,']";
+    c_fix     = char_macro_use;
+    c_fix_arg = "CTRL";
+    test_text = "#define TIOCFOO BSD43_CTRL(T, 1)";
+};
+
 
 /*
  *  Check for missing ';' in struct
@@ -1293,9 +1309,11 @@
  *  Fix non-ansi machine name defines
  */
 fix = {
-    hackname = machine_name;
-    c_test   = machine_name;
-    c_fix    = machine_name;
+    hackname  = machine_name;
+    c_test    = machine_name;
+    c_fix     = machine_name;
+    test_text = "#ifdef i386 /* no uniform machine_name test, so\n"
+                "               this only works on i?86 machines */";
 };
 
 
@@ -2459,14 +2477,19 @@
 
 
 /*
- *  Fix multiple defines for NULL
+ *  Fix multiple defines for NULL.  Sometimes, we stumble into \r\n
+ *  terminated lines, so accommodate these.  Test both ways.
  */
 fix = {
-    hackname = undefine_null;
-    select = "^#[ \t]*define[ \t]*[ \t]NULL[ \t\r]";
-    bypass = "#[ \t]*(ifn|un)def[ \t]*[ \t]NULL($|[ \t\r])";
-    sed    = "/^#[ \t]*define[ \t][ \t]*NULL[ \t\r]/i\\\n"
-                "#undef NULL\n";
+    hackname  = undefine_null;
+    select    = "^#[ \t]*define[ \t]+NULL[ \t]";
+    bypass    = "#[ \t]*(ifn|un)def[ \t]+NULL($|[ \t\r])";
+
+    c_fix     = format;
+    c_fix_arg = "#ifndef NULL%2\n#define NULL%1%2\n#endif%2\n";
+    c_fix_arg = "^#[ \t]*define[ \t]*[ \t]NULL([^\r\n]+)([\r]*)\n";
+
+    test_text = "#define NULL 0UL\r\n#define NULL\t((void*)0)\n";
 };
 
 


More information about the Gcc-patches mailing list