This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Reorganize inclusions in regex and some synchronization [take 2]


> Don't send me patches for your version of the code.  The patch doesn't
> apply and even after correcting it the compilation fails.

Redone against current CVS.

This patch also fixes a few long standing problems with compiling regex 
outside of glibc:
- lack of a #define for __wcrtomb (to be used outside libc)
- a typo in the #define for __mempcpy
- two occurrences of a construct that are rejected by some compilers, notably 
SGI CC, which fail to compute correctly the type of a comma expression.

2002-02-20  Paolo Bonzini <bonzini at gnu dot org>

	* posix/regcomp.c: remove inclusions from here...
	* posix/regexec.c: ... here...
	* posix/regex_internal.c: ... and here...
	* posix/regex_internal.h: and move them here
	* posix/regex.c: only include sys/types.h before regex.h.
	Include regex_internal.h here.  Include regex_internal.c
	before regcomp.c and regexec.c (might expose more
	opportunities to the C compiler).

	* posix/regcomp.c (parse_expression): fix construct
	rejected by SGI CC

	* posix/regex_internal.h [!_LIBC] (__mempcpy): fix typo
	[!_LIBC] (__wcrtomb): new definition
	[!_LIBC]: conditionalize enabling of I18N on HAVE_WCSCOLL and
	HAVE_LOCALE_H as well

Paolo
diff -prNU3 regex-old/regcomp.c regex/regcomp.c
--- regex-old/regcomp.c	Thu Feb 20 08:59:51 2003
+++ regex/regcomp.c	Thu Feb 20 09:34:28 2003
@@ -18,56 +18,6 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_WCHAR_H || defined _LIBC
-# include <wchar.h>
-#endif /* HAVE_WCHAR_H || _LIBC */
-#if defined HAVE_WCTYPE_H || defined _LIBC
-# include <wctype.h>
-#endif /* HAVE_WCTYPE_H || _LIBC */
-
-/* In case that the system doesn't have isblank().  */
-#if !defined _LIBC && !defined HAVE_ISBLANK && !defined isblank
-# define isblank(ch) ((ch) == ' ' || (ch) == '\t')
-#endif
-
-#ifdef _LIBC
-# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
-#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
-#   include <locale/localeinfo.h>
-#   include <locale/elem-hash.h>
-#   include <locale/coll-lookup.h>
-# endif
-#endif
-
-/* This is for other GNU distributions with internationalized messages.  */
-#if HAVE_LIBINTL_H || defined _LIBC
-# include <libintl.h>
-# ifdef _LIBC
-#  undef gettext
-#  define gettext(msgid) \
-  INTUSE(__dcgettext) (INTUSE(_libc_intl_domainname), msgid, LC_MESSAGES)
-# endif
-#else
-# define gettext(msgid) (msgid)
-#endif
-
-#ifndef gettext_noop
-/* This define is so xgettext can find the internationalizable
-   strings.  */
-# define gettext_noop(String) String
-#endif
-
-#include <regex.h>
-#include "regex_internal.h"
-
 static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
 					  int length, reg_syntax_t syntax);
 static void re_compile_fastmap_iter (regex_t *bufp,
@@ -1995,7 +1945,10 @@ parse_expression (regexp, preg, token, s
 	      mbc_remain = create_tree (NULL, NULL, 0, new_idx);
 	      tree = create_tree (tree, mbc_remain, CONCAT, 0);
 	      if (BE (new_idx == -1 || mbc_remain == NULL || tree == NULL, 0))
-		return *err = REG_ESPACE, NULL;
+		{
+		  *err = REG_ESPACE;
+		  return NULL;
+		}
 	    }
 	}
 #endif
@@ -2097,7 +2050,10 @@ parse_expression (regexp, preg, token, s
 	  new_idx = re_dfa_add_node (dfa, *token, 0);
 	  tree = create_tree (NULL, NULL, 0, new_idx);
 	  if (BE (new_idx == -1 || tree == NULL, 0))
-	    return *err = REG_ESPACE, NULL;
+	    {
+	      *err = REG_ESPACE;
+	      return NULL;
+	    }
 	}
       /* We must return here, since ANCHORs can't be followed
 	 by repetition operators.
diff -prNU3 regex-old/regex.c regex/regex.c
--- regex-old/regex.c	Thu Feb 20 08:59:51 2003
+++ regex/regex.c	Thu Feb 20 09:07:51 2003
@@ -41,16 +41,15 @@
 #  define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
 #endif
 
-#if __GNUC__ >= 3
-# define BE(expr, val) __builtin_expect (expr, val)
-#else
-# define BE(expr, val) (expr)
-# define inline
-#endif
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+   <regex.h>.  */
+#include <sys/types.h>
+#include <regex.h>
+#include "regex_internal.h"
 
+#include "regex_internal.c"
 #include "regcomp.c"
 #include "regexec.c"
-#include "regex_internal.c"
 
 /* Binary backward compatibility.  */
 #if _LIBC
