aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@FreeBSD.org>2001-06-13 15:16:30 +0000
committerRuslan Ermilov <ru@FreeBSD.org>2001-06-13 15:16:30 +0000
commitd28011e5568967c997ba3294d9e3ef72bd37aaa4 (patch)
tree37b7552d4bd478688101be23177232d72f8186b9
parent1ca5464aae3bc6582710256b222609626e21dc5e (diff)
downloadsrc-d28011e5568967c997ba3294d9e3ef72bd37aaa4.tar.gz
src-d28011e5568967c997ba3294d9e3ef72bd37aaa4.zip
Added skeleton <complex.h> (aligned with the POSIX.1-200x), mostly
to fix the "-nostdinc WARNS=X" breakage caused by broken prototypes for cabs() and cabsl() in <math.h>. Reimplemented cabs() and cabsl() using new complex numbers types and moved prototypes from <math.h> to <complex.h>.
Notes
Notes: svn path=/head/; revision=78172
-rw-r--r--include/Makefile3
-rw-r--r--include/complex.h60
-rw-r--r--lib/msun/src/math.h2
-rw-r--r--lib/msun/src/w_cabs.c19
-rw-r--r--lib/msun/src/w_cabsf.c18
5 files changed, 82 insertions, 20 deletions
diff --git a/include/Makefile b/include/Makefile
index 84cba1dfc49b..b9798cd8e787 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -8,7 +8,8 @@
CLEANFILES= osreldate.h version vers.c
SUBDIR= rpcsvc rpc
-FILES= a.out.h ar.h assert.h bitstring.h ctype.h db.h dirent.h disktab.h \
+FILES= a.out.h ar.h assert.h bitstring.h complex.h ctype.h db.h \
+ dirent.h disktab.h \
dlfcn.h elf.h elf-hints.h err.h fnmatch.h fstab.h \
fts.h glob.h grp.h strhash.h \
hesiod.h histedit.h ieeefp.h ifaddrs.h iso646.h langinfo.h \
diff --git a/include/complex.h b/include/complex.h
new file mode 100644
index 000000000000..faf43da00047
--- /dev/null
+++ b/include/complex.h
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2001 The FreeBSD Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 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.
+ *
+ * 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 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)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _COMPLEX_H
+#define _COMPLEX_H
+
+#ifdef __GNUC__
+#define _Complex __complex__
+#define _Complex_I 1.0fi
+#endif
+
+#define complex _Complex
+#define I _Complex_I
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+double cabs __P((double complex));
+float cabsf __P((float complex));
+double cimag __P((double complex));
+float cimagf __P((float complex));
+double creal __P((double complex));
+float crealf __P((float complex));
+
+__END_DECLS
+
+#ifdef __GNUC__
+#define cimag(z) (__imag__ (z))
+#define cimagf(z) (__imag__ (z))
+#define creal(z) (__real__ (z))
+#define crealf(z) (__real__ (z))
+#endif
+
+#endif /* _COMPLEX_H */
diff --git a/lib/msun/src/math.h b/lib/msun/src/math.h
index e26e39f3a347..e5a5e1662b1b 100644
--- a/lib/msun/src/math.h
+++ b/lib/msun/src/math.h
@@ -174,7 +174,6 @@ extern double scalbn __P((double, int));
/*
* BSD math library entry points
*/
-extern double cabs();
extern double drem __P((double, double));
extern double expm1 __P((double));
extern double log1p __P((double));
@@ -257,7 +256,6 @@ extern float scalbnf __P((float, int));
/*
* float versions of BSD math library entry points
*/
-extern float cabsf ();
extern float dremf __P((float, float));
extern float expm1f __P((float));
extern float log1pf __P((float));
diff --git a/lib/msun/src/w_cabs.c b/lib/msun/src/w_cabs.c
index b140515973f9..a33a41faabdc 100644
--- a/lib/msun/src/w_cabs.c
+++ b/lib/msun/src/w_cabs.c
@@ -5,23 +5,24 @@
* Placed into the Public Domain, 1994.
*/
-#include <math.h>
+#ifndef lint
+static const char rcsid[] =
+ "$FreeBSD$";
+#endif /* not lint */
-struct complex {
- double x;
- double y;
-};
+#include <complex.h>
+#include <math.h>
double
cabs(z)
- struct complex z;
+ double complex z;
{
- return hypot(z.x, z.y);
+ return hypot(creal(z), cimag(z));
}
double
z_abs(z)
- struct complex *z;
+ double complex *z;
{
- return hypot(z->x, z->y);
+ return hypot(creal(*z), cimag(*z));
}
diff --git a/lib/msun/src/w_cabsf.c b/lib/msun/src/w_cabsf.c
index 6336d6d54564..e7bfe220a9a5 100644
--- a/lib/msun/src/w_cabsf.c
+++ b/lib/msun/src/w_cabsf.c
@@ -5,17 +5,19 @@
* Placed into the Public Domain, 1994.
*/
-#include "math.h"
-#include "math_private.h"
+#ifndef lint
+static const char rcsid[] =
+ "$FreeBSD$";
+#endif /* not lint */
-struct complex {
- float x;
- float y;
-};
+#include <complex.h>
+#include <math.h>
+#include "math_private.h"
float
cabsf(z)
- struct complex z;
+ float complex z;
{
- return hypotf(z.x, z.y);
+
+ return hypotf(crealf(z), cimagf(z));
}