From patchwork Sun Aug 16 14:20:27 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zack Weinberg X-Patchwork-Id: 8234 Received: (qmail 96142 invoked by alias); 16 Aug 2015 14:20:51 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 96132 invoked by uid 89); 16 Aug 2015 14:20:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-yk0-f172.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-type; bh=giOXCMHyfvLqDVGuMlxH+7UNRHaDwVvmpjSQRYS0NNU=; b=IAzqQaTni7WPYoiQwLJAPGP3JsHoDFmnHLuAXBttUeM2xjubb2z5v4eaQ0XiwkeG1D M2/ZWCGxe+7H0osd0BKIvFLf6E+c8psSBeJh4q+IY0HGoR0LH2vDeSwKsoqIcGN7jCao W+v8IHJuVLSaA6aomBB64nraVLSfeIAZywtEe76GgAgOpSdqExG7wSYLpAf3UGHacBSo IelF3I+Zn9ShqzKwWz6lqoBj9TspZvrn6yjtht12YraZOSP1rgfQyUoBc3+fN1i2XMru SoZIl83iHfPsHmVCnQAE17peX4b3rxKQNexEY4TN18zz+JsvnriBKE5zNJY9yWpDYvsI E7Pg== X-Received: by 10.170.35.136 with SMTP id 130mr37650875ykd.37.1439734846846; Sun, 16 Aug 2015 07:20:46 -0700 (PDT) Subject: Re: [2.23 PATCH] Desupport regexp.h (bug 18681) To: libc-alpha@sourceware.org, Carlos O'Donell References: <20150805152109.2FDA114B9A@panix1.panix.com> <20150806024000.GR26572@vapier> <20150807011638.6F82914B9A@panix1.panix.com> <20150807021416.GG30077@vapier> <55CDF1B3.9090801@panix.com> From: Zack Weinberg Message-ID: <55D09C2B.6000801@panix.com> Date: Sun, 16 Aug 2015 10:20:27 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.1.0 MIME-Version: 1.0 In-Reply-To: <55CDF1B3.9090801@panix.com> On 08/14/2015 09:48 AM, Zack Weinberg wrote: > On 08/06/2015 10:14 PM, Mike Frysinger wrote: >> i'm ok with this, but i think Carlos wanted to look at it first > > Ping? Rebased patch attached. Rebased again, now without a merge botch in NEWS. From 38848058ad265986aa974f59e101bb36bb7d932c Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Sun, 12 Jul 2015 15:27:34 -0400 Subject: [PATCH] Desupport regexp.h (bug 18681) * misc/regexp.h: This interface is no longer supported. Remove all contents, leaving only an #error directive. * misc/regexp.c (loc1, loc2, locs, step, advance): Demote to compatibility symbols. --- NEWS | 6 +- misc/regexp.c | 29 +++++++-- misc/regexp.h | 203 +--------------------------------------------------------- 3 files changed, 29 insertions(+), 209 deletions(-) diff --git a/NEWS b/NEWS index 12b258a..64230e2 100644 --- a/NEWS +++ b/NEWS @@ -10,9 +10,11 @@ Version 2.23 * The following bugs are resolved with this release: 16517, 16519, 16520, 16734, 17905, 18084, 18086, 18265, 18480, 18525, - 18618, 18647, 18661, 18674, 18778, 18781, 18787, 18789, 18790, 18795, - 18820, 18824. + 18618, 18647, 18661, 18681, 18674, 18778, 18781, 18787, 18789, 18790, + 18795, 18820, 18824. +* The obsolete header has been removed. Programs that require + this header must be updated to use instead. Version 2.22 diff --git a/misc/regexp.c b/misc/regexp.c index ee7d572..ef5e18b 100644 --- a/misc/regexp.c +++ b/misc/regexp.c @@ -1,4 +1,4 @@ -/* Define function and variables for the obsolete interface. +/* Compatibility symbols for the obsolete interface. Copyright (C) 1996-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -17,17 +17,27 @@ License along with the GNU C Library; if not, see . */ -/* We don't include regexp.h here because of the macros it requires, and - because it now contains an unconditional #warning. */ +/* regexp.h now contains only an #error directive, so it cannot be + used in this file. + + The function that would produce an 'expbuf' to use as the second + argument to 'step' and 'advance' was defined only in regexp.h, + as its definition depended on macros defined by the user. */ #include +#include + +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) /* Define the variables used for the interface. */ char *loc1; char *loc2; +compat_symbol (libc, loc1, loc1, GLIBC_2_0); +compat_symbol (libc, loc2, loc2, GLIBC_2_0); /* Although we do not support the use we define this variable as well. */ char *locs; +compat_symbol (libc, locs, locs, GLIBC_2_0); /* Find the next match in STRING. The compiled regular expression is @@ -35,7 +45,8 @@ char *locs; first character matched and `loc2' points to the next unmatched character. */ int -__step (const char *string, const char *expbuf) +weak_function attribute_compat_text_section +step (const char *string, const char *expbuf) { regmatch_t match; /* We only need info about the full match. */ @@ -50,14 +61,15 @@ __step (const char *string, const char *expbuf) loc2 = (char *) string + match.rm_eo; return 1; } -weak_alias (__step, step) +compat_symbol (libc, step, step, GLIBC_2_0); /* Match the beginning of STRING with the compiled regular expression in EXPBUF. If the match is successful `loc2' will contain the position of the first unmatched character. */ int -__advance (const char *string, const char *expbuf) +weak_function attribute_compat_text_section +advance (const char *string, const char *expbuf) { regmatch_t match; /* We only need info about the full match. */ @@ -74,4 +86,7 @@ __advance (const char *string, const char *expbuf) loc2 = (char *) string + match.rm_eo; return 1; } -weak_alias (__advance, advance) +compat_symbol (libc, advance, advance, GLIBC_2_0); + + +#endif /* SHLIB_COMPAT (2.0, 2.23) */ diff --git a/misc/regexp.h b/misc/regexp.h index 42394f7..9f5c413 100644 --- a/misc/regexp.h +++ b/misc/regexp.h @@ -25,206 +25,9 @@ were encouraged to use instead. It was officially withdrawn from the standard in Issue 6 (aka POSIX.1-2001). - This header is provided only for backward compatibility. - It will be removed in the next release of the GNU C Library. - New code should use instead. */ + The GNU C Library provided this header through version 2.22. */ -#warning " will be removed in the next release of the GNU C Library." -#warning "Please update your code to use instead (no trailing 'p')." - -#include -#include -#include -#include -#include - -/* The implementation provided here emulates the needed functionality - by mapping to the POSIX regular expression matcher. The interface - for the here included function is weird (this really is a harmless - word). - - The user has to provide six macros before this header file can be - included: - - INIT Declarations vor variables which can be used by the - other macros. - - GETC() Return the value of the next character in the regular - expression pattern. Successive calls should return - successive characters. - - PEEKC() Return the value of the next character in the regular - expression pattern. Immediately successive calls to - PEEKC() should return the same character which should - also be the next character returned by GETC(). - - UNGETC(c) Cause `c' to be returned by the next call to GETC() and - PEEKC(). - - RETURN(ptr) Used for normal exit of the `compile' function. `ptr' - is a pointer to the character after the last character of - the compiled regular expression. - - ERROR(val) Used for abnormal return from `compile'. `val' is the - error number. The error codes are: - 11 Range endpoint too large. - 16 Bad number. - 25 \digit out of range. - 36 Illegal or missing delimiter. - 41 No remembered search string. - 42 \( \) imbalance. - 43 Too many \(. - 44 More tan two numbers given in \{ \}. - 45 } expected after \. - 46 First number exceeds second in \{ \}. - 49 [ ] imbalance. - 50 Regular expression overflow. - - */ - -__BEGIN_DECLS - -/* Interface variables. They contain the results of the successful - calls to `setp' and `advance'. */ -extern char *loc1; -extern char *loc2; - -/* The use of this variable in the `advance' function is not - supported. */ -extern char *locs; - - -#ifndef __DO_NOT_DEFINE_COMPILE -/* Get and compile the user supplied pattern up to end of line or - string or until EOF is seen, whatever happens first. The result is - placed in the buffer starting at EXPBUF and delimited by ENDBUF. - - This function cannot be defined in the libc itself since it depends - on the macros. */ -char * -compile (char *__restrict instring, char *__restrict expbuf, - const char *__restrict endbuf, int eof) -{ - char *__input_buffer = NULL; - size_t __input_size = 0; - size_t __current_size = 0; - int __ch; - int __error; - INIT - - /* Align the expression buffer according to the needs for an object - of type `regex_t'. Then check for minimum size of the buffer for - the compiled regular expression. */ - regex_t *__expr_ptr; -# if defined __GNUC__ && __GNUC__ >= 2 - const size_t __req = __alignof__ (regex_t *); -# else - /* How shall we find out? We simply guess it and can change it is - this really proofs to be wrong. */ - const size_t __req = 8; -# endif - expbuf += __req; - expbuf -= (expbuf - ((char *) 0)) % __req; - if (endbuf < expbuf + sizeof (regex_t)) - { - ERROR (50); - } - __expr_ptr = (regex_t *) expbuf; - /* The remaining space in the buffer can be used for the compiled - pattern. */ - __expr_ptr->__REPB_PREFIX (buffer) = expbuf + sizeof (regex_t); - __expr_ptr->__REPB_PREFIX (allocated) - = endbuf - (char *) __expr_ptr->__REPB_PREFIX (buffer); - - while ((__ch = (GETC ())) != eof) - { - if (__ch == '\0' || __ch == '\n') - { - UNGETC (__ch); - break; - } - - if (__current_size + 1 >= __input_size) - { - size_t __new_size = __input_size ? 2 * __input_size : 128; - char *__new_room = (char *) alloca (__new_size); - /* See whether we can use the old buffer. */ - if (__new_room + __new_size == __input_buffer) - { - __input_size += __new_size; - __input_buffer = (char *) memcpy (__new_room, __input_buffer, - __current_size); - } - else if (__input_buffer + __input_size == __new_room) - __input_size += __new_size; - else - { - __input_size = __new_size; - __input_buffer = (char *) memcpy (__new_room, __input_buffer, - __current_size); - } - } - __input_buffer[__current_size++] = __ch; - } - if (__current_size) - __input_buffer[__current_size++] = '\0'; - else - __input_buffer = ""; - - /* Now compile the pattern. */ - __error = regcomp (__expr_ptr, __input_buffer, REG_NEWLINE); - if (__error != 0) - /* Oh well, we have to translate POSIX error codes. */ - switch (__error) - { - case REG_BADPAT: - case REG_ECOLLATE: - case REG_ECTYPE: - case REG_EESCAPE: - case REG_BADRPT: - case REG_EEND: - case REG_ERPAREN: - default: - /* There is no matching error code. */ - ERROR (36); - case REG_ESUBREG: - ERROR (25); - case REG_EBRACK: - ERROR (49); - case REG_EPAREN: - ERROR (42); - case REG_EBRACE: - ERROR (44); - case REG_BADBR: - ERROR (46); - case REG_ERANGE: - ERROR (11); - case REG_ESPACE: - case REG_ESIZE: - ERROR (50); - } - - /* Everything is ok. */ - RETURN ((char *) (__expr_ptr->__REPB_PREFIX (buffer) - + __expr_ptr->__REPB_PREFIX (used))); -} -#endif - - -/* Find the next match in STRING. The compiled regular expression is - found in the buffer starting at EXPBUF. `loc1' will return the - first character matched and `loc2' points to the next unmatched - character. */ -extern int step (const char *__restrict __string, - const char *__restrict __expbuf) __THROW; - -/* Match the beginning of STRING with the compiled regular expression - in EXPBUF. If the match is successful `loc2' will contain the - position of the first unmatched character. */ -extern int advance (const char *__restrict __string, - const char *__restrict __expbuf) __THROW; - - -__END_DECLS +#error "The GNU C Library no longer implements ." +#error "Please update your code to use instead (no trailing 'p')." #endif /* regexp.h */ -- 2.5.0