summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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