From owner-freebsd-standards Mon Apr 1 2:29: 4 2002 Delivered-To: freebsd-standards@freebsd.org Received: from espresso.q9media.com (espresso.q9media.com [216.254.138.122]) by hub.freebsd.org (Postfix) with ESMTP id 4B83D37B41A for ; Mon, 1 Apr 2002 02:28:54 -0800 (PST) Received: (from mike@localhost) by espresso.q9media.com (8.11.6/8.11.6) id g31AMdB98799 for standards@FreeBSD.org; Mon, 1 Apr 2002 05:22:39 -0500 (EST) (envelope-from mike) Date: Mon, 1 Apr 2002 05:22:39 -0500 From: Mike Barcroft To: standards@FreeBSD.org Subject: strings.diff for review Message-ID: <20020401052239.A98094@espresso.q9media.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="zhXaljGHf11kAtnf" Content-Disposition: inline Organization: The FreeBSD Project Sender: owner-freebsd-standards@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --zhXaljGHf11kAtnf Content-Type: text/plain; charset=us-ascii Content-Disposition: inline The following is a fairly straightforward implementation of and clean up of . Comments appreciated. Best regards, Mike Barcroft --zhXaljGHf11kAtnf Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="strings.diff" strings.diff o Move some function prototypes from to the newly created , based on POSIX.1-2001's requirements. o Add 'restrict' qualifier (spelled '__restrict') to functions in , as per C99 and POSIX.1-2001. o Properly expose new POSIX.1-2001 functions in . Index: include/string.h =================================================================== RCS file: /work/repo/src/include/string.h,v retrieving revision 1.12 diff -u -r1.12 string.h --- include/string.h 23 Mar 2002 17:24:53 -0000 1.12 +++ include/string.h 1 Apr 2002 10:22:02 -0000 @@ -36,8 +36,18 @@ #ifndef _STRING_H_ #define _STRING_H_ + +#include #include +/* + * Prototype functions which were historically defined in , but + * are required by POSIX to be prototyped in . + */ +#if __BSD_VISIBLE +#include +#endif + #ifdef _BSD_SIZE_T_ typedef _BSD_SIZE_T_ size_t; #undef _BSD_SIZE_T_ @@ -47,53 +57,45 @@ #define NULL 0 #endif -#include - __BEGIN_DECLS void *memchr(const void *, int, size_t); int memcmp(const void *, const void *, size_t); -void *memcpy(void *, const void *, size_t); +void *memcpy(void * __restrict, const void * __restrict, size_t); void *memmove(void *, const void *, size_t); void *memset(void *, int, size_t); -char *strcat(char *, const char *); +char *strcat(char * __restrict, const char * __restrict); char *strchr(const char *, int); int strcmp(const char *, const char *); int strcoll(const char *, const char *); -char *strcpy(char *, const char *); +char *strcpy(char * __restrict, const char * __restrict); size_t strcspn(const char *, const char *); char *strerror(int); size_t strlen(const char *); -char *strncat(char *, const char *, size_t); +char *strncat(char * __restrict, const char * __restrict, size_t); int strncmp(const char *, const char *, size_t); -char *strncpy(char *, const char *, size_t); +char *strncpy(char * __restrict, const char * __restrict, size_t); char *strpbrk(const char *, const char *); char *strrchr(const char *, int); size_t strspn(const char *, const char *); char *strstr(const char *, const char *); -char *strtok(char *, const char *); -size_t strxfrm(char *, const char *, size_t); +char *strtok(char * __restrict, const char * __restrict); +size_t strxfrm(char * __restrict, const char * __restrict, size_t); -/* Nonstandard routines */ -#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) -int bcmp(const void *, const void *, size_t); -void bcopy(const void *, void *, size_t); -void bzero(void *, size_t); -int ffs(int); -char *index(const char *, int); -void *memccpy(void *, const void *, int, size_t); -char *rindex(const char *, int); -int strcasecmp(const char *, const char *); -char *strcasestr(const char *, const char *); +#if __POSIX_VISIBLE >= 200112 +void *memccpy(void * __restrict, const void * __restrict, int, size_t); char *strdup(const char *); int strerror_r(int, char *, size_t); +char *strtok_r(char *, const char *, char **); +#endif + +#if __BSD_VISIBLE +char *strcasestr(const char *, const char *); size_t strlcat(char *, const char *, size_t); size_t strlcpy(char *, const char *, size_t); void strmode(int, char *); -int strncasecmp(const char *, const char *, size_t); char *strnstr(const char *, const char *, size_t); char *strsep(char **, const char *); char *strsignal(int); -char *strtok_r(char *, const char *, char **); void swab(const void *, void *, size_t); #endif __END_DECLS Index: include/strings.h =================================================================== RCS file: /work/repo/src/include/strings.h,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 strings.h --- include/strings.h 24 May 1994 09:57:08 -0000 1.1.1.1 +++ include/strings.h 1 Apr 2002 10:01:40 -0000 @@ -1,6 +1,6 @@ /*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. + * Copyright (c) 2002 Mike Barcroft + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,18 +10,11 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) @@ -30,7 +23,29 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)strings.h 8.1 (Berkeley) 6/2/93 + * $FreeBSD$ */ -#include +#ifndef _STRINGS_H_ +#define _STRINGS_H_ + +#include +#include + +#ifdef _BSD_SIZE_T_ +typedef _BSD_SIZE_T_ size_t; +#undef _BSD_SIZE_T_ +#endif + +__BEGIN_DECLS +int bcmp(const void *, const void *, size_t); /* LEGACY */ +void bcopy(const void *, void *, size_t); /* LEGACY */ +void bzero(void *, size_t); /* LEGACY */ +int ffs(int); +char *index(const char *, int); /* LEGACY */ +char *rindex(const char *, int); /* LEGACY */ +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); +__END_DECLS + +#endif /* _STRINGS_H_ */ --zhXaljGHf11kAtnf-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-standards" in the body of the message