summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2002-11-02 19:47:53 +0000
committeralfred <alfred@FreeBSD.org>2002-11-02 19:47:53 +0000
commitc9d42873f814538c3526f78acc28ded9ad8b9e37 (patch)
tree62e5769f488bc6c9881b890a7671c4811b4c3f5f
parent75d151bac0879faba47d6ae4a519adb9fbb66022 (diff)
downloadFreeBSD-src-c9d42873f814538c3526f78acc28ded9ad8b9e37.zip
FreeBSD-src-c9d42873f814538c3526f78acc28ded9ad8b9e37.tar.gz
Provide a hook to make __sF visible outside of libc for commercial apps
if WANT_COMPAT4_STDIO is defined when compiling libc. Submitted by: Steve Kargl <sgk@troutmask.apl.washington.edu>
-rw-r--r--lib/libc/stdio/Makefile.inc4
-rw-r--r--lib/libc/stdio/findfp.c6
-rw-r--r--share/examples/etc/make.conf8
-rw-r--r--share/man/man5/make.conf.58
4 files changed, 25 insertions, 1 deletions
diff --git a/lib/libc/stdio/Makefile.inc b/lib/libc/stdio/Makefile.inc
index 7ab0337..3841cfc 100644
--- a/lib/libc/stdio/Makefile.inc
+++ b/lib/libc/stdio/Makefile.inc
@@ -4,6 +4,10 @@
# stdio sources
.PATH: ${.CURDIR}/../libc/stdio
+.if WANT_COMPAT4_STDIO
+CFLAGS+=-DCOMPAT4_STDIO
+.endif
+
SRCS+= _flock_stub.c asprintf.c clrerr.c fclose.c fdopen.c feof.c ferror.c \
fflush.c fgetc.c fgetln.c fgetpos.c fgets.c fgetwc.c fgetws.c \
fileno.c findfp.c flags.c fopen.c fprintf.c fpurge.c fputc.c fputs.c \
diff --git a/lib/libc/stdio/findfp.c b/lib/libc/stdio/findfp.c
index 5538a57..283ff5c 100644
--- a/lib/libc/stdio/findfp.c
+++ b/lib/libc/stdio/findfp.c
@@ -69,12 +69,16 @@ static struct glue uglue = { NULL, FOPEN_MAX - 3, usual };
static struct __sFILEX __sFX[3];
-static FILE __sF[3] = {
+#ifndef COMPAT4_STDIO
+static
+#endif
+FILE __sF[3] = {
std(__SRD, STDIN_FILENO),
std(__SWR, STDOUT_FILENO),
std(__SWR|__SNBF, STDERR_FILENO)
};
+
/*
* The following kludge is done to ensure enough binary compatibility
* with future versions of libc. Or rather it allows us to work with
diff --git a/share/examples/etc/make.conf b/share/examples/etc/make.conf
index a0d269e..1aa2f78 100644
--- a/share/examples/etc/make.conf
+++ b/share/examples/etc/make.conf
@@ -171,6 +171,14 @@
#COMPAT3X= yes
#COMPAT4X= yes
#
+# If you have a commercial application for a FreeBSD 4.x that cannot easily
+# be updated to a FreeBSD 5.x application and it generates the error message
+# "undefined reference to `__sF'", then you can uncomment the following
+# line to build a libc compatibility with FreeBSD 4.x. NOTE, THIS SHOULD BE
+# USED AS A LAST RESORT.
+#
+#WANT_COMPAT4_STDIO= yes
+#
#
# Default format for system documentation, depends on your printer.
# Set this to "ascii" for simple printers or screen
diff --git a/share/man/man5/make.conf.5 b/share/man/man5/make.conf.5
index 0d6c745..0a810c5 100644
--- a/share/man/man5/make.conf.5
+++ b/share/man/man5/make.conf.5
@@ -605,6 +605,14 @@ levels to a lower one.
and above is known to trigger known optimizer bugs at various
times \(em this is worse on the Alpha platform.
The value assigned is the highest optimization value used.
+.It Va WANT_COMPAT4_STDIO
+.Pq Vt bool
+If you have a commercial application for a FreeBSD 4.x that cannot easily
+be updated to a FreeBSD 5.x application and it generates the error message
+.Dq undefined reference to `__sF' ,
+then you can uncomment the following line to build a libc compatibility with
+FreeBSD 4.x.
+.Em NOTE, THIS SHOULD BE USED AS A LAST RESORT.
.El
.Pp
The following list provides a name and short description for variables
OpenPOWER on IntegriCloud