tml@HEMULI.TIK.VTT.FI (Tor Lillqvist) (11/27/90)
X Window System Bug Report
xbugs@expo.lcs.mit.edu
[ also sent to xpert ]
VERSION:
R4
CLIENT MACHINE and OPERATING SYSTEM:
HP9000 running HP-UX 7.0
DISPLAY TYPE:
Irrelevant
WINDOW MANAGER:
Irrelevant
AREA:
mit/lib/X/sysV/Berklib.c
SYNOPSIS:
Berklib.o in libX11 needs to be split into smaller pieces.
DESCRIPTION:
The Berklib.o module contains replacements for various BSD
functions not found on SYSV style systems. They are all in one
source file, and thus if the linker needs one entry from the
resulting object module, it pulls in the whole module.
For example, say you want to use a special malloc library for
debugging that includes an error-checking version of bcopy. If
you also link with -lX11, and the X library calls ffs, Berklib.o
gets pulled in, and you get multiply defined symbols.
SAMPLE FIX:
Split Berklib.o into several files. I have kept Berklib.c, but
partitioned it into conditionally compiled pieces, and added
several two-line sources that #define a symbol telling which piece
to compile, and #include Berklib.c. The config/Project.tmpl file
needs updating in the BandAidLibrary section.
Here is a shar and a diff:
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by Tor Lillqvist <tml@hemuli> on Tue Nov 27 12:35:32 1990
#
# This archive contains:
# BerkB.c BerkFfs.c BerkI.c BerkOth.c
# BerkQ.c BerkR.c
#
LANG=""; export LANG
PATH=/bin:/usr/bin:$PATH; export PATH
echo x - BerkB.c
cat >BerkB.c <<'@EOF'
#define BSTRING
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkB.c
echo x - BerkFfs.c
cat >BerkFfs.c <<'@EOF'
#define FFS
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkFfs.c
echo x - BerkI.c
cat >BerkI.c <<'@EOF'
#define INDEX
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkI.c
echo x - BerkOth.c
cat >BerkOth.c <<'@EOF'
#define OTHERS
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkOth.c
echo x - BerkQ.c
cat >BerkQ.c <<'@EOF'
#define QUEUE
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkQ.c
echo x - BerkR.c
cat >BerkR.c <<'@EOF'
#define RANDOM
#include "sysV/Berklib.c"
@EOF
chmod 644 BerkR.c
exit 0
*** config/Project.tmpl.ORIG Mon Dec 18 23:46:46 1989
--- config/Project.tmpl Tue Nov 27 12:20:12 1990
***************
*** 314,325 ****
#if NeedBerklibInXlib /* what about regular Berklib */
#define BandAidLibraryNeeded YES
! #define BandAidLibrarySources Berklib.c
! #define BandAidLibraryObjects Berklib.o
#define BandAidLibraryMake() @@\
! Berklib.c: sysV/Berklib.c @@\
! -$(RM) Berklib.c @@\
! -$(LN) sysV/Berklib.c .
#endif /* NeedBerklibInXlib */
--- 314,337 ----
#if NeedBerklibInXlib /* what about regular Berklib */
#define BandAidLibraryNeeded YES
! #define BandAidLibrarySources BerkB.c BerkI.c BerkFfs.c BerkQ.c BerkR.c BerkOth.c
! #define BandAidLibraryObjects BerkB.o BerkI.o BerkFfs.o BerkQ.o BerkR.o BerkOth.o
#define BandAidLibraryMake() @@\
! BerkB.c: sysV/BerkB.c @@\
! -$(RM) BerkB.c @@\
! -$(LN) sysV/BerkB.c . @@\
! BerkI.c: sysV/BerkI.c @@\
! -$(RM) BerkI.c @@\
! -$(LN) sysV/BerkI.c . @@\
! BerkFfs.c: sysV/BerkFfs.c @@\
! -$(RM) BerkFfs.c @@\
! -$(LN) sysV/BerkFfs.c . @@\
! BerkQ.c: sysV/BerkQ.c @@\
! -$(RM) BerkQ.c @@\
! -$(LN) sysV/BerkQ.c . @@\
! BerkOth.c: sysV/BerkOth.c @@\
! -$(RM) BerkOth.c @@\
! -$(LN) sysV/BerkOth.c .
#endif /* NeedBerklibInXlib */
*** lib/X/sysV/Berklib.c.ORIG Mon Oct 1 12:03:13 1990
--- lib/X/sysV/Berklib.c Tue Nov 27 12:22:22 1990
***************
*** 6,11 ****
--- 6,13 ----
#include <sys/types.h>
+ #ifdef BSTRING
+
/*
* These are routines found in BSD and not found in many SysV's. They are
* included so that some clients can compile.
***************
*** 48,53 ****
--- 50,58 ----
}
}
+ #endif
+
+ #ifdef FFS
/* Find the first set bit
* i.e. least signifigant 1 bit:
***************
*** 73,78 ****
--- 78,87 ----
return i;
}
+ #endif
+
+ #ifdef INDEX
+
char *
index (s, c)
char *s, c;
***************
*** 87,92 ****
--- 96,105 ----
return ((char *) strrchr (s, c));
}
+ #endif
+
+ #ifdef QUEUE
+
/*
* insque, remque - insert/remove element from a queue
*
***************
*** 132,137 ****
--- 145,154 ----
}
+ #endif
+
+ #ifdef RANDOM
+
/*
* Berkeley random()
*
***************
*** 158,163 ****
--- 175,183 ----
}
+ #endif
+
+ #ifdef OTHERS
#ifdef hpux
/** on hpux 5.n, readv/writev don't work on sockets;
***************
*** 221,224 ****
--- 241,245 ----
);
}
}
+ #endif
#endif