From owner-svn-src-head@FreeBSD.ORG Sun Mar 14 10:18:58 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9BB6C106564A; Sun, 14 Mar 2010 10:18:58 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 886468FC13; Sun, 14 Mar 2010 10:18:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2EAIwBI009491; Sun, 14 Mar 2010 10:18:58 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2EAIwHj009485; Sun, 14 Mar 2010 10:18:58 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <201003141018.o2EAIwHj009485@svn.freebsd.org> From: Ed Schouten Date: Sun, 14 Mar 2010 10:18:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205146 - in head: . include lib/libcompat lib/libcompat/4.3 lib/libcompat/regexp X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Mar 2010 10:18:58 -0000 Author: ed Date: Sun Mar 14 10:18:58 2010 New Revision: 205146 URL: http://svn.freebsd.org/changeset/base/205146 Log: Trim down libcompat by removing . Erwin ran an exp-run with libcompat and removed. It turns out the regexp library is almost entirely unused. In fact, it looks like it is sometimes used by accident. Because these function names clash with libc's , some application use both and libcompat, which means they link against the wrong regex library. This commit removes the regexp library and reimplements re_comp() and re_exec() using . It seems the grammar of the regular expressions accepted by these functions is similar to POSIX EREs. After this commit, 1 low-profile port will be broken, but the maintainer already has a patch for it sitting in his mailbox. Added: head/lib/libcompat/4.3/re_comp.c - copied, changed from r205145, head/lib/libcompat/4.3/regex.c Deleted: head/include/regexp.h head/lib/libcompat/4.3/regex.c head/lib/libcompat/regexp/ Modified: head/ObsoleteFiles.inc head/include/Makefile head/lib/libcompat/4.3/re_comp.3 head/lib/libcompat/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Sun Mar 14 05:22:46 2010 (r205145) +++ head/ObsoleteFiles.inc Sun Mar 14 10:18:58 2010 (r205146) @@ -14,6 +14,10 @@ # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last. # +# 20100314: removal of regexp.h +OLD_FILES+=usr/include/regexp.h +OLD_FILES+=usr/share/man/man3/regexp.3.gz +OLD_FILES+=usr/share/man/man3/regsub.3.gz # 20100303: actual removal of utmp.h OLD_FILES+=usr/include/utmp.h # 20100227: [ia64] removed and Modified: head/include/Makefile ============================================================================== --- head/include/Makefile Sun Mar 14 05:22:46 2010 (r205145) +++ head/include/Makefile Sun Mar 14 10:18:58 2010 (r205146) @@ -17,7 +17,7 @@ INCS= a.out.h ar.h assert.h bitstring.h ndbm.h netconfig.h \ netdb.h nl_types.h nlist.h nss.h nsswitch.h paths.h \ printf.h proc_service.h pthread.h \ - pthread_np.h pwd.h ranlib.h readpassphrase.h regex.h regexp.h \ + pthread_np.h pwd.h ranlib.h readpassphrase.h regex.h \ res_update.h resolv.h runetype.h search.h semaphore.h setjmp.h \ signal.h spawn.h stab.h \ stdbool.h stddef.h stdio.h stdlib.h string.h stringlist.h \ Modified: head/lib/libcompat/4.3/re_comp.3 ============================================================================== --- head/lib/libcompat/4.3/re_comp.3 Sun Mar 14 05:22:46 2010 (r205145) +++ head/lib/libcompat/4.3/re_comp.3 Sun Mar 14 10:18:58 2010 (r205146) @@ -100,15 +100,10 @@ returns \-1 for an internal error. The .Fn re_comp function -returns one of the following strings if an error occurs: -.Bd -unfilled -offset indent -No previous regular expression, -Regular expression too long, -unmatched \e(, -missing ], -too many \e(\e) pairs, -unmatched \e). -.Ed +returns +.Dq no previous regular expression +or one of the strings generated by +.Xr regerror 3 . .Sh SEE ALSO .Xr ed 1 , .Xr egrep 1 , Copied and modified: head/lib/libcompat/4.3/re_comp.c (from r205145, head/lib/libcompat/4.3/regex.c) ============================================================================== --- head/lib/libcompat/4.3/regex.c Sun Mar 14 05:22:46 2010 (r205145, copy source) +++ head/lib/libcompat/4.3/re_comp.c Sun Mar 14 10:18:58 2010 (r205146) @@ -44,49 +44,49 @@ __FBSDID("$FreeBSD$"); static char sccsid[] = "@(#)regex.c 5.1 (Berkeley) 3/29/92"; #endif /* LIBC_SCCS and not lint */ -#include +#include #include -#include -#include -#include -#include - -static regexp *re_regexp; -static int re_goterr; -static char *re_errstr; +#include + +static regex_t re_regexp; +static int re_gotexp; +static char re_errstr[100]; char * -re_comp(char *s) +re_comp(const char *s) { + int rc; + if (s == NULL || *s == '\0') { - if (re_regexp == NULL) - return "no previous regular expression"; + if (!re_gotexp) + return __DECONST(char *, + "no previous regular expression"); + return (NULL); + } + + if (re_gotexp) { + regfree(&re_regexp); + re_gotexp = 0; + } + + rc = regcomp(&re_regexp, s, REG_EXTENDED); + if (rc == 0) { + re_gotexp = 1; return (NULL); } - if (re_regexp) - free(re_regexp); - if (re_errstr) - free(re_errstr); - re_goterr = 0; - re_regexp = regcomp(s); - return (re_goterr ? re_errstr : NULL); + + regerror(rc, &re_regexp, re_errstr, sizeof(re_errstr)); + re_errstr[sizeof(re_errstr) - 1] = '\0'; + return (re_errstr); } int -re_exec(char *s) +re_exec(const char *s) { int rc; - re_goterr = 0; - rc = regexec(re_regexp, s); - return (re_goterr ? -1 : rc); -} - -void -regerror(const char *s) -{ - re_goterr = 1; - if (re_errstr) - free(re_errstr); - re_errstr = strdup(s); + if (!re_gotexp) + return (-1); + rc = regexec(&re_regexp, s, 0, NULL, 0); + return (rc == 0 ? 1 : 0); } Modified: head/lib/libcompat/Makefile ============================================================================== --- head/lib/libcompat/Makefile Sun Mar 14 05:22:46 2010 (r205145) +++ head/lib/libcompat/Makefile Sun Mar 14 10:18:58 2010 (r205146) @@ -1,19 +1,15 @@ # @(#)Makefile 8.1 (Berkeley) 6/4/93 # $FreeBSD$ -LIB=compat +LIB= compat CFLAGS+=-DLIBC_SCCS -DSYSLIBC_SCCS -I${.CURDIR}/../libc/locale NO_PIC= WARNS?= 0 -.PATH: ${.CURDIR}/4.1/${MACHINE_ARCH} ${.CURDIR}/4.1 \ - ${.CURDIR}/4.3/${MACHINE_ARCH} ${.CURDIR}/4.3 \ - ${.CURDIR}/4.4/${MACHINE_ARCH} ${.CURDIR}/4.4 \ - ${.CURDIR}/regexp +.PATH: ${.CURDIR}/4.1 ${.CURDIR}/4.3 ${.CURDIR}/4.4 # compat 4.1 sources -# XXX MISSING: tell.c SRCS+= ascftime.c cftime.c ftime.c getpw.c MAN+= 4.1/ftime.3 4.1/getpw.3 @@ -22,27 +18,15 @@ MAN+= 4.1/cftime.3 MLINKS+=cftime.3 ascftime.3 # compat 4.3 sources -# XXX MISSING: ecvt.c gcvt.c sibuf.c sobuf.c strout.c -SRCS+= cfree.c regex.c rexec.c +SRCS+= cfree.c re_comp.c rexec.c -# XXX MISSING: ecvt.0 MAN+= 4.3/cfree.3 4.3/re_comp.3 4.3/rexec.3 -# XXX MISSING: ecvt.3, so can't MLINK -#MLINKS+=ecvt.3 fcvt.3 ecvt.3 gcvt.3 MLINKS+=re_comp.3 re_exec.3 # compat 4.4 sources SRCS+= cuserid.c -MAN+= 4.4/cuserid.3 - -# regexp sources -SRCS+= regerror.c regexp.c regsub.c -MAN+= regexp/regexp.3 - -# XXX name clash with libc -# MLINKS+=regexp.3 regcomp.3 regexp.3 regexec.3 regexp.3 regerror.3 -MLINKS+=regexp.3 regsub.3 +MAN+= 4.4/cuserid.3 .include