Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Apr 2002 05:22:39 -0500
From:      Mike Barcroft <mike@FreeBSD.org>
To:        standards@FreeBSD.org
Subject:   strings.diff for review
Message-ID:  <20020401052239.A98094@espresso.q9media.com>

next in thread | raw e-mail | index | archive | help

--zhXaljGHf11kAtnf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline


The following is a fairly straightforward implementation of
<strings.h> and clean up of <string.h>.  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 <string.h> to the newly created
  <strings.h>, based on POSIX.1-2001's requirements.
o Add 'restrict' qualifier (spelled '__restrict') to functions in
  <string.h>, as per C99 and POSIX.1-2001.
o Properly expose new POSIX.1-2001 functions in <string.h>.

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 <sys/cdefs.h>
 #include <machine/ansi.h>
 
+/*
+ * Prototype functions which were historically defined in <string.h>, but
+ * are required by POSIX to be prototyped in <strings.h>.
+ */
+#if __BSD_VISIBLE
+#include <strings.h>
+#endif
+
 #ifdef	_BSD_SIZE_T_
 typedef	_BSD_SIZE_T_	size_t;
 #undef	_BSD_SIZE_T_
@@ -47,53 +57,45 @@
 #define	NULL	0
 #endif
 
-#include <sys/cdefs.h>
-
 __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 <mike@FreeBSD.org>
+ * 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 <string.h>
+#ifndef _STRINGS_H_
+#define	_STRINGS_H_
+
+#include <sys/cdefs.h>
+#include <machine/ansi.h>
+
+#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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020401052239.A98094>