Commit 6b3e98d5 authored by unknown's avatar unknown

Merge work:/home/bk/mysql-4.0

into sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.0

parents 295d1092 f4a3e3b9
......@@ -40739,9 +40739,11 @@ $rv = $sth->rows;
@findex DBI->@{NULLABLE@}
@findex NULLABLE DBI method
@item NULLABLE
Returns a reference to an array of boolean values; for each element of
the array, a value of TRUE indicates that this
column may contain @code{NULL} values.
Returns a reference to an array of values that indicate whether columns may
contain @code{NULL} values.
The possible values for each array element are 0 or the empty string if the
column cannot be @code{NULL}, 1 if it can, and 2 if the column's @code{NULL}
status is unknown.
Example:
@example
$null_possible = $sth->@{NULLABLE@};
Makefile
config.cache
config.h
config.log
config.status
obj
Copyright (c) 1993, 1994, 1995, 1996 by Chris Provenzano and contributors,
proven@mit.edu 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.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
This product includes software developed by Chris Provenzano,
the University of California, Berkeley, and contributors.
4. Neither the name of Chris Provenzano, the University, nor the names of
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO 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 CHRIS PROVENZANO, THE REGENTS 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.
Changes done to this distrubtion (pthreads-1_60_beta6) by Monty
(monty@mysql.com)
02.06.20
- Added support for semaphores.
02.05.07
- Hacked some files to get it to compile (not work) with glibc 2.2
This is needed so that we can do 'make dist' in the MySQL distribution
02.04.26
- removed the following files because of copyright problems
machdep/i386-sco-3.2v5/__signal.h
machdep/i386-sco-3.2v5/__stdio.h
machdep/i386-sco-3.2v5/__stdlib.h
machdep/i386-sco-3.2v5/__string.h
machdep/i386-sco-3.2v5/__time.h
machdep/i386-sco-3.2v5/__unistd.h
machdep/i386-sco-3.2v5/compat.h
machdep/i386-sco-3.2v5/dirent.h
machdep/i386-sco-3.2v5/posix/__signal.h
machdep/i386-sco-3.2v5/socket.h
machdep/i386-sco-3.2v5/syscall.h
machdep/i386-sco-3.2v5/timers.h
machdep/i386-sco-3.2v5/trash.can
machdep/sco-3.2v5/__math.h
machdep/sco-3.2v5/__signal.h
machdep/sco-3.2v5/__stdio.h
machdep/sco-3.2v5/__stdlib.h
machdep/sco-3.2v5/__string.h
machdep/sco-3.2v5/__time.h
machdep/sco-3.2v5/__unistd.h
machdep/sco-3.2v5/compat.h
machdep/sco-3.2v5/dirent.h
machdep/sco-3.2v5/posix/__signal.h
machdep/sco-3.2v5/socket.h
machdep/sco-3.2v5/syscall.h
machdep/sco-3.2v5/timers.h
machdep/sco-3.2v5/trash.can
93.04.01
- socket() didn't return NOTOK (-1) on error.
- bind() didn't set error code on failure
93.03.27
- Added patch by D. Richard Hipp <drh@vnet.net> to make strtod and
printf (of floats/doubles) thread safe. Patch provided by mevans@cti-ltd.com
- Added patch I got from lucid@secret.org to fix lock in fork().
93.03.26
- Fixed some include files for BSD 2.0.
- Changed the prototype of ioctl() for BSD.
- Fixed new bug in fd_kernel.c; _fd_kern_read returned sometimes wrong errno.
93.03.22
- Change sys/cdefs.h to get it through Sun cc.
- Added patches by Mark Evans
1. Crashes and hangs.
2. Missing functionality (namely flock())
3. Use of POSIX reentrant safe routines.
93.03.21
- Add patches by Larry V. Streepy to fix pthread_cancel.
Fixed bug in Streepy's patch that checked return values of read,write..
in fd.c (Already done in fd_sys.c)
1. Added a declaration of &#34;signal&#34; to include/signal.h
2. Modified PANIC macro to operate like assert and call a new function
panic_kernel. Added new file pthreads/panic.c.
3. Added support for fstatfs syscall for linux (mod to
syscall-i386-linux-1.0.S).
4. Added missing function declarations to machdep/linux-1.0/socket.h:
getsockopt
setsockopt
getsockname
getpeername
send
recv
sendto
recvfrom
sendmsg
recvmsg
shutdown
5. Added ifdef to avoid type conflict in machdep/linux-1.0/timers.h
6. Fix bug in getprotoent (bogus semi-colon after if stmt).
7. Change function name in proto_internal.c from _proto_init to
_proto_buf.
8. Fix bug in res_internal.c where buffer pointer was improperly
maintained.
9. Fix return value handling for POSIX function implementations.
10. Fix bug in select handling where a thread could be incorrectly
resumed with no sockets ready. Also added proper handling of
selecting for exceptions (this was not implemented at all).
11. Added deadlock detection to pthread_join (it can now return an
EDEADLK error).
12. Added support for pthread_cancel, changes to lots of files for this.
13. Add new function __pthread_is_valid that searches the pthread list
for a specified pthread_t value.
93.03.22
- Fixed some if the tests according to the below changes.
93.03.21 by "Mati Sauks" <mati@psti.com>
- Fixed bug if priority queue was empty or (*current)->next is empty.
96.03.20 by Josip Gracin
- Fixed gethostbyname to handle alias
97.02.07
- Removed CVS directories.
- Commented make install in GNUmakefile.in.
97.01.26 by David (david@detron.se)
- Fixed a dist target in the GNUmakefile
- Added #undef PTHREAD_STACK_MIN to avoid warning on solaris 2.5
97.01.21 by Monty (monty@tcx.se)
- Added file mysql-TODO and the patches directory.
- Added patch p153 and p155 by Tim Hinderliter and Chris Colohan
check the patches directory for more info.
- Changed pthread_cond_timedwait to return ETIME instead of ETIMEDOUT
(Required by Posix)
- Changed the include file pthread.h to add prototypes for the following
functions: pthread_sigmask, sigwait and sigsetwait
- Added shutdown() and getpeername() prototypes to 'machdep/sunos-5.3/socket.h'
- Changed __FD_NONBLOCK to (O_NONBLOCK | O_NDELAY) in
./machdep/engine-sparc-sunos-5.3.h
- Added rint() prototype to math.h
- Added new slot sighandled to 'struct pthread' for easy check if somebody
interrupts a system call.
- pthread_kill can now interrupt the following system calls:
select(), read(), write(), send(), sendto(), sendmsg(), recv_timedwait(),
recvfrom_timedwait(), readev(), writeev() and some socket functions.
- Fixed bug in pthread_kill() which count up 'sigcount' wrongly.
Two pthread_kill() in a row bugged the thread.
- Merged fd_kern_wait and fd_kern_poll to 1 function and removed a
a bug when polling select.
- Implemented getpeername().
- Some small optimizations.
- Some re-indentation to make the code readable by me (Sorry about that).
97.08.15 by Monty (monty@tcx.se)
- Added patch by "Chris G. Demetriou" <cgd@pa.dec.com> for NetBSD/alpha.
97.08.18 by Monty (monty@tcx.se)
- Added new machdep definitions for HPUX-10.20,
by JOERG_HENNE@Non-HP-Germany-om88.om.hp.com
97.09.25 by Monty (monty@tcx.se)
- Added some definitions for i386-SCO from the site:
http://www.sco.com/skunkware/osr5/libraries/
97.10.12 by Monty (monty@tcx.se)
- Changed prototype macro __P to __P_ to avoid warnings on Solaris.
- Fixed interruption of select() with pthread_kill() when signal handler
used read or write.
97.10.16 by Monty (monty@tcx.se)
- Fixed that blocked signals doesn't interrupt threads.
97.10.20 by Monty (monty@tcx.se)
- Fixed broken ftruncate system call for FreeBSD 2.0
The old one destroyed the orignal file by truncation too much.
- Fixed prototypes for des_setkey,encrypt and setkey (according to Solaris 2.5)
97.11.26 by Monty (monty@tcx.se)
- Small patch to avoid compile errors on alpha-OSF1 3.2
97.12.18 by Monty (monty@tcx.se)
- Added fix for Irix 5.3 in __unistd.h
98.01.13 by Monty (monty@tcx.se)
- Added fd_check_entry to dup2 and table sizecheck to fd_check_entry()
patch by Martin Fuchs <Martin@igdv.fh-darmstadt.de>
98.01.18 by Monty (monty@tcx.se)
- Added prototype for gettimeofday() for Solars 2.3
- Added some small fixes for configure and Solaris 2.6
98.01.23 by Monty (monty@tcx.se)
- Ported to openbsd.
- Renamed nanosleep() to pthread_nanosleep() to avoid name conflict on
openbsd.
- Fixed link problem with variable __sglue for Irix 5.3
by Vladislav Malyshkin <malyshki@cs.wmich.edu>.
98.03.02 by Monty (monty@tcx.se)
- Applied patches from Curt Sampson <cjs@portal.ca>; NetBSD 1.3/i386 port.
98.03.09 by Monty (monty@tcx.se)
- Applied patches from Curt Sampson <cjs@portal.ca>; NetBSD 1.3/Alpha port.
98.05.12
- Added unixware to config.guess
98.06.07
- Added patch by Scott Dybiec <sdybiec@humanfactor.com>:
Fixed select() returning incorrect number of active file descriptors.
99.06.07 by Monty (monty@mysql.com)
- Added patches from the NETBSD site. Should fix the following platforms:
alpha-netbsd-1.3, sparc-netbsd-1.3, i386-netbsd, arm32-netbsd
99.09.09 by Monty (monty@mysql.com)
- Added patches from Christoph Badura <bad@oreilly.de> for NetBSD
99.09.13 by Monty (monty@mysql.com)
- Added patches from Dirk Froemberg <dirk@FreeBSD.org> for FreeBSD
99.10.18 by Monty (monty@mysql.com)
- Added patch for machdep_sys_lseek() for netbsd.
99.12.30 by Monty (monty@mysql.com)
- Added patch by Christoph Badura <bad@oreilly.de> to update mit-pthreads
to the same version as in the NetBSD pkgsrc.
00.02.24 by Monty (monty@mysql.com)
- Added configure files to make mit-pthreads to compile and link during
newer linux systems (needed because of the MySQL configure system).
The resulting library has however not been verified under Linux.
00.03.30 by Monty (monty@mysql.com)
- Added chroot() and gethostname().
00.10.18 by Monty (monty@mysql.com)
- Added patch by Dave Huang <khym@bga.com> to fix problem with date/time
on NETBSD/Alpha.
01.01.11 by Monty (monty@mysql.com)
- Added patch by Allen Briggs <briggs@ninthwonder.com> for
Apple PowerMac 8500 w/ G3 upgrade running NetBSD/macppc
Answers to frequently asked questions
for my implementation of POSIX threads
-------------------------------------------------------------------------------
1. Pthreads
(1.0) What is Pthreads?
(1.1) Where can I get info on Pthreads?
2. Getting, Building, Installing and Using proven's Pthreads
(2.0) Where can I get the latest version of proven's Pthreads?
(2.1) What platforms does proven's Pthreads run on?
(2.2) What do I need to build proven's Pthreads?
(2.3) How do I install proven's Pthreads?
3. Known Problems
(3.0) Tests
(3.1) Installation
(3.2) Missing functionality
(3.3) Signals
-------------------------------------------------------------------------------
1. Pthreads
(1.0) What is Pthreads?
Pthreads stands for POSIX threads and is based on the POSIX 1003.1c 1995
thread standard. This standard passed international Standards Organization
(ISO) Committee Document (CD) balloting in February 1995 and got the
IEEE Standards Board approval in June 1995.
(1.1) Where can I get info on Pthreads?
You can call IEEE (908) 562-3800 which is the organization which POSIX
belongs, and ask for POSIX 1003.1c (not 1003.4a) draft 10 (the standard
won't be out until sometime in 1996). The draft costs $30.00 plus shipping
which for me was $4.00. The IEEE doesn't make any of the standards available
online.
I have made documentation for some of the functions available online.
To reference these use http://www.mit.edu:8001/people/proven/pthreads.html
-------------------------------------------------------------------------------
2. Getting, Building, Installing and Using proven's Pthreads
(2.0) Where can I get the latest version of proven's Pthreads?
The latest version is pthreads-1_60_beta6 was release on November 16, 1996
and is available from sipb.mit.edu:/pub/pthreads.
(2.1) What platforms does proven's Pthreads run on?
Lot's! It should run on the following platforms; the i386 processor
running NetBSD-1.x, FreeBSD-2.x, BSDOS-2.0, Linux-1.2 and Linux-1.3;
the r2000 (DECstation) running Ultrix-4.2; the Sparc running NetBSD-1.x,
SunOS-4.1.3, Solaris-2.3, and Solaris-2.4; the alpha running OSF-2.3 and
OSF-3.x; the SGI running IRIX-5.2; and the HPPA running HP/UX-9.x.
Because it runs on so many platforms I don't get to compile and test every
platform for every release. If you have a problem send mail to
pthreads-bugs@mit.edu with the processor, OS, and version number along with
a description of the bug.
(2.2) What do I need to build proven's Pthreads?
You will need gcc and gmake to build for all but NetBSD, FreeBSD and BSDOS.
For those you may use either gmake or pmake (the native make).
(2.3) How do I install proven's Pthreads?
Installing pthreads is real easy. At the top level of pthreads do
configure
make
make install
It will be installed into the directory /usr/local/pthreads. If you don't
like the location add a --prefix=<dir> option to configure. That's it.
-------------------------------------------------------------------------------
3. Known problems.
(3.0) Tests
Under SunOS-4.1.x there is a bug in the kernel that prevents test_sock_1
from passing. This bug has to do with a process tring to connect to itself.
In respose I wrote test_sock_2 to test the socket code for SunOS which
does work. You should have no problems using the socket code in SunOS
so long as you don't write a program that need to connect to itself.
(3.1) Installation
The only know problem is on the SGI. You will need to use GNU tar instead
of the native supplied one or edit the config.flags file and remove the -h
option to tar. Aparently the -h option on IRIX 5.3 version of tar does the
exact opposite of all the other versions of tar I've used and instead of
following symbolic links and getting the file it archives the link.
(3.2) Missing functionality
The current release is missing cancelation, priority mutexes and others.
I'm continuing to develope pthreads and I plan to put cancelation and
priority mutexes and as much other stuff as I can into the 1_70 release
(3.3) Signals
Currently to intermix signals with pthreads you need to rename all calls
to signal() and sigaction() to pthread_signal() and pthread_sigaction().
I plan to write real wrapper routines for signal() and sigaction() for
the 1_70 release.
# === GNUmakefile =============================================================
# Copyright (c) 1991, 1992, 1993 Chris Provenzano, proven@athena.mit.edu
#
# Description: This file is for creating libpthread.a
#
# 1.00 93/11/17 proven
# -Put all the .o files into one file libpthread.a
# -Initial cut for pthreads.
#
INSTALL_PATH = $(exec_prefix)
BINDIR = $(INSTALL_PATH)/bin
LIBDIR = $(INSTALL_PATH)/lib
MANDIR = $(INSTALL_PATH)/man
INCDIR = $(INSTALL_PATH)/include
SUBINCDIR = $(INCDIR)/pthread
AR = ar
AS = gas
CFLAGS = -I. -Iinclude -I$(srcdir)/include -DPTHREAD_KERNEL \
-O3 -DDBUG_OFF -Werror
CXXFLAGS = -I. -Iinclude -I$(srcdir)/include -DPTHREAD_KERNEL \
-g -O2
LD = gld
CSRC =
PTHREAD_DIR = pthreads stdlib stdio gen
DIRS = $(PTHREAD_DIR)
HEADERS =
LIBRARIES = libpthread.a
.CURDIR = .
# force correct default target
all:
###############################################################################
#
# Read in any special flags that config knows about
include config.flags
# What the heck. Convert srcdir to absolute form so it looks prettier.
srcdir := $(shell cd $(srcfoo) && pwd)
################################################################################
#
# Here starts the nitty grity part of the Makefile.
all-lib : libpthread.a
include ${srcdir}/pthreads/GNUmakefile.inc
include ${srcdir}/stdlib/GNUmakefile.inc
include ${srcdir}/stdio/GNUmakefile.inc
include ${srcdir}/string/GNUmakefile.inc
include ${srcdir}/gen/GNUmakefile.inc
include ${srcdir}/net/GNUmakefile.inc
include ${srcdir}/scripts/GNUmakefile.inc
REGULAR_OBJS= $(subst .cc,.o,$(SRCS))
REGULAR_OBJS:= $(subst .c,.o,$(REGULAR_OBJS))
REGULAR_OBJS:= $(subst .S,.o,$(REGULAR_OBJS))
OBJS= $(REGULAR_OBJS) $(EXTRA_OBJS)
REALOBJS = $(addprefix obj/, $(OBJS))
$(REALOBJS) : $(config) $(types) $(paths)
# Since we do not have a list of the relevant files we do a make clean
# before copying everyting to the distribution directory.
distdir:
$(MAKE) clean
cp -a . $(distdir)
# Remove symlinks that the distribution should not have.
rm -f $(distdir)/config.cache \
$(distdir)/include/pthread/machdep.h \
$(distdir)/include/pthread/posix.h \
$(distdir)/include/sys \
$(distdir)/machdep.c \
$(distdir)/syscall.S \
$(distdir)/syscall-template.S
clean:
rm -f a.out core maketmp makeout $(LIBRARIES) $(BINARIES) libpthread.*
rm -rf obj
cd tests && $(MAKE) clean && cd ..
install-lib: $(LIBRARIES) install-dirs
for x in $(LIBRARIES); \
do install $$x $(DESTDIR)$(LIBDIR); \
done
# Removed make install since mysql uses this in place.
# install-lib install-include install-bin
install:
libpthread.a: obj/libpthread.a
rm -f libpthread.a
ln -s obj/libpthread.a .
obj/libpthread.a: ${REALOBJS}
rm -f libpthread.a obj/new.a obj/libpthread.a
cd obj && \
ar r new.a ${OBJS} && \
$(RANLIB) new.a && \
mv -f new.a libpthread.a && \
cd ..
# For examining a combined symbol table, sizes, &c.
libpthread.o: ${REALOBJS}
cd obj && ld -r -o ../libpthread.o ${OBJS} && cd ..
obj/x:
if [ -d obj ]; then true; else mkdir obj; fi
cp /dev/null obj/x
GNUmakefile: config.status ${srcdir}/config/GNUmakefile.in
$(SHELL) config.status
obj/%.o: %.c obj/x
$(CC) $(CFLAGS) -c $< -o $@
obj/%.o: %.cc obj/x
$(CXX) $(CXXFLAGS) $(CFLAGS) -c $< -o $@
obj/%.o: %.S obj/x
$(CC) $(CFLAGS) -c $< -o $@
Here are some notes on the internals of the implementation.
LIBC routines.
Unfortuanately many of the libc routine return a pointer to static data.
There are two methods to deal with this. One write a new routine where the
arguments are different, and have one argument be a pointer to some space
to store the data, or two use thread specific data and warn the user that
data isn't valid if the calling thread is terminated.
INTERNAL LOCKING
To prevent deadlocks the following rules were used for locks.
1. Local locks for mutex queues and other like things are only locked
by running threads, at NO time will a local lock be held by
a thread in a non running state.
2. Only threads that are in a run state can attempt to lock another thread,
this way, we can assume that the lock will be released shortly, and don't
have to unlock the local lock.
3. The only time a thread will have a pthread->lock and is not in a run
state is when it is in the reschedule routine.
4. The reschedule routine assumes all local locks have been released,
there is a lock on the currently running thread (pthread_run),
and that this thread is being rescheduled to a non running state.
It is safe to unlock the currently running threads lock after it
has been rescheduled.
5. The reschedule routine locks the kernel, sets the state of the currently
running thread, unlocks the currently running thread, calls the
context switch routines.
6 the kernel lock is used only ...
7. The order of locking is ...
1 local locks
2 pthread->lock /* Assumes it will get it soon */
3 pthread_run->lock /* Assumes it will get it soon, but must release 2 */
4 kernel lock /* Currently assumes it will ALWAYS get it. */
8. The kernel lock will be changed to a spin lock for systems that
already support kernel threads, this way we can mutiplex threads onto
kernel threads.
9. There are points where the kernel is locked and it needs to get
either a local lock or a pthread lock, if at these points the code
fails to get the lock the kernel gives up and sets a flag which will
be checked at a later point.
10. Interrupts are dissabled while the kernel is locked, the interrupt
mask must be checked afterwards or cleared in some way, after interrputs
have been reenabled, this allows back to back interrupts, but should always
avoid missing one.
------------------------------------------------------------------------------
Copyright (c) 1994 Chris Provenzano. All rights reserved.
This product includes software developed by the Univeristy of California,
Berkeley and its contributors.
For further licencing and distribution restrictions see the file COPYRIGHT
included in this directory.
This port to Osr5 was donated by
ARTURO MONTES mitosys@colomsat.net.co
Its a snapshot of the 1.60 Beta 5 version
It passes all the tests except test_fork (this seems to be a problem
with the MIT source)
and I suspect there may also to be problems with
the floating point initialisation and perhaps the netdb access as well
Regarding the networking API's mind the following (ARTURO):
- Always we are searching host address in /etc/hosts by default, if you
want other behaviour let me to know.
- If you haven't an entry in /etc/hosts, please create it and after test
with DNS service.
regarding floating point initialisation (ARTURO)
...mit-pthreads/pthreads/tests> ./test_preemption_float
test_preemption_float INDETERMINATE
I inhibit the pthread float code, but they are a minor changes in machdep.c.
> What did you do/needs to be done here ??
Look into machdep.c machdep_save_float_state() and
machdep_restore_float_state() routine. I think the initialization float
code can have problems with pthread initialization code.
----------------
If you wish to rebuild from source you'll need the gnus devsys
(gmake and gcc) and don't use configure to reconfigure the makefiles, etc
( I don't know why this is but it doesn't work)
If Arturo keeps me updated with buildable snapshots I'll endeavour to keep
the skunkware Website updated with them.
Best of luck
hops 01-Aug-97
This pthread package is/will be based on the POSIX1003.1c Draft 10 pthread
standard, and Frank Muellers paper on signal handeling presented at the
Winter 93 USENIX conference.
It is currently being designed and written by me, Chris Provenzano.
All bug, comments, and questions can be sent me at proven@mit.edu,
or pthreads@mit.edu.
PLEASE, don't send questions, bugs or patches to any of the *BSD*, Linux
or GNU mailing lists.
Thanks goes to Ken Raeburn for his help on the Sparc port, the configurator,
and his many suggestions, Greg Hudson for the thread safe net routines and
all the testing he's done.
More thanks to Mark Eichin and all the others for the testing they have done.
PORTING
One of the goals of this user space implementation of pthreads is that it
be portable. I have minimized the ammount of assembler code necessary,
but some is.
If you want to port it to another platform here are a few basic hints.
You will need to create a machdep.h, machdep.c and syscall.S for the
new architecture. The first two are necessary to get the context switch
section of the pthread package running, the third is for all the syscalls.
INCLUDE FILES AND PORTING
In addition to the above three files you need to create a slew of .h files.
Take a look at an existing port to determine what is in each, and then
take a look at your system header files to determine what to put in them.
------------------------------------------------------------------------------
Copyright (c) 1993, 1994, 1995, 1996 Chris Provenzano. All rights reserved.
This product includes software developed by the Univeristy of California,
Berkeley and its contributors.
For further licencing and distribution restrictions see the file COPYRIGHT
included in this directory.
This what should be done to get more functionally for mysqld.
- open should be interruptable.
- fcntl lock should be interruptable.
For patches made to this release, check the file Changes-mysql
For the 96/11/11 release version 1_60_beta6
Ports
Alpha running NetBSD-1.1 by Chris G Demetriou <cgd+@cs.cmu.edu>
i386 running BSDi-2.1 by David J MacKenzie <djm@va.pubnix.com>
Bug Fixes
Test for struct timespec under linux and DTRT.
include/unistd.h : #define SEEK_SET, SEEK_CUR, and SEEK_END.
Bug reported by Stephen Tether <tether@MITLNS.MIT.EDU>
stdlib/system.c : Uses the POSIX signal systemcalls.
Bug reported by Matthew Newhook <matthew@thor.udc.neweast.ca>.
net/gethostbyname.c: #include <string.h> and fix dereference problem.
Bug reported by Chris G Demetriou <cgd+@cs.cmu.edu>
pthreads/fd.c: Fix bug in close() reported by
Bug reported by "William S. Lear" <rael@dejanews.com>
tests/p_bench_pthread_create.c : Only try and create 10000 threads.
include/pthread/sleep.h : No need to prototype machdep_gettimeofday()
since it is declared here.
Bug reported by Stewart Gebbie <stewart@global.co.za>
stdio/fwrite.c: Fixed bug where if total bytes written = 0 then a divid
by 0 occurs. Thanks to CTLarsen@lbl.gov for finding is and to
Jin Guojun <jin@george.lbl.gov> for submitting a patch for it.
stdio/refill.c (__swalk_lflush()): Second pass of flush should call
flockfile() not ftrylockfile(). Just like in __swalk_sflush()
net/res_internal.c (_res_parse_answer()): It looks like if
iquery is true and type == T_PTR then the result->h_name
will be over written because the bp isn't incrementd
appropriately. Thanks to David Halls <David.Halls@cl.cam.ac.uk>
for finding it.
net/serv_internal.c (_serv_buf()) : Allocate more than four bytes
of buffer space. Reported by drh@@tobit.vnet.net.
pthreads/fd_kern.c: Make sure exception fds are included in
machdep_sys_select() for support of select(). Thanks to
Larry V. Streepy, Jr. <streepy@healthcare.com> for the patches.
pthreads/fd_kern.c: Fix more I/O routines to report NOTOK on error
instead of the old -error number. Hopefully this is the last of
them. Thanks to Larry V. Streepy, Jr. <streepy@healthcare.com> for
the patches.
machdep/engine-i386-linux-1.0.c: Remove unneeded machdep_sys_readv()
and machdep_sys_writev() routines. Reported by
pthreads/process.c : Fix execl() and execle() to work on sparc systems.
pthreads/fd_sysv.c : Fix accept() to work under Solaris 2.4
For the 96/03/09 release version 1_60_beta5
Ports
Sparc running NetBSD-1.1
Additions
New reentrant netdb similar to Solaris API (ghudson)
Bug Fixes
Make default signal handlers work.
Deadlock scheduling bug reported by Cathy Abbott <cabbot@cs.utk.edu>
See pthreads-bugs transaction 31
pthread/queue.c (pthread_queue_remove()): Don't set thread->queue and
thread->next to NULL unless the thread is removed from the queue.
pthreads/fd.c (setsockopt(), getsockopt(), getsockname(),
getpeername()) : Call fd_lock() with appropriate paramaters.
pthreads/fd_kern.c (sendmsg_timedwait()): Call fd_unlock() with
FD_WRITE instead of FD_READ paramater.
machdep/*/timers.h net/res_send.c, pthreads/cond.c, pthreads/select.c
pthreads/sleep.c, tests/test_pthread_cond_timedwait.c:
Change timespec to be POSIX compliant.
include/unistd.h : Change u_int to unsigned [int] in prototypes.
pthreads/fd.c : Use FD_SETSIZE instead of 1024 for a limit on fds.
For the 95/09/xx release version 1_60_beta4
Ports
SGI running IRIX-5.3
Additions
Added pthread_sigprocmask().
Added CV attributes
strtok() and strtok_r() (Greg Hudson)
getsockname() (Sean Levy)
Bug Fixes
stdio/fwalk.c, stdio/refill.c : Use flockfile() instead of
ftrylockfile()/pthread_yield(), for traversing FILE list.
pthreads/sig.c : Remove enum pthread_sig_flags and just use the vector.
Added pthread_sigprocmask().
pthreads/signal.c : Protect calls to pthread_sig_process().
configure : Create the obj directory.
tests/test_preemption_float.c : Rewritten to actually work.
machdep/engine-i386-linux-1.0.c : Added __strtol_internal()
tests/test_stdio_1.c : Don't use base_name or dir_name as variables.
gen/getcwd.c : fstat => machdep_sys_fstat, since kernel fd's are
used in the DIR data structure
gen/isatty.c : Fixed call to fd_lock() to pass the right # args.
pthreads/pthread_init.c : Fixed uninitialized members of
pthread_initial.
For the 95/06/xx release version 1_60_beta3
Additions
Add exec variants execl, execlp, execv, execvp (Ken Raeburn)
pthreads/fd_sysv.c : Added routines setsockopt() and getsockname().
Added include/endian.h : For machine dependent endian junk. (YUCK)
Added socketpair()
Added ttyname_r()
Bug Fixes
config/Makefile.in : Need $$ to reference shell variables in make.
config/configure, config/configure.in : Redo freebsd2.* machine.
machdep/sunos-4.1.3/__stdlib.h : typedef pthread_size_t size_t
pthreads/fd.c : Fix bug with fd_free(), dup(), dup2(), and close()
where a fd gets lost after a dup() then close().
pthreads/fd_kern.c : The fd_table[fd]->flags of the fd that accept()
returns should be the same as those of the fd passed to accept().
stdio/fclose.c : Don't call funlockfile(fp) after fp->_file has been
closed.
pthreads/select.c : Move pthread_sched_prevent() inside the statement.
if (machdep_sys_select(...) == OK)
pthreads/machdep/linux-1.0/cdefs.h : moved the include_next outside
of the ifdef so that it would eventually find the system cdefs.h
pthreads/signal.c : Check sig_to_process before and after fd_kern_wait()
. It is possible for sig_handler_fake() to registered one.
pthreads/signal.c : Unset pthread_run temporarily around the call to
sig_handler(0). places where this causes core dumps should check
pthread_run.
include/stdlib.h : Fix prototype for bsearch().
machdep/syscall-i386-freebsd-2.0.S syscall-template-i386-freebsd2.0.S:
Fix macro expansion problems for FreeBSD-2.0
machdep/engine-sparc-sunos-5.3.c : Fix machdep_sys_select() to return
machdep_sys_poll() errors and not the number of entries found.
gen/getcwd.c : Use strlen(dp->d_name) not dp->d_namlen because there
may be extra data associated with dp->d_namelen.
machdep/freebsd-2.0/__unistd.h: Change #define _POSIX_VDISABLE to 0xff
include/pthread.h : Added prototypes pthread_kill(), pthread_signal()
machdep/linux-1.0/__signal.h : Added #define __sigmask() and
#define sigmask, and fixed other SIG macros to use __sigmask.
machdep/linux-1.0/dirent.h : #include <sys/types.h>
machdep/linux-1.0/wait.h : Fix #define WIFSTOPPED(x) to use __WSTATUS(x)
machdep/syscall-i386-linux-1.0.S : Added elf support. (NOT TESTED)
pthreads/stat.c : Added to separate linux stat calls.
(SGI will need this too)
pthreads/signal.c : Whereever #ifdef (SA_RESETHAND) is used then
#ifdef (SA_RESTART) also
gen/isatty.c : isatty_basic() is called with the KFD not UFD.
machdep/sunos-4.1.3/__stdlib.h : #include <sys/stdtypes.h>
config/sun4os4.mk : Added pipe to SYSCALL_EXCEPTIONS
machdep/syscall-sparc-sunos-4.1.3.S : Add machdep_sys_pipe().
include/stdio.h : Remove __getc() and __putc(), because they really
shouldn't be inlined.
machdep/sunos-4.1.3/stat.h : Added __BEGIN_DECLS and __END_DECLS.
machdep/alpha-osf1/cdefs.h, machdep/hpux-9.03/cdefs.h
machdep/linux-1.0/cdefs.h, machdep/sunos-4.1.3/cdefs.h
machdep/sunos-5.3/cdefs.h, machdep/ultrix-4.2/cdefs.h :
#define __INLINE static inline and don't #define
__CAN_DO_EXTERN_INLINE if __cplusplus and __GCC__ is defined.
pthreads/fd_sysv.c : Fix so that only systems without socket systemcalls
compile this file.
machdep/engine-i386-linux-1.0.c : Fix linux machdep_sys_getdirentries()
pthreads/gen : Nuke the signal-blocking code in pclose(). It doesn't do
any good in a threaded program; some other thread would just get
the signal.
For the 94/11/xx release version 1_60
Additions
Added recvfrom_timedwait(), and similar calls
Added thread safe time routines: ctime(), localtime(), ...
Added thread safe rand routines: rand(), random(), ...
Added priorities and releated routines: pthread_attr_getschedparam(),
Added signals and releated routines:pthread_kill(), sigwait(), ...
Added mutex attribues and releated routines: pthread_mutexattr_init(), .
Added abort
Added counting (recursive) mutexes.
Added debugging mutexes.
Added some more tests
Redid entire thread kernel because of priorities, and signals.
Test and set instructions no longer necessary for versions
that don't support kernel threads.
More debugging by Greg Hudson along with the network lookup routines
An Alpha port from Ken Raeburn and Sean Levy
A solaris port from me.
select() implementations from Sean Levy and Peter Hofmann
configure from Ken Raeburn
pthread_init() no longer necessary for systems with G++ from Ken Raeburn
net code from Greg Hudson including: gethostbyname(), ...
Bug fixes:
honor _POSIX_THREAD_DESTRUCTOR_ITERATIONS
pthread_key_destroy() is really pthread_key_delete()
# === GNUmakefile ============================================================
# Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu
#
# Description: This file is for creating the test programs for libpthread.a
#
# 1.00 93/08/03 proven
# -Initial cut for pthreads.
#
CC = ../pgcc -notinstalled
srctop = @srctop@
srcdir = @srctop@/lib
VPATH = @srctop@/lib
CDEBUGFLAGS = @CFLAGS@
CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(ADDL_CFLAGS) -DSRCDIR=\"$(srcdir)\"
#
DIRS = finger
################################################################################
#
all:
(for i in $(DIRS); do cd $$i; $(MAKE) all; cd ..; done)
clean:
(for i in $(DIRS); do cd $$i; $(MAKE) clean; cd ..; done)
rm -f *.o $(TESTS) $(BENCHMARKS) a.out core maketmp makeout
depend:
(for i in $(DIRS); do cd $$i; $(MAKE) depend; cd ..; done)
sed '/\#\#\# Dependencies/q' < Makefile > maketmp
(for i in $(CSRC);do $(CPP) -M $$i;done) >> maketmp
cp maketmp Makefile
install:
(for i in $(DIRS); do cd $$i; $(MAKE) install; cd ..; done)
realclean: clean
(for i in $(DIRS); do cd $$i; $(MAKE) realclean; cd ..; done)
rm -f Makefile
Makefile: Makefile.in
(cd .. ; sh config.status)
################################################################################
### Do not remove the following line. It is for depend #########################
### Dependencies:
# === makefile ============================================================
# Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu
#
# Description: This file is for creating the test programs for libpthread.a
#
# 1.00 93/08/03 proven
# -Initial cut for pthreads.
#
srctop = @srctop@
srcdir = @srctop@/bin/finger
VPATH = @srctop@/bin/finger
prefix= @prefix@
exec_prefix= @exec_prefix@
INSTALL_PATH = @exec_prefix@
BINDIR = $(INSTALL_PATH)/bin
LIBDIR = $(INSTALL_PATH)/lib
MANDIR = $(INSTALL_PATH)/man
INCDIR = $(INSTALL_PATH)/include
CC = ../../pgcc -notinstalled
CDEBUGFLAGS = @CFLAGS@
INCLUDES = -I@srctop@/lib/libpthreadutil/ -L../../lib/libpthreadutil/
CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(ADDL_CFLAGS) -DSRCDIR=\"$(srcdir)\"
RANLIB = @RANLIB@
OBJS = finger.o net.o
BINARY = finger
################################################################################
#
all : $(BINARY)
clean:
rm -f *.o $(TESTS) $(BENCHMARKS) a.out core maketmp makeout
depend:
sed '/\#\#\# Dependencies/q' < Makefile > maketmp
(for i in $(CSRC);do $(CPP) -M $$i;done) >> maketmp
cp maketmp Makefile
install: $(BINARY)
install $(BINARY) $(BINDIR)
realclean: clean
rm -f Makefile
Makefile: Makefile.in
(cd ../.. ; sh config.status)
.c.o:
$(CC) $(CFLAGS) -c $<
$(BINARY) : ${OBJS}
$(CC) $(CFLAGS) -o $(BINARY) ${OBJS} -lpthreadutil
################################################################################
### Do not remove the following line. It is for depend #########################
### Dependencies:
/* ==== finger.c ============================================================
* Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu
*
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Tony Nardo of the Johns Hopkins University/Applied Physics Lab.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Chris Provenzano,
* the University of California, Berkeley and its contributors.
* 4. Neither the name of Chris Provenzano, 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 CHRIS PROVENZANO, THE REGENTS 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 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.
*
* 1.00 93/08/26 proven
* -Pthread redesign of this file.
*
* 1.10 95/02/11 proven
* -Now that gethostbyname works ....
*/
#ifndef lint
char copyright[] =
"@(#) Copyright (c) 1989 The Regents of the University of California.\n\
@(#) Copyright (c) 1993, 1995 Chris Provenzano.\n\
@(#) Copyright (c) 1995 Greg Stark.\n\
All rights reserved.\n";
#endif /* not lint */
#include <pthreadutil.h>
#include <sys/param.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void *netfinger();
void usage(int eval)
{
fprintf(stderr,
"usage: finger [-lps] [-c <net_count>] [-t|T <timeout>] [-f <filename>] [login ...]\n");
exit(eval);
}
/*
* These globals are set initialy and then are only read.
* They do not need mutexes.
*/
int thread_time = 0, program_timeout = 0, lflag = 0;
pthread_tad_t parse_file_tad;
pthread_tad_t netfinger_tad;
void * timeout_thread(void * arg)
{
sleep(program_timeout);
exit(0);
}
void * signal_thread(void * arg)
{
int sig;
sigset_t program_signals;
sigemptyset(&program_signals);
sigaddset(&program_signals, SIGINT);
sigwait(&program_signals, &sig);
exit(0);
}
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 64
#endif
void * parse_file(void * arg)
{
char hostname[MAXHOSTNAMELEN];
char * filename = arg;
pthread_atexit_t atexit_id;
pthread_attr_t attr;
pthread_t thread_id;
char * thread_arg;
FILE * fp;
int len;
netsetupwait();
/* Parse the file and create a thread per connection */
if ((fp = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Can't open file %s\n", filename);
pthread_exit(NULL);
}
pthread_atexit_add(&atexit_id, fclose_nrv, fp);
if (pthread_attr_init(&attr)) {
fprintf(stderr, "Error: Can't initialize thread attributes\n");
exit(2);
}
pthread_atexit_add(&atexit_id, pthread_attr_destroy_nrv, &attr);
while (fgets(hostname, MAXHOSTNAMELEN, fp)) {
if ((thread_arg = (char *)malloc(len = strlen(hostname))) == NULL) {
fprintf(stderr, "Error: out of memory\n");
exit(2);
}
hostname[len - 1] = '\0';
strcpy(thread_arg, hostname);
pthread_attr_setcleanup(&attr, free, thread_arg);
if (pthread_tad_create(&netfinger_tad, &thread_id, NULL,
netfinger, thread_arg)) {
fprintf(stderr, "Error: pthread_tad_create() netfinger_tad.\n");
exit(2);
}
}
pthread_exit(NULL);
}
main(int argc, char **argv)
{
pthread_atexit_t atexit_id;
pthread_t thread_id;
int max_count = 0;
char ch;
/* getopt variables */
extern char *optarg;
extern int optind;
/* Setup tad for parse_file() threads */
if (pthread_tad_init(&parse_file_tad, max_count)) {
fprintf(stderr,"Error: couldn't create parse_file() TAD.\n");
exit(1);
}
while ((ch = getopt(argc, argv, "c:f:t:T:ls")) != (char)EOF)
switch(ch) {
case 't': /* Time to let each thread run */
if ((thread_time = atoi(optarg)) <= 0) {
usage(1);
}
break;
case 'T': /* Time to let entire program run */
if ((program_timeout = atoi(optarg)) <= 0) {
usage(1);
}
break;
case 'f': /* Parse file for list of places to finger */
if (pthread_tad_create(&parse_file_tad, &thread_id, NULL,
parse_file, optarg)) {
fprintf(stderr,"Error: pthread_tad_create() parse_file_tad.\n");
exit(1);
}
break;
case 'c':
max_count = atoi(optarg);
break;
case 'l': /* long format */
lflag = 1;
break;
case 's': /* short format */
lflag = 0;
break;
case '?':
usage(0);
default:
usage(1);
}
/* The rest of the argumants are hosts */
argc -= optind;
argv += optind;
/* Setup timeout thread, if there is one */
if (program_timeout) {
if (pthread_create(&thread_id, NULL, timeout_thread, NULL)) {
fprintf(stderr,"Error: couldn't create program_timeout() thread\n");
exit(1);
}
}
/* Setup cleanup thread for signals */
if (pthread_create(&thread_id, NULL, signal_thread, NULL)) {
fprintf(stderr,"Error: couldn't create signal_timeout() thread\n");
exit(1);
}
/* Setup tad for netfinger() threads */
if (pthread_tad_init(&netfinger_tad, max_count)) {
fprintf(stderr,"Error: couldn't create netfinger() TAD.\n");
exit(1);
}
/* Setup the net and let everyone run */
netsetup();
while (*argv) {
if (pthread_tad_create(&netfinger_tad, &thread_id, NULL,
netfinger, *argv)) {
fprintf(stderr, "Error: pthread_tad_create() netfinger_tad.\n");
exit(2);
}
argv++;
}
pthread_tad_wait(&parse_file_tad, 0);
pthread_tad_wait(&netfinger_tad, 0);
exit(0);
}
/* ==== net.c ============================================================
* Copyright (c) 1993, 1995 by Chris Provenzano, proven@athena.mit.edu
*
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Tony Nardo of the Johns Hopkins University/Applied Physics Lab.
*
* 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.
* 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
* 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
* 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.
*
* 1.00 93/08/26 proven
* -Pthread redesign of this file.
*/
#include <pthreadutil.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/param.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <stdio.h>
#include <ctype.h>
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 64
#endif
/*
* These globals are set initialy and then are only read.
* They do not need mutexes.
*/
extern int lflag;
char myhostname[MAXHOSTNAMELEN];
/*
* These globals change and therefor do need mutexes
*/
pthread_mutex_t spmutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t spcond = PTHREAD_COND_INITIALIZER;
struct servent *sp = NULL;
void netsetup(void)
{
pthread_mutex_lock(&spmutex);
if (sp) {
fprintf(stderr, "finger: service pointer already initialized.\n");
exit(2);
}
if ((sp = (struct servent *)malloc(sizeof(struct servent) + 4096)) == NULL){
fprintf(stderr, "finger: Couldn't allocate service pointer.\n");
exit(2);
}
if (getservbyname_r("finger", "tcp", sp, (char *)sp + sizeof(struct servent), 4096) == NULL) {
fprintf(stderr, "finger: tcp/finger: unknown service\n");
exit(2);
}
if (gethostname(myhostname, MAXHOSTNAMELEN)) {
fprintf(stderr, "finger: couldn't get my hostname.\n");
exit(2);
}
pthread_cond_broadcast(&spcond);
pthread_mutex_unlock(&spmutex);
}
void netsetupwait(void)
{
pthread_mutex_lock(&spmutex);
while(sp == NULL) {
pthread_cond_wait(&spcond, &spmutex);
}
pthread_mutex_unlock(&spmutex);
}
void *netfinger(char *name)
{
pthread_atexit_t atexit_id;
register int c, lastc;
struct in_addr defaddr;
struct hostent *hp;
struct sockaddr_in sin;
int s, i, readbuflen;
char readbuf[1024];
char *host;
netsetupwait();
pthread_atexit_add(&atexit_id, fflush_nrv, NULL);
if (!(host = strrchr(name, '@'))) {
host = myhostname;
} else {
*host++ = '\0';
}
if (!(hp = gethostbyname(host))) {
if ((defaddr.s_addr = inet_addr(host)) < 0) {
fprintf(stderr, "[%s] gethostbyname: Unknown host\n", host);
return;
}
}
sin.sin_family = hp->h_addrtype;
memcpy((char *)&sin.sin_addr, hp->h_addr, hp->h_length);
sin.sin_port = sp->s_port;
if ((s = socket(sin.sin_family, SOCK_STREAM, 0)) < 0) {
sprintf(readbuf, "[%s]: socket", hp->h_name);
perror(readbuf);
return;
}
/* have network connection; identify the host connected with */
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
sprintf(readbuf, "[%s]: connect", hp->h_name);
perror(readbuf);
close(s);
return;
}
/* -l flag for remote fingerd */
if (lflag)
write(s, "/W ", 3);
/* send the name followed by <CR><LF> */
write(s, name, strlen(name));
write(s, "\r\n", 2);
/*
* Read from the remote system; once we're connected, we assume some
* data. If none arrives, we hang until the user interrupts, or
* until the thread timeout expires.
*
* If we see a <CR> or a <CR> with the high bit set, treat it as
* a newline; if followed by a newline character, only output one
* newline.
*
* Otherwise, all high bits are stripped; if it isn't printable and
* it isn't a space, we can simply set the 7th bit. Every ASCII
* character with bit 7 set is printable.
*/
for (readbuflen = read(s, readbuf, 1024), flockfile(stdout), lastc = '\n',
printf("[%s]\n", hp->h_name); readbuflen > 0;
readbuflen = read(s, readbuf, 1024)) {
for (i = 0; i < readbuflen; i++) {
c = readbuf[i] & 0x7f;
if (c == 0x0d) {
c = '\n';
lastc = '\r';
} else {
if (!isprint(c) && !isspace(c))
c |= 0x40;
if (lastc != '\r' || c != '\n')
lastc = c;
else {
lastc = '\n';
continue;
}
}
putchar_unlocked(c);
}
}
if (lastc != '\n')
putchar_unlocked('\n');
funlockfile(stdout);
}
This diff is collapsed.
The files config.guess and config.sub in this directory come from the GNU
autoconf distribution, and are covered by the GNU Public License, which may
be found in the file COPYING.GNU. They are the only files covered by the
GPL.
# === GNUmakefile =============================================================
# Copyright (c) 1991, 1992, 1993 Chris Provenzano, proven@athena.mit.edu
#
# Description: This file is for creating libpthread.a
#
# 1.00 93/11/17 proven
# -Put all the .o files into one file libpthread.a
# -Initial cut for pthreads.
#
INSTALL_PATH = $(exec_prefix)
BINDIR = $(INSTALL_PATH)/bin
LIBDIR = $(INSTALL_PATH)/lib
MANDIR = $(INSTALL_PATH)/man
INCDIR = $(INSTALL_PATH)/include
SUBINCDIR = $(INCDIR)/pthread
AR = ar
AS = gas
CFLAGS = -I. -Iinclude -I$(srcdir)/include -DPTHREAD_KERNEL \
@CFLAGS@
CXXFLAGS = -I. -Iinclude -I$(srcdir)/include -DPTHREAD_KERNEL \
@CXXFLAGS@
LD = gld
CSRC =
PTHREAD_DIR = pthreads stdlib stdio gen
DIRS = $(PTHREAD_DIR)
HEADERS =
LIBRARIES = libpthread.a
.CURDIR = .
# force correct default target
all:
###############################################################################
#
# Read in any special flags that config knows about
include config.flags
# What the heck. Convert srcdir to absolute form so it looks prettier.
srcdir := $(shell cd $(srcfoo) && pwd)
################################################################################
#
# Here starts the nitty grity part of the Makefile.
all-lib : libpthread.a
include ${srcdir}/pthreads/GNUmakefile.inc
include ${srcdir}/stdlib/GNUmakefile.inc
include ${srcdir}/stdio/GNUmakefile.inc
include ${srcdir}/string/GNUmakefile.inc
include ${srcdir}/gen/GNUmakefile.inc
include ${srcdir}/net/GNUmakefile.inc
include ${srcdir}/scripts/GNUmakefile.inc
REGULAR_OBJS= $(subst .cc,.o,$(SRCS))
REGULAR_OBJS:= $(subst .c,.o,$(REGULAR_OBJS))
REGULAR_OBJS:= $(subst .S,.o,$(REGULAR_OBJS))
OBJS= $(REGULAR_OBJS) $(EXTRA_OBJS)
REALOBJS = $(addprefix obj/, $(OBJS))
$(REALOBJS) : $(config) $(types) $(paths)
# Since we do not have a list of the relevant files we do a make clean
# before copying everyting to the distribution directory.
distdir:
$(MAKE) clean
cp -a . $(distdir)
# Remove symlinks that the distribution should not have.
rm -f $(distdir)/config.cache \
$(distdir)/include/pthread/machdep.h \
$(distdir)/include/pthread/posix.h \
$(distdir)/include/sys \
$(distdir)/machdep.c \
$(distdir)/syscall.S \
$(distdir)/syscall-template.S
clean:
rm -f a.out core maketmp makeout $(LIBRARIES) $(BINARIES) libpthread.*
rm -rf obj
cd tests && $(MAKE) clean && cd ..
install-lib: $(LIBRARIES) install-dirs
for x in $(LIBRARIES); \
do install $$x $(DESTDIR)$(LIBDIR); \
done
# Removed make install since mysql uses this in place.
# install-lib install-include install-bin
install:
libpthread.a: obj/libpthread.a
rm -f libpthread.a
ln -s obj/libpthread.a .
obj/libpthread.a: ${REALOBJS}
rm -f libpthread.a obj/new.a obj/libpthread.a
cd obj && \
ar r new.a ${OBJS} && \
$(RANLIB) new.a && \
mv -f new.a libpthread.a && \
cd ..
# For examining a combined symbol table, sizes, &c.
libpthread.o: ${REALOBJS}
cd obj && ld -r -o ../libpthread.o ${OBJS} && cd ..
obj/x:
if [ -d obj ]; then true; else mkdir obj; fi
cp /dev/null obj/x
GNUmakefile: config.status ${srcdir}/config/GNUmakefile.in
$(SHELL) config.status
obj/%.o: %.c obj/x
$(CC) $(CFLAGS) -c $< -o $@
obj/%.o: %.cc obj/x
$(CXX) $(CXXFLAGS) $(CFLAGS) -c $< -o $@
obj/%.o: %.S obj/x
$(CC) $(CFLAGS) -c $< -o $@
# @(#)Makefile 5.2 (Berkeley) 3/5/91
#
LIB=pthread
NOPIC=1
NOPROFILE=1
NOLINT=1
MKPIC=no
MKPROFILE=no
MKLINT=no
CPPFLAGS+= -I${.CURDIR} -I${.CURDIR}/include -I${srcdir}/include -DPTHREAD_KERNEL
CDEBUGFLAGS= @CFLAGS@
CFLAGS+= ${CDEBUGFLAGS}
# CFLAGS+= ${CPPFLAGS} <- done by bsd.lib.mk
CFLAGS+= ${CPPFLAGS}
LIBDIR= $(exec_prefix)/lib
BINDIR= $(exec_prefix)/bin
INCDIR= $(exec_prefix)/include
MANDIR= $(exec_prefix)/man
.OBJDIR != if test -d ${.CURDIR}/obj ; then true ; else mkdir ${.CURDIR}/obj || exit 1 ; fi ; echo ${.CURDIR}/obj
# Standard bsd install rules look for the "install" program, rather than
# using some variable. So, hack things so that that install rule works.
BINGRP != echo " " `groups` " " | sed 's/ [0-9][0-9]* / /g' | awk '{print $$1}'
BINOWN != echo $${USER}
LIBMODE = 644 # so ranlib can run!
.include "config.flags"
# %!$@ pmake seems to automagically cd into the obj directory, so relative
# srcdir references are completely botched. Try to figure out an absolute
# pathname for srcdir here, and live with it.
srcdir = $(srctop)
beforeinstall: install-dirs
.include "${srcdir}/pthreads/Makefile.inc"
.include "${srcdir}/stdlib/Makefile.inc"
.include "${srcdir}/stdio/Makefile.inc"
.include "${srcdir}/string/Makefile.inc"
.include "${srcdir}/gen/Makefile.inc"
.include "${srcdir}/net/Makefile.inc"
.include "${srcdir}/scripts/Makefile.inc"
$(OBJS) : $(config) $(types) $(paths)
Makefile: ${srcdir}/config/Makefile.in
cd ${.CURDIR} && sh config.status
all-lib : libpthread.a
# Removed make install since mysql uses this in place.
#install : install-bin install-include
install:
.include <bsd.lib.mk>
/* Does the OS already support struct timespec */
#undef _OS_HAS_TIMESPEC
/* For networking code: an integral type the size of an IP address (4
octets). Determined by examining return values from certain
functions. */
#undef pthread_ipaddr_type
/* For networking code: an integral type the size of an IP port number
(2 octets). Determined by examining return values from certain
functions. */
#undef pthread_ipport_type
/* type of clock_t, from system header files */
#undef pthread_clock_t
/* Specially named so grep processing will find it and put it into the
generated ac-types.h. */
#undef pthread_have_va_list_h
/* type of size_t, from system header files */
#undef pthread_size_t
/* type of ssize_t, from system header files */
#undef pthread_ssize_t
/* type of time_t, from system header files */
#undef pthread_time_t
/* type of fpos_t, from system header files */
#undef pthread_fpos_t
/* type of off_t, from system header files */
#undef pthread_off_t
/* type of va_list, from system header files */
#undef pthread_va_list
/* type of sigset_t, from system header files */
#undef pthread_sigset_t
/* I don't know why the native compiler definitions aren't sufficient
for this. */
#undef sunos4
/* define if the linker hauls in certain static data from libc even when
you don't want it to. yes, this description is bogus, but chris added
the need for this, without describing the problem. */
#undef LD_LINKS_STATIC_DATA
/* define if the system reissues the SIGCHLD if the handler reinstalls
* itself before calling wait()
*/
#undef BROKEN_SIGNALS
/* where are terminal devices to be found? */
#undef _PATH_PTY
/* what directory holds the time zone info on this system? */
#undef _PATH_TZDIR
/* what file indicates the local time zone? */
#undef _PATH_TZFILE
/* Paths for various networking support files. */
#undef _PATH_RESCONF
#undef _PATH_HOSTS
#undef _PATH_NETWORKS
#undef _PATH_PROTOCOLS
#undef _PATH_SERVICES
/* Path for Bourne shell. */
#undef _PATH_BSHELL
dnl Autoconf extensions for pthreads package.
dnl
ifelse(regexp(AC_DEFINE(xxxxx),.*@@@.*),-1,,[define(IS_AUTOHEADER)])])dnl
dnl
dnl Now, the real stuff needed by the pthreads package.
dnl
AC_DEFUN([PTHREADS_CHECK_ONE_SYSCALL],
[AC_MSG_CHECKING(for syscall $1)
AC_CACHE_VAL(pthreads_cv_syscall_$1,
AC_TRY_LINK([
/* FIXME: This list should be generated from info in configure.in. */
#ifdef HAVE_SYSCALL_H
#include <syscall.h>
#else
#ifdef HAVE_SYS_SYSCALL_H
#include <sys/syscall.h>
#else
where is your syscall header file??
#endif
#endif
],[
int x;
x = SYS_$1 ;
],
eval pthreads_cv_syscall_$1=yes,
eval pthreads_cv_syscall_$1=no))
if eval test \$pthreads_cv_syscall_$1 = yes ; then
pthreads_syscall_present=yes
available_syscalls="$available_syscalls $1"
dnl Can't just do the obvious substitution here or autoheader gets
dnl sorta confused. (Sigh.) Getting the requoting of the brackets right
dnl would be a pain too.
macroname=HAVE_SYSCALL_`echo $1 | tr '[[[a-z]]]' '[[[A-Z]]]'`
AC_DEFINE_UNQUOTED($macroname)
else
pthreads_syscall_present=no
missing_syscalls="$missing_syscalls $1"
fi
AC_MSG_RESULT($pthreads_syscall_present)
])dnl
dnl
AC_DEFUN(PTHREADS_CHECK_SYSCALLS,dnl
ifdef([IS_AUTOHEADER],[#
dnl Need to fake out autoheader, since there's no way to add a new class
dnl of features to generate config.h.in entries for.
@@@syscalls="$1"@@@
@@@funcs="$funcs syscall_`echo $syscalls | sed 's/ / syscall_/g'`"@@@
],
[pthreads_syscall_list="$1"
for pthreads_syscallname in $pthreads_syscall_list ; do
PTHREADS_CHECK_ONE_SYSCALL([$]pthreads_syscallname)
done
]))dnl
dnl
dnl Requote each argument.
define([requote], [ifelse($#, 0, , $#, 1, "$1",
"$1" [requote(builtin(shift,$@))])])dnl
dnl
dnl Determine proper typedef value for a typedef name, and define a
dnl C macro to expand to that type. (A shell variable with that value
dnl is also created.) If none of the specified types to try match, the
dnl macro is left undefined, and the shell variable empty. If the
dnl typedef name cannot be found in the specified header files, this
dnl test errors out; perhaps it should be changed to simply leave the
dnl macro undefined...
dnl
dnl PTHREADS_FIND_TYPE(typedefname,varname,includes,possible values...)
dnl
AC_DEFUN(PTHREADS_FIND_TYPE,
ifdef([IS_AUTOHEADER],[#
@@@syms="$syms $2"@@@
],[dnl
AC_MSG_CHECKING(type of $1)
AC_CACHE_VAL(pthreads_cv_type_$1,
[AC_TRY_COMPILE([$3],[ extern $1 foo; ],
[ for try_type in [requote(builtin(shift,builtin(shift,builtin(shift,$@))))] ; do
AC_TRY_COMPILE([$3],[ extern $1 foo; extern $try_type foo; ],
[ pthreads_cv_type_$1="$try_type" ; break ])
done],
AC_MSG_ERROR(Can't find system typedef for $1.))])
if test -n "$pthreads_cv_type_$1" ; then
AC_DEFINE_UNQUOTED($2,$pthreads_cv_type_$1)
fi
$2=$pthreads_cv_type_$1
AC_MSG_RESULT($pthreads_cv_type_$1)]))dnl
dnl
dnl
dnl Like above, but the list of types to try is pre-specified.
dnl
AC_DEFUN(PTHREADS_FIND_INTEGRAL_TYPE,[
PTHREADS_FIND_TYPE([$1], [$2], [$3],
int, unsigned int, long, unsigned long,
short, unsigned short, char, unsigned char,
long long, unsigned long long)])dnl
# Since the real configure script runs from the config subdirectory,
# compensate here...
srctop= @srctop@
srcfoo= $(srctop)
prefix= @prefix@
exec_prefix= @exec_prefix@
cpu = @target_cpu@
os = @target_os@
MISSING_SYSCALLS = @missing_syscalls@
AVAILABLE_SYSCALLS = @available_syscalls@
SYSCALL_EXCEPTIONS = @SYSCALL_EXCEPTIONS@
HAVE_SYSCALL_TEMPLATE = @HAVE_SYSCALL_TEMPLATE@
CC = @CC@
CXX = @CXX@
CPP = @CPP@
SHELL = /bin/sh
RANLIB = @RANLIB@
# Should use autoconf to find these. Currently our makefiles are inconsistent.
#AR = ar
#AS = gas
#LD = gld
install-dirs:
for d in $(INSTALL_PATH) $(BINDIR) $(LIBDIR) $(INCDIR) ; do \
test -d $(DESTDIR)$$d || mkdir $(DESTDIR)$$d || exit 1 ; \
done
config.status: @srcdir@/configure
cd ${.CURDIR} && $(SHELL) config.status --recheck
config.flags: config.status @srcdir@/config.flags.in
cd ${.CURDIR} && $(SHELL) config.status
realclean: clean
cd tests && $(MAKE) realclean && cd ..
rm -f $(LINKS) config.status config.flags config.cache \
Makefile GNUmakefile
types=$(.CURDIR)/include/pthread/ac-types.h
$(types) : config.h
echo '#ifndef pthread_size_t' > $(types).new
egrep '^#define pthread_' $(.CURDIR)/config.h >> $(types).new
echo '#endif' >> $(types).new
mv -f $(types).new $(types)
config=$(.CURDIR)/include/pthread/config.h
$(config) : config.h
echo '#ifndef _SYS___CONFIG_H_' > $(config).new
echo '#define _SYS___CONFIG_H_' >> $(config).new
-egrep '^#define _OS_HAS' $(.CURDIR)/config.h >> $(config).new
echo '#endif' >> $(config).new
mv -f $(config).new $(config)
paths=$(.CURDIR)/include/pthread/paths.h
$(paths) : config.h
echo '#ifndef _SYS___PATHS_H_' > $(paths).new
echo '#define _SYS___PATHS_H_' >> $(paths).new
egrep '^#define _PATH' $(.CURDIR)/config.h >> $(paths).new
echo '#endif' >> $(paths).new
mv -f $(paths).new $(paths)
all-tests: all-lib
cd ${.CURDIR}/tests && $(MAKE) all
check: all-lib
cd ${.CURDIR}/tests && $(MAKE) check
all : all-lib all-bin
install-bin: all-bin install-dirs
for x in $(SCRIPTS) ; do \
install $$x $(DESTDIR)$(BINDIR); \
done
install-include: install-dirs
(cd ${srcdir}/include && tar chf - .)|(cd $(DESTDIR)$(INCDIR) && tar xf -)
if [ -d config ]; then true; else \
(cd ${.CURDIR}/include && tar chf - .)|(cd $(DESTDIR)$(INCDIR) && tar xf -); fi
(cd $(DESTDIR)$(INCDIR) && find . \( -name CVS -o -name \*~ \) -print | xargs rm -rf)
This diff is collapsed.
/* config.h.in. Generated automatically from configure.in by autoheader. */
/* Define to `long' if <sys/types.h> doesn't define. */
#undef off_t
/* Define as the return type of signal handlers (int or void). */
#undef RETSIGTYPE
/* Define to `unsigned' if <sys/types.h> doesn't define. */
#undef size_t
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Does the OS already support struct timespec */
#undef _OS_HAS_TIMESPEC
/* Does the OS need socklen_t for the socket syscalls? */
#undef _OS_HAS_SOCKLEN_T
/* For networking code: an integral type the size of an IP address (4
octets). Determined by examining return values from certain
functions. */
#undef pthread_ipaddr_type
/* For networking code: an integral type the size of an IP port number
(2 octets). Determined by examining return values from certain
functions. */
#undef pthread_ipport_type
/* type of clock_t, from system header files */
#undef pthread_clock_t
/* Specially named so grep processing will find it and put it into the
generated ac-types.h. */
#undef pthread_have_va_list_h
/* type of size_t, from system header files */
#undef pthread_size_t
/* type of ssize_t, from system header files */
#undef pthread_ssize_t
/* type of time_t, from system header files */
#undef pthread_time_t
/* type of fpos_t, from system header files */
#undef pthread_fpos_t
/* type of off_t, from system header files */
#undef pthread_off_t
/* type of va_list, from system header files */
#undef pthread_va_list
/* I don't know why the native compiler definitions aren't sufficient
for this. */
#undef sunos4
/* define if the linker hauls in certain static data from libc even when
you don't want it to. yes, this description is bogus, but chris added
the need for this, without describing the problem. */
#undef LD_LINKS_STATIC_DATA
/* define if the system reissues the SIGCHLD if the handler reinstalls
* itself before calling wait()
*/
#undef BROKEN_SIGNALS
/* where are terminal devices to be found? */
#undef _PATH_PTY
/* what directory holds the time zone info on this system? */
#undef _PATH_TZDIR
/* what file indicates the local time zone? */
#undef _PATH_TZFILE
/* Paths for various networking support files. */
#undef _PATH_RESCONF
#undef _PATH_HOSTS
#undef _PATH_NETWORKS
#undef _PATH_PROTOCOLS
#undef _PATH_SERVICES
/* Path for Bourne shell. */
#undef _PATH_BSHELL
/* Define if you have the syscall_accept function. */
#undef HAVE_SYSCALL_ACCEPT
/* Define if you have the syscall_bind function. */
#undef HAVE_SYSCALL_BIND
/* Define if you have the syscall_chdir function. */
#undef HAVE_SYSCALL_CHDIR
/* Define if you have the syscall_chmod function. */
#undef HAVE_SYSCALL_CHMOD
/* Define if you have the syscall_chown function. */
#undef HAVE_SYSCALL_CHOWN
/* Define if you have the syscall_chroot function. */
#undef HAVE_SYSCALL_CHROOT
/* Define if you have the syscall_close function. */
#undef HAVE_SYSCALL_CLOSE
/* Define if you have the syscall_connect function. */
#undef HAVE_SYSCALL_CONNECT
/* Define if you have the syscall_creat function. */
#undef HAVE_SYSCALL_CREAT
/* Define if you have the syscall_dup function. */
#undef HAVE_SYSCALL_DUP
/* Define if you have the syscall_dup2 function. */
#undef HAVE_SYSCALL_DUP2
/* Define if you have the syscall_execve function. */
#undef HAVE_SYSCALL_EXECVE
/* Define if you have the syscall_exit function. */
#undef HAVE_SYSCALL_EXIT
/* Define if you have the syscall_fchmod function. */
#undef HAVE_SYSCALL_FCHMOD
/* Define if you have the syscall_fchown function. */
#undef HAVE_SYSCALL_FCHOWN
/* Define if you have the syscall_fcntl function. */
#undef HAVE_SYSCALL_FCNTL
/* Define if you have the syscall_flock function. */
#undef HAVE_SYSCALL_FLOCK
/* Define if you have the syscall_fork function. */
#undef HAVE_SYSCALL_FORK
/* Define if you have the syscall_fstat function. */
#undef HAVE_SYSCALL_FSTAT
/* Define if you have the syscall_fstatfs function. */
#undef HAVE_SYSCALL_FSTATFS
/* Define if you have the syscall_ftruncate function. */
#undef HAVE_SYSCALL_FTRUNCATE
/* Define if you have the syscall_getdents function. */
#undef HAVE_SYSCALL_GETDENTS
/* Define if you have the syscall_getdirentries function. */
#undef HAVE_SYSCALL_GETDIRENTRIES
/* Define if you have the syscall_getdtablesize function. */
#undef HAVE_SYSCALL_GETDTABLESIZE
/* Define if you have the syscall_getmsg function. */
#undef HAVE_SYSCALL_GETMSG
/* Define if you have the syscall_getpeername function. */
#undef HAVE_SYSCALL_GETPEERNAME
/* Define if you have the syscall_getpgrp function. */
#undef HAVE_SYSCALL_GETPGRP
/* Define if you have the syscall_getsockname function. */
#undef HAVE_SYSCALL_GETSOCKNAME
/* Define if you have the syscall_getsockopt function. */
#undef HAVE_SYSCALL_GETSOCKOPT
/* Define if you have the syscall_ioctl function. */
#undef HAVE_SYSCALL_IOCTL
/* Define if you have the syscall_ksigaction function. */
#undef HAVE_SYSCALL_KSIGACTION
/* Define if you have the syscall_link function. */
#undef HAVE_SYSCALL_LINK
/* Define if you have the syscall_listen function. */
#undef HAVE_SYSCALL_LISTEN
/* Define if you have the syscall_lseek function. */
#undef HAVE_SYSCALL_LSEEK
/* Define if you have the syscall_lstat function. */
#undef HAVE_SYSCALL_LSTAT
/* Define if you have the syscall_open function. */
#undef HAVE_SYSCALL_OPEN
/* Define if you have the syscall_pgrpsys function. */
#undef HAVE_SYSCALL_PGRPSYS
/* Define if you have the syscall_pipe function. */
#undef HAVE_SYSCALL_PIPE
/* Define if you have the syscall_poll function. */
#undef HAVE_SYSCALL_POLL
/* Define if you have the syscall_putmsg function. */
#undef HAVE_SYSCALL_PUTMSG
/* Define if you have the syscall_read function. */
#undef HAVE_SYSCALL_READ
/* Define if you have the syscall_readdir function. */
#undef HAVE_SYSCALL_READDIR
/* Define if you have the syscall_readv function. */
#undef HAVE_SYSCALL_READV
/* Define if you have the syscall_recv function. */
#undef HAVE_SYSCALL_RECV
/* Define if you have the syscall_recvfrom function. */
#undef HAVE_SYSCALL_RECVFROM
/* Define if you have the syscall_recvmsg function. */
#undef HAVE_SYSCALL_RECVMSG
/* Define if you have the syscall_rename function. */
#undef HAVE_SYSCALL_RENAME
/* Define if you have the syscall_select function. */
#undef HAVE_SYSCALL_SELECT
/* Define if you have the syscall_send function. */
#undef HAVE_SYSCALL_SEND
/* Define if you have the syscall_sendmsg function. */
#undef HAVE_SYSCALL_SENDMSG
/* Define if you have the syscall_sendto function. */
#undef HAVE_SYSCALL_SENDTO
/* Define if you have the syscall_setsockopt function. */
#undef HAVE_SYSCALL_SETSOCKOPT
/* Define if you have the syscall_shutdown function. */
#undef HAVE_SYSCALL_SHUTDOWN
/* Define if you have the syscall_sigaction function. */
#undef HAVE_SYSCALL_SIGACTION
/* Define if you have the syscall_sigpause function. */
#undef HAVE_SYSCALL_SIGPAUSE
/* Define if you have the syscall_sigprocmask function. */
#undef HAVE_SYSCALL_SIGPROCMASK
/* Define if you have the syscall_sigsuspend function. */
#undef HAVE_SYSCALL_SIGSUSPEND
/* Define if you have the syscall_socket function. */
#undef HAVE_SYSCALL_SOCKET
/* Define if you have the syscall_socketcall function. */
#undef HAVE_SYSCALL_SOCKETCALL
/* Define if you have the syscall_socketpair function. */
#undef HAVE_SYSCALL_SOCKETPAIR
/* Define if you have the syscall_stat function. */
#undef HAVE_SYSCALL_STAT
/* Define if you have the syscall_uname function. */
#undef HAVE_SYSCALL_UNAME
/* Define if you have the syscall_unlink function. */
#undef HAVE_SYSCALL_UNLINK
/* Define if you have the syscall_wait3 function. */
#undef HAVE_SYSCALL_WAIT3
/* Define if you have the syscall_wait4 function. */
#undef HAVE_SYSCALL_WAIT4
/* Define if you have the syscall_waitpid function. */
#undef HAVE_SYSCALL_WAITPID
/* Define if you have the syscall_waitsys function. */
#undef HAVE_SYSCALL_WAITSYS
/* Define if you have the syscall_write function. */
#undef HAVE_SYSCALL_WRITE
/* Define if you have the syscall_writev function. */
#undef HAVE_SYSCALL_WRITEV
/* Define if you have the vfork function. */
#undef HAVE_VFORK
/* Define if you have the <alloc.h> header file. */
#undef HAVE_ALLOC_H
/* Define if you have the <sys/filio.h> header file. */
#undef HAVE_SYS_FILIO_H
/* Define if you have the <sys/syscall.h> header file. */
#undef HAVE_SYS_SYSCALL_H
/* Define if you have the <sys/termio.h> header file. */
#undef HAVE_SYS_TERMIO_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <syscall.h> header file. */
#undef HAVE_SYSCALL_H
/* Define if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H
/* Define if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
#
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
tranformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0
#!/bin/sh
# This silliness is because Chris wants the autoconf-related files
# and makefiles not to appear in the top-level directory. Fine by
# me, I don't much care. This script just needs to invoke the real
# configure script...
config=`echo $0 | sed -e 's,configure$,config/configure,'`
if test ! -d obj ; then
mkdir obj
fi
if test -n "$1" ; then
sh $config "$@"
else
sh $config
fi
# from: @(#)Makefile.inc 5.21 (Berkeley) 5/24/91
# $Id$
# gen sources
VPATH:= ${VPATH}:${srcdir}/gen
SRCS:= ttyname.c directory.c popen.c time.c ctime.c difftime.c syslog.c \
eprintf.c getpwent.c getpwnamuid.c pwd_internal.c \
getcwd.c getwd.c isatty.c $(SRCS)
# from: @(#)Makefile.inc 5.21 (Berkeley) 5/24/91
# $Id$
# gen sources
.PATH: ${srcdir}/gen
SRCS+= ttyname.c isatty.c directory.c popen.c time.c ctime.c difftime.c \
syslog.c eprintf.c getpwent.c getpwnamuid.c pwd_internal.c
#SRCS+= alarm.c assert.c clock.c crypt.c ctermid.c ctype_.c \
# disklabel.c err.c errlst.c exec.c fnmatch.c frexp.c \
# fstab.c fts.c getcap.c getcwd.c getgrent.c getlogin.c getmntinfo.c \
# getpass.c getpwent.c getsubopt.c getttyent.c getusershell.c glob.c \
# infinity.c initgroups.c isatty.c isctype.c isinf.c mktemp.c nice.c \
# nlist.c pause.c psignal.c raise.c \
# scandir.c setjmperr.c \
# setmode.c setrgid.c setruid.c siginterrupt.c \
# siglist.c signal.c sigsetops.c syslog.c \
# termios.c time.c times.c timezone.c ttyslot.c \
# ualarm.c unvis.c utime.c valloc.c vis.c
#
# gen/regexp sources
#SRCS+= regerror.c regexp.c regsub.c
This diff is collapsed.
/*
* Copyright (c) 1989 The Regents of the University of California.
* 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.
* 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
* 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
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)difftime.c 5.2 (Berkeley) 6/1/90";
#endif /* LIBC_SCCS and not lint */
#include <pthread.h>
#include <sys/types.h>
double
difftime(time1, time0)
time_t time1, time0;
{
return(time1 - time0);
}
This diff is collapsed.
/* This function is a replacement for the version in libgcc.a. This
is needed because typically libgcc.a won't have been compiled
against the threads library, so its references to "stderr" will
come out wrong. */
#include <stdio.h>
void __eprintf (const char *fmt, const char *expr, int line, const char *file)
{
/* Considering the very special circumstances where this function
would be called, perhaps we might want to disable the thread
scheduler and break any existing locks on stderr? Well, maybe if
we could be sure that stderr was in a useable state... */
fprintf (stderr, fmt, expr, line, file);
fflush (stderr);
abort ();
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*-
* Copyright (c) 1990 The Regents of the University of California.
* 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.
* 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
* 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
* 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.
*/
#if defined(LIBC_SCCS) && !defined(lint)
/*static char *sccsid = "from: @(#)getwd.c 5.1 (Berkeley) 2/20/91";*/
static char *rcsid = "$Id$";
#endif /* LIBC_SCCS and not lint */
#include <pthread.h>
#include <sys/param.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
char *
getwd(buf)
char *buf;
{
char *p;
char *strerror();
if (p = getcwd(buf, MAXPATHLEN))
return(p);
(void)strcpy(buf, strerror(errno));
return((char *)NULL);
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#ifndef pthread_size_t
#define pthread_ipaddr_type unsigned long
#define pthread_ipport_type unsigned short
#define pthread_clock_t long
#define pthread_size_t unsigned int
#define pthread_ssize_t int
#define pthread_time_t long
#define pthread_off_t long
#ifdef NOT_USED /* Removed by monty becasue of conflicts on Linux */
#define pthread_va_list char *
#endif
#endif
This diff is collapsed.
This diff is collapsed.
#ifndef _SYS___CONFIG_H_
#define _SYS___CONFIG_H_
#define _OS_HAS_TIMESPEC 1
#define _OS_HAS_SOCKLEN_T 1
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment