};
! extern Wedged( Widget c_new, Widget old );
#endif /* X11_NEW_CHECK */
+*** inc/ansi/math.h
+--- res/ansi/math.h
+***************
+*** 1,5 ****
+
+
+ #if defined( NEXT_MATH_PREFIX_CHECK )
+! extern double __const__ mumble();
+ #endif /* NEXT_MATH_PREFIX_CHECK */
+--- 1,5 ----
+
+
+ #if defined( NEXT_MATH_PREFIX_CHECK )
+! extern double mumble();
+ #endif /* NEXT_MATH_PREFIX_CHECK */
+*** inc/ansi/stdlib.h
+--- res/ansi/stdlib.h
+***************
+*** 1,5 ****
+
+
+ #if defined( NEXT_VOLITILE_CHECK )
+! extern volatile void abort();
+ #endif /* NEXT_VOLITILE_CHECK */
+--- 1,5 ----
+
+
+ #if defined( NEXT_VOLITILE_CHECK )
+! extern void abort();
+ #endif /* NEXT_VOLITILE_CHECK */
*** inc/assert.h
--- res/assert.h
***************
+ #endif /* FIXINC_BROKEN_ASSERT_STDIO_CHECK */
+
+ #endif /* FIXINC_BROKEN_ASSERT_STDLIB_CHECK */
+*** inc/bsd/libc.h
+--- res/bsd/libc.h
+***************
+*** 1,5 ****
+
+
+ #if defined( NEXT_TEMPLATE_CHECK )
+! extern mumble( char * template); /* fix */
+ #endif /* NEXT_TEMPLATE_CHECK */
+--- 1,5 ----
+
+
+ #if defined( NEXT_TEMPLATE_CHECK )
+! extern mumble( char *); /* fix */
+ #endif /* NEXT_TEMPLATE_CHECK */
*** inc/c_asm.h
--- res/c_asm.h
***************
# define DBL_DIG 0 /* somthin' */
+ #endif
#endif /* LIMITS_IFNDEFS_CHECK */
+*** inc/machine/ansi.h
+--- res/machine/ansi.h
+***************
+*** 1,5 ****
+
+
+ #if defined( MACHINE_ANSI_H_VA_LIST_CHECK )
+! # define _BSD_VA_LIST_ char**
+ #endif /* MACHINE_ANSI_H_VA_LIST_CHECK */
+--- 1,5 ----
+
+
+ #if defined( MACHINE_ANSI_H_VA_LIST_CHECK )
+! # define _BSD_VA_LIST_ __builtin_va_list
+ #endif /* MACHINE_ANSI_H_VA_LIST_CHECK */
*** inc/math.h
--- res/math.h
***************
-*** 1,44 ****
+*** 1,41 ****
#if defined( BROKEN_CABS_CHECK )
#endif /* M88K_BAD_HYPOT_OPT_CHECK */
- #if defined( MATH_EXCEPTION_CHECK )
- typedef struct exception t_math_exception;
- #endif /* MATH_EXCEPTION_CHECK */
---- 1,69 ----
+--- 1,61 ----
+ #ifndef FIXINC_MATH_EXCEPTION_CHECK
+ #define FIXINC_MATH_EXCEPTION_CHECK 1
+
#endif /* M88K_BAD_HYPOT_OPT_CHECK */
- #if defined( MATH_EXCEPTION_CHECK )
- typedef struct exception t_math_exception;
- #endif /* MATH_EXCEPTION_CHECK */
+***************
+*** 45,49 ****
+--- 65,76 ----
+
+
+ #if defined( MATH_HUGE_VAL_IFNDEF_CHECK )
++ #ifndef HUGE_VAL
+ # define HUGE_VAL 3.4e+40
++ #endif
+ #endif /* MATH_HUGE_VAL_IFNDEF_CHECK */
+ #ifdef __cplusplus
+ #undef exception
+ #endif
*** inc/stdlib.h
--- res/stdlib.h
***************
-*** 1,7 ****
+*** 1,12 ****
#if defined( ARM_WCHAR_CHECK )
! # define __wchar_t short
# endif /* __wchar_t */
#endif /* ARM_WCHAR_CHECK */
---- 1,7 ----
+
+
+ #if defined( NEWS_OS_RECURSION_CHECK )
+ #include <stdlib.h>
+ #endif /* NEWS_OS_RECURSION_CHECK */
+--- 1,14 ----
#if defined( ARM_WCHAR_CHECK )
! # define _GCC_WCHAR_T short
# endif /* __wchar_t */
#endif /* ARM_WCHAR_CHECK */
+
+
+ #if defined( NEWS_OS_RECURSION_CHECK )
++ #ifdef BOGUS_RECURSION
+ #include <stdlib.h>
++ #endif
+ #endif /* NEWS_OS_RECURSION_CHECK */
*** inc/sundev/vuid_event.h
--- res/sundev/vuid_event.h
***************
*** inc/testing.h
--- res/testing.h
***************
-*** 1,35 ****
+*** 1,36 ****
#if defined( CTRL_QUOTES_DEF_CHECK )
#define NULL ((void*)0)
#endif /* UNDEFINE_NULL_CHECK */
---- 1,39 ----
+--- 1,40 ----
#if defined( CTRL_QUOTES_DEF_CHECK )
/*
* Fix Command Arguments for Arm_Wchar
*/
-const char* apzArm_WcharPatch[] = { "sed",
- "-e", "s/\\(#[ \t]*ifndef[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/",
- "-e", "s/\\(#[ \t]*define[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/",
+const char* apzArm_WcharPatch[] = {
+ "format",
+ "%1_GCC_WCHAR_T",
+ "(#[ \t]*(ifndef|define)[ \t]+)__wchar_t",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
tSCC zAvoid_Bool_DefineSelect0[] =
"#[ \t]*define[ \t]+bool[ \t]";
-#define AVOID_BOOL_DEFINE_TEST_CT 1
+/*
+ * content bypass pattern - skip fix if pattern found
+ */
+tSCC zAvoid_Bool_DefineBypass0[] =
+ "we must use the C\\+\\+ compiler's type";
+
+#define AVOID_BOOL_DEFINE_TEST_CT 2
tTestDesc aAvoid_Bool_DefineTests[] = {
+ { TT_NEGREP, zAvoid_Bool_DefineBypass0, (regex_t*)NULL },
{ TT_EGREP, zAvoid_Bool_DefineSelect0, (regex_t*)NULL }, };
/*
tSCC zAvoid_Bool_TypeSelect0[] =
"^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
-#define AVOID_BOOL_TYPE_TEST_CT 1
+/*
+ * content bypass pattern - skip fix if pattern found
+ */
+tSCC zAvoid_Bool_TypeBypass0[] =
+ "we must use the C\\+\\+ compiler's type";
+
+#define AVOID_BOOL_TYPE_TEST_CT 2
tTestDesc aAvoid_Bool_TypeTests[] = {
+ { TT_NEGREP, zAvoid_Bool_TypeBypass0, (regex_t*)NULL },
{ TT_EGREP, zAvoid_Bool_TypeSelect0, (regex_t*)NULL }, };
/*
/*
* Fix Command Arguments for Hpux_Systime
*/
-const char* apzHpux_SystimePatch[] = { "sed",
- "-e", "s/^extern struct sigevent;/struct sigevent;/",
+const char* apzHpux_SystimePatch[] = {
+ "format",
+ "struct sigevent;",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
const char* apzLimits_IfndefsPatch[] = {
"format",
"#ifndef %1\n\
-%0#endif\n",
- "^[ \t]*#[ \t]*define[ \t]+((FLT|DBL)_(MIN|MAX|DIG))[ \t][^\n\
-]*\n",
+%0\n\
+#endif",
+ "^[ \t]*#[ \t]*define[ \t]+((FLT|DBL)_(MIN|MAX|DIG))[ \t].*",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* content selection pattern - do fix if pattern found
*/
tSCC zMachine_Ansi_H_Va_ListSelect0[] =
- "_BSD_VA_LIST_";
+ "define[ \t]+_BSD_VA_LIST_[ \t]";
/*
* content bypass pattern - skip fix if pattern found
/*
* Fix Command Arguments for Machine_Ansi_H_Va_List
*/
-const char* apzMachine_Ansi_H_Va_ListPatch[] = { "sed",
- "-e", "s/\\(_BSD_VA_LIST_[ \t][ \t]*\\).*$/\\1__builtin_va_list/",
+const char* apzMachine_Ansi_H_Va_ListPatch[] = {
+ "format",
+ "%1__builtin_va_list",
+ "(define[ \t]+_BSD_VA_LIST_[ \t]+).*",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* File name selection pattern
*/
tSCC zMath_Huge_Val_IfndefList[] =
- "|math/math.h|";
+ "|math.h|math/math.h|";
/*
* Machine/OS name selection pattern
*/
* content selection pattern - do fix if pattern found
*/
tSCC zMath_Huge_Val_IfndefSelect0[] =
- "define[ \t]*HUGE_VAL";
+ "define[ \t]+HUGE_VAL";
#define MATH_HUGE_VAL_IFNDEF_TEST_CT 1
tTestDesc aMath_Huge_Val_IfndefTests[] = {
/*
* Fix Command Arguments for Math_Huge_Val_Ifndef
*/
-const char* apzMath_Huge_Val_IfndefPatch[] = { "sed",
- "-e", "/define[ \t]HUGE_VAL[ \t]/i\\\n\
-#ifndef HUGE_VAL\n",
- "-e", "/define[ \t]HUGE_VAL[ \t]/a\\\n\
-#endif\n",
+const char* apzMath_Huge_Val_IfndefPatch[] = {
+ "format",
+ "#ifndef HUGE_VAL\n\
+%0\n\
+#endif",
+ "^[ \t]*#[ \t]*define[ \t]+HUGE_VAL[ \t].*",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* content selection pattern - do fix if pattern found
*/
tSCC zNews_Os_RecursionSelect0[] =
- "#include <stdlib.h>";
+ "#include <stdlib\\.h>";
#define NEWS_OS_RECURSION_TEST_CT 1
tTestDesc aNews_Os_RecursionTests[] = {
/*
* Fix Command Arguments for News_Os_Recursion
*/
-const char* apzNews_Os_RecursionPatch[] = { "sed",
- "-e", "/^#include <stdlib.h>/i\\\n\
-#ifdef BOGUS_RECURSION\n",
- "-e", "/^#include <stdlib.h>/a\\\n\
-#endif\n",
+const char* apzNews_Os_RecursionPatch[] = {
+ "format",
+ "#ifdef BOGUS_RECURSION\n\
+%0\n\
+#endif",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* content selection pattern - do fix if pattern found
*/
tSCC zNext_Math_PrefixSelect0[] =
- "^extern.*double.*__const__.*";
+ "^extern[ \t]+double[ \t]+__const__[ \t]";
#define NEXT_MATH_PREFIX_TEST_CT 1
tTestDesc aNext_Math_PrefixTests[] = {
/*
* Fix Command Arguments for Next_Math_Prefix
*/
-const char* apzNext_Math_PrefixPatch[] = { "sed",
- "-e", "/^extern.*double.*__const__.*sqrt(/s/__const__//",
- "-e", "/^extern.*double.*__const__.*fabs(/s/__const__//",
- "-e", "/^extern.*double.*__const__.*cos(/s/__const__//",
- "-e", "/^extern.*double.*__const__.*hypot(/s/__const__//",
- "-e", "/^extern.*double.*__const__.*sin(/s/__const__//",
+const char* apzNext_Math_PrefixPatch[] = {
+ "format",
+ "extern double %1(",
+ "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* content selection pattern - do fix if pattern found
*/
tSCC zNext_TemplateSelect0[] =
- "template";
+ "[ \t]template\\)";
#define NEXT_TEMPLATE_TEST_CT 1
tTestDesc aNext_TemplateTests[] = {
/*
* Fix Command Arguments for Next_Template
*/
-const char* apzNext_TemplatePatch[] = { "sed",
- "-e", "/\\(.*template\\)/s/template//",
- "-e", "/extern.*volatile.*void.*abort/s/volatile//",
+const char* apzNext_TemplatePatch[] = {
+ "format",
+ "(%1)",
+ "\\(([^)]*)[ \t]template\\)",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* content selection pattern - do fix if pattern found
*/
tSCC zNext_VolitileSelect0[] =
- "volatile";
+ "^extern[ \t]+volatile[ \t]+void[ \t]";
#define NEXT_VOLITILE_TEST_CT 1
tTestDesc aNext_VolitileTests[] = {
/*
* Fix Command Arguments for Next_Volitile
*/
-const char* apzNext_VolitilePatch[] = { "sed",
- "-e", "/extern.*volatile.*void.*exit/s/volatile//",
- "-e", "/extern.*volatile.*void.*abort/s/volatile//",
+const char* apzNext_VolitilePatch[] = {
+ "format",
+ "extern void %1(",
+ "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(",
(char*)NULL };
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* List of all fixes
*/
-#define REGEX_COUNT 113
+#define REGEX_COUNT 115
#define MACH_LIST_SIZE_LIMIT 279
#define FIX_COUNT 121
{ zArm_WcharName, zArm_WcharList,
apzArm_WcharMachs,
- ARM_WCHAR_TEST_CT, FD_MACH_ONLY,
+ ARM_WCHAR_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aArm_WcharTests, apzArm_WcharPatch },
{ zAux_AsmName, zAux_AsmList,
{ zHpux_SystimeName, zHpux_SystimeList,
apzHpux_SystimeMachs,
- HPUX_SYSTIME_TEST_CT, FD_MACH_ONLY,
+ HPUX_SYSTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aHpux_SystimeTests, apzHpux_SystimePatch },
{ zIp_Missing_SemiName, zIp_Missing_SemiList,
{ zMachine_Ansi_H_Va_ListName, zMachine_Ansi_H_Va_ListList,
apzMachine_Ansi_H_Va_ListMachs,
- MACHINE_ANSI_H_VA_LIST_TEST_CT, FD_MACH_ONLY,
+ MACHINE_ANSI_H_VA_LIST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aMachine_Ansi_H_Va_ListTests, apzMachine_Ansi_H_Va_ListPatch },
{ zMachine_NameName, zMachine_NameList,
{ zMath_Huge_Val_IfndefName, zMath_Huge_Val_IfndefList,
apzMath_Huge_Val_IfndefMachs,
- MATH_HUGE_VAL_IFNDEF_TEST_CT, FD_MACH_ONLY,
+ MATH_HUGE_VAL_IFNDEF_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aMath_Huge_Val_IfndefTests, apzMath_Huge_Val_IfndefPatch },
{ zNested_MotorolaName, zNested_MotorolaList,
{ zNews_Os_RecursionName, zNews_Os_RecursionList,
apzNews_Os_RecursionMachs,
- NEWS_OS_RECURSION_TEST_CT, FD_MACH_ONLY,
+ NEWS_OS_RECURSION_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aNews_Os_RecursionTests, apzNews_Os_RecursionPatch },
{ zNext_Math_PrefixName, zNext_Math_PrefixList,
apzNext_Math_PrefixMachs,
- NEXT_MATH_PREFIX_TEST_CT, FD_MACH_ONLY,
+ NEXT_MATH_PREFIX_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aNext_Math_PrefixTests, apzNext_Math_PrefixPatch },
{ zNext_TemplateName, zNext_TemplateList,
apzNext_TemplateMachs,
- NEXT_TEMPLATE_TEST_CT, FD_MACH_ONLY,
+ NEXT_TEMPLATE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aNext_TemplateTests, apzNext_TemplatePatch },
{ zNext_VolitileName, zNext_VolitileList,
apzNext_VolitileMachs,
- NEXT_VOLITILE_TEST_CT, FD_MACH_ONLY,
+ NEXT_VOLITILE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aNext_VolitileTests, apzNext_VolitilePatch },
{ zNext_Wait_UnionName, zNext_Wait_UnionList,
hackname = arm_wchar;
files = stdlib.h;
select = "#[ \t]*define[ \t]*__wchar_t";
- sed = "s/\\(#[ \t]*ifndef[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
- sed = "s/\\(#[ \t]*define[ \t]*\\)__wchar_t/\\1_GCC_WCHAR_T/";
+
+ c_fix = format;
+ c_fix_arg = "%1_GCC_WCHAR_T";
+ c_fix_arg = "(#[ \t]*(ifndef|define)[ \t]+)__wchar_t";
+
test_text =
"# ifndef \t __wchar_t /* we don't have wchar_t yet, ... */\n"
"# define __wchar_t short\n"
files = tinfo.h;
select = "#[ \t]*define[ \t]+bool[ \t]";
+ bypass = "we must use the C\\+\\+ compiler's type";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
files = tinfo.h;
select = "^[ \t]*typedef[ \t].*[ \t]bool[ \t]*;";
+ bypass = "we must use the C\\+\\+ compiler's type";
c_fix = format;
c_fix_arg = "#ifndef __cplusplus\n%0\n#endif";
* properly in most cases, they don't allow you to take a pointer to the
* "something" being modified. To get around this limitation, change these
* statements to be of the form '#define something _FOOsomething'.
+ *
+ * sed ain't egrep, lesson 2463: sed can use self-referential
+ * regular expressions. In the substitute expression below,
+ * "\\1" and "\\2" refer to subexpressions found earlier in the
+ * same match. So, we continue to use sed. "extern_prefix" will
+ * be a rare match anyway...
*/
fix = {
hackname = bad_lval;
hackname = hpux_systime;
files = sys/time.h;
select = "^extern struct sigevent;";
- sed = "s/^extern struct sigevent;/struct sigevent;/";
+
+ c_fix = format;
+ c_fix_arg = "struct sigevent;";
+
test_text = 'extern struct sigevent;';
};
bypass = "ifndef[ \t]+FLT_MIN";
c_fix = format;
- c_fix_arg = "#ifndef %1\n%0#endif\n";
+ c_fix_arg = "#ifndef %1\n%0\n#endif";
c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+"
- "((FLT|DBL)_(MIN|MAX|DIG))"
- "[ \t][^\n]*\n";
+ "((FLT|DBL)_(MIN|MAX|DIG))[ \t].*";
test_text = " #\tdefine\tDBL_DIG \t 0 /* somthin' */";
};
fix = {
hackname = machine_ansi_h_va_list;
files = machine/ansi.h;
- select = '_BSD_VA_LIST_';
+ select = "define[ \t]+_BSD_VA_LIST_[ \t]";
bypass = '__builtin_va_list';
- sed = "s/\\(_BSD_VA_LIST_[ \t][ \t]*\\).*$/\\1__builtin_va_list/";
+ c_fix = format;
+ c_fix_arg = "%1__builtin_va_list";
+ c_fix_arg = "(define[ \t]+_BSD_VA_LIST_[ \t]+).*";
+
+ test_text = " # define _BSD_VA_LIST_\tchar**";
};
hackname = machine_name;
c_test = machine_name;
c_fix = machine_name;
- test_text =
- "#if /* MACH_DIFF: */ \\\n"
- "\t defined( i386 ) \\\n"
- "\t|| defined( sparc ) /*\n"
- "no uniform test, so be careful :-) */";
+ test_text = "/* MACH_DIFF: */\n"
+ "#if defined( i386 )"
+ " || defined( sparc )"
+ "\n/* no uniform test, so be careful :-) */";
};
hackname = math_exception;
files = math.h;
select = "struct exception";
- bypass = "We have a problem when using C\\+\\+";
+ bypass = 'We have a problem when using C\+\+';
c_fix = wrap;
c_fix_arg = "#ifdef __cplusplus\n"
test_text = "typedef struct exception t_math_exception;";
};
+
+/*
+ * This looks pretty broken to me. ``dbl_max_def'' will contain
+ * "define DBL_MAX " at the start, when what we really want is just
+ * the value portion. Can't figure out how to write a test case
+ * for this either :-(
+ */
fix = {
hackname = math_huge_val_from_dbl_max;
files = math.h;
"\tfi";
};
+
/*
* In any case, put #ifndef .. #endif around #define HUGE_VAL in math.h.
*/
fix = {
hackname = math_huge_val_ifndef;
+ files = math.h;
files = math/math.h;
- select = "define[ \t]*HUGE_VAL";
+ select = "define[ \t]+HUGE_VAL";
- sed = "/define[ \t]HUGE_VAL[ \t]/i\\\n#ifndef HUGE_VAL\n";
- sed = "/define[ \t]HUGE_VAL[ \t]/a\\\n#endif\n";
+ c_fix = format;
+ c_fix_arg = "#ifndef HUGE_VAL\n%0\n#endif";
+ c_fix_arg = "^[ \t]*#[ \t]*define[ \t]+HUGE_VAL[ \t].*";
+
+ test_text = "# define\tHUGE_VAL 3.4e+40";
};
fix = {
hackname = news_os_recursion;
files = stdlib.h;
- select = "#include <stdlib.h>";
- sed = "/^#include <stdlib.h>/i\\\n"
- "#ifdef BOGUS_RECURSION\n";
- sed = "/^#include <stdlib.h>/a\\\n"
- "#endif\n";
+ select = '#include <stdlib\.h>';
+
+ c_fix = format;
+ c_fix_arg = "#ifdef BOGUS_RECURSION\n%0\n#endif";
+ test_text = "#include <stdlib.h>";
};
* These conflict with the built-in functions.
*/
fix = {
- hackname = next_math_prefix;
- files = ansi/math.h;
- select = "^extern.*double.*__const__.*";
+ hackname = next_math_prefix;
+ files = ansi/math.h;
+ select = "^extern[ \t]+double[ \t]+__const__[ \t]";
+
+ c_fix = format;
+ c_fix_arg = "extern double %1(";
+ c_fix_arg = "^extern[ \t]+double[ \t]+__const__[ \t]+([a-z]+)\\(";
- sed = "/^extern.*double.*__const__.*sqrt(/s/__const__//";
- sed = "/^extern.*double.*__const__.*fabs(/s/__const__//";
- sed = "/^extern.*double.*__const__.*cos(/s/__const__//";
- sed = "/^extern.*double.*__const__.*hypot(/s/__const__//";
- sed = "/^extern.*double.*__const__.*sin(/s/__const__//";
+ test_text = "extern\tdouble\t__const__\tmumble();";
};
/*
* NeXT 3.2 uses the word "template" as a parameter for some
* functions. GCC reports an invalid use of a reserved key word
- * with the built-in functions. NeXT 3.2 includes the keyword
- * volatile in the prototype for abort(). This conflicts with
- * the built-in definition.
+ * with the built-in functions.
*/
fix = {
hackname = next_template;
files = bsd/libc.h;
- select = template;
+ select = "[ \t]template\\)";
- sed = '/\(.*template\)/s/template//';
- sed = "/extern.*volatile.*void.*abort/s/volatile//";
+ c_fix = format;
+ c_fix_arg = "(%1)";
+ c_fix_arg = "\\(([^)]*)[ \t]template\\)";
+ test_text = "extern mumble( char * template); /* fix */";
};
fix = {
hackname = next_volitile;
files = ansi/stdlib.h;
- select = volatile;
+ select = "^extern[ \t]+volatile[ \t]+void[ \t]";
+
+ c_fix = format;
+ c_fix_arg = "extern void %1(";
+ c_fix_arg = "^extern[ \t]+volatile[ \t]+void[ \t]+(exit|abort)\\(";
- sed = "/extern.*volatile.*void.*exit/s/volatile//";
- sed = "/extern.*volatile.*void.*abort/s/volatile//";
+ test_text = "extern\tvolatile\tvoid\tabort();";
};