diff -prNU3 regex-old/regex_internal.c regex/regex_internal.c
--- regex-old/regex_internal.c	Thu Feb 20 08:59:51 2003
+++ regex/regex_internal.c	Thu Feb 20 09:08:41 2003
@@ -18,50 +18,6 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <assert.h>
-#include <ctype.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_WCHAR_H || defined _LIBC
-# include <wchar.h>
-#endif /* HAVE_WCHAR_H || _LIBC */
-#if defined HAVE_WCTYPE_H || defined _LIBC
-# include <wctype.h>
-#endif /* HAVE_WCTYPE_H || _LIBC */
-
-#ifdef _LIBC
-# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
-#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
-#  include <locale/localeinfo.h>
-#  include <locale/elem-hash.h>
-#  include <locale/coll-lookup.h>
-# endif
-#endif
-
-/* This is for other GNU distributions with internationalized messages.  */
-#if HAVE_LIBINTL_H || defined _LIBC
-# include <libintl.h>
-# ifdef _LIBC
-#  undef gettext
-#  define gettext(msgid) \
-  INTUSE(__dcgettext) (_libc_intl_domainname_internal, msgid, LC_MESSAGES)
-# endif
-#else
-# define gettext(msgid) (msgid)
-#endif
-
-#ifndef gettext_noop
-/* This define is so xgettext can find the internationalizable
-   strings.  */
-# define gettext_noop(String) String
-#endif
-
-#include "regex.h"
-#include "regex_internal.h"
-
 static void re_string_construct_common (const char *str, int len,
 					re_string_t *pstr,
 					RE_TRANSLATE_TYPE trans, int icase);
diff -prNU3 regex-old/regex_internal.h regex/regex_internal.h
--- regex-old/regex_internal.h	Thu Feb 20 09:01:35 2003
+++ regex/regex_internal.h	Thu Feb 20 09:34:20 2003
@@ -21,6 +21,70 @@
 #ifndef _REGEX_INTERNAL_H
 #define _REGEX_INTERNAL_H 1
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
+#include <ctype.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_LOCALE_H || defined _LIBC
+# include <locale.h>
+#endif
+#if defined HAVE_WCHAR_H || defined _LIBC
+# include <wchar.h>
+#endif /* HAVE_WCHAR_H || _LIBC */
+#if defined HAVE_WCTYPE_H || defined _LIBC
+# include <wctype.h>
+#endif /* HAVE_WCTYPE_H || _LIBC */
+
+/* In case that the system doesn't have isblank().  */
+#if !defined _LIBC && !defined HAVE_ISBLANK && !defined isblank
+# define isblank(ch) ((ch) == ' ' || (ch) == '\t')
+#endif
+
+#ifdef _LIBC
+# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
+#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
+#   include <locale/localeinfo.h>
+#   include <locale/elem-hash.h>
+#   include <locale/coll-lookup.h>
+# endif
+#endif
+
+/* This is for other GNU distributions with internationalized messages.  */
+#if HAVE_LIBINTL_H || defined _LIBC
+# include <libintl.h>
+# ifdef _LIBC
+#  undef gettext
+#  define gettext(msgid) \
+  INTUSE(__dcgettext) (INTUSE(_libc_intl_domainname), msgid, LC_MESSAGES)
+# endif
+#else
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+# define gettext_noop(String) String
+#endif
+
+#if (defined (MB_CUR_MAX) && HAVE_WCSCOLL && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_WCRTOMB && HAVE_MBRTOWC) || _LIBC
+#define RE_ENABLE_I18N
+#endif
+
+#if __GNUC__ >= 3
+# define BE(expr, val) __builtin_expect (expr, val)
+#else
+# define BE(expr, val) (expr)
+# define inline
+#endif
+
 /* Number of bits in a byte.  */
 #define BYTE_BITS 8
 /* Number of single byte character.  */
@@ -37,7 +101,8 @@
 # define __wctype wctype
 # define __iswctype iswctype
 # define __btowc btowc
-# define __mempcpy memcpy
+# define __mempcpy mempcpy
+# define __wcrtomb wcrtomb
 # define attribute_hidden
 #endif /* not _LIBC */
 
diff -prNU3 regex-old/regexec.c regex/regexec.c
--- regex-old/regexec.c	Thu Feb 20 09:01:55 2003
+++ regex/regexec.c	Thu Feb 20 09:10:52 2003
@@ -18,31 +18,6 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <assert.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined HAVE_WCHAR_H || defined _LIBC
-# include <wchar.h>
-#endif /* HAVE_WCHAR_H || _LIBC */
-#if defined HAVE_WCTYPE_H || defined _LIBC
-# include <wctype.h>
-#endif /* HAVE_WCTYPE_H || _LIBC */
-
-#ifdef _LIBC
-# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
-#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
-#  include <locale/localeinfo.h>
-#  include <locale/elem-hash.h>
-#  include <locale/coll-lookup.h>
-# endif
-#endif
-
-#include "regex.h"
-#include "regex_internal.h"
-
 static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
 				     re_string_t *input, int n);
 static void match_ctx_clean (re_match_context_t *mctx);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]