diff options
37 files changed, 295 insertions, 502 deletions
diff --git a/ChangeLog b/ChangeLog index fdd2883c38..eed04ff607 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,103 @@ +Fri Oct 11 19:13:34 1996 Ulrich Drepper <drepper@cygnus.com> + + * locale/Makefile (CPPFLAGS): Set CHARMAP_PATH to + "$(i18ndir)/charmaps". + +Fri Oct 11 22:12:41 1996 NIIBE Yutaka <gniibe@mri.co.jp> + + * sysdeps/unix/sysv/linux/sys/procfs.h: Include <asm/user.h> + to get definition of FPU description struct. + + * sysdeps/unix/sysv/linux/Makefile [$(subdir)=socket] (subdir_headers): + Add net/if.h, net/if_ppp.h, net/ppp-comp.h, net/ppp_defs.h, + net/if_arp.h, and net/route.h. + * sysdeps/unix/sysv/linux/net/if_arp.h: New file. + * sysdeps/unix/sysv/linux/net/route.h: New file. + +Fri Oct 11 14:49:13 1996 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/stub/readdir_r.c: New file. We need a stub version. + * sysdeps/stub/e_acosl.c: Likewise. + * sysdeps/stub/e_asinl.c: Likewise. + * sysdeps/stub/e_atan2l.c: Likewise. + * sysdeps/stub/e_expl.c: Likewise. + * sysdeps/stub/e_fmodl.c: Likewise. + * sysdeps/stub/e_log10l.c: Likewise. + * sysdeps/stub/e_logl.c: Likewise. + * sysdeps/stub/e_sqrtl.c: Likewise. + * sysdeps/stub/s_atanl.c: Likewise. + * sysdeps/stub/s_log1pl.c: Likewise. + + * Makefile (distribute): Add nsswitch.h and netgroup.h. + + * nss/Makefile (generated): db-netgrp.c is not generated. + + * sysdeps/alpha/Dist: Add stxcpy.S and stxncpy.S. + + * Make-dist (+out): Add $(dont_distribute). + +Fri Oct 11 00:27:18 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * stdio-common/Makefile (routines): Add tmpnam_r. + +Fri Oct 11 05:32:51 1996 Ulrich Drepper <drepper@cygnus.com> + + * version.h: Bump version to 1.96. + +Fri Oct 11 18:13:47 1996 Andreas Jaeger <aj@arthur.pfalz.de> + + * stdio-common/tst-printf.c: Some more cleanups. + +Fri Oct 11 02:48:02 1996 Ulrich Drepper <drepper@cygnus.com> + + * resolv/arpa/nameser.h: Update from bind-4.9.5-T6B. + * resolv/resolv.h: Likewise. + * resolv/gethnamaddr.c: Likewise. + * resolv/res_comp.c: Likewise. + * resolv/res_debug.c: Likewise. + * resolv/res_init.c: Likewise. + * resolv/res_send.c: Likewise. + * resolv/Banner: Update version number. + + * nss/nss_dns/dns-host.c: Update according to change in + resolv/gethnamaddr.c. + +Fri Oct 10 20:52:28 1996 Ralph Loader <loader@maths.ox.ac.uk> + + * crypt/md5.c (md5_stream): When reading the block in several + pieces append to instead of replace previously read data. + +Thu Oct 10 15:53:17 1996 Richard Henderson <rth@tamu.edu> + + * sysdeps/alpha/stxcpy.S ($unaligned): In single word copy, correct + last-byte-written bit for source word misalignment. + * sysdeps/alpha/strchr.c: Removed. There is now an assembler + version. + +Thu Oct 10 17:17:23 1996 Ulrich Drepper <drepper@cygnus.com> + + * sunrpc/Makefile (rpcsvc): Remove yp.x. The corrected version + comes with glibc-nis. + * sunrpc/rpcsvc/yp.x: Removed. + + * nss/nss_files/files-netgr.c (_nss_netgroup_parseline): Test + for *CURSOR to be NULL and dump a core if yes. + +Thu Oct 9 20:09:53 1996 Matthew Jacob <mjacob@feral.com> + + * sysdeps/unix/sysv/linux/alpha/brk.S: Define _ERRNO_H before + including <errnos.h> to get error numbers. + +Thu Oct 10 14:00:01 1996 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/unix/sysv/linux/i386/sigcontext.h: Moved file... + * sysdeps/unix/sysv/linux/sigcontext.h: ...to here. So the + Alpha people find a correct file. + * sysdeps/libm-ieee754/w_cabs.c: We cannot make __cabsl simply + an alias of __cabs since the structures have different names. + * sysdeps/libm-ieee754/w_log10.c: Fix typo in weak_alias. + Reported by Matthew Jacob <mjacob@feral.com>. + Wed Oct 9 00:24:52 1996 Jim Meyering <meyering@asic.sc.ti.com> * time/strftime.c: Allow old K&R compilers compile this file. @@ -11,7 +111,7 @@ Wed Oct 9 12:03:56 1996 Ulrich Drepper <drepper@cygnus.com> Wed Oct 9 04:34:50 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/sys/procfs.h: Rewrite. We cannot use - simply a wrapper around the <linux.elfcore.h> file since the + simply a wrapper around the <linux/elfcore.h> file since the kernel header is not clean enough. We provide the definitions in this file instead. diff --git a/Make-dist b/Make-dist index e6921b8533..cc8fdacf6e 100644 --- a/Make-dist +++ b/Make-dist @@ -29,6 +29,7 @@ endif include $(..)Makeconfig foo:=$(shell echo 'distribute=$(distribute)'>&2) +foo:=$(shell echo 'dont_distribute=$(dont_distribute)'>&2) foo:=$(shell echo 'foobar=$(filter %.c %.S %.s %.h,$(distribute))'>&2) ifndef sysdep_dirs @@ -111,8 +112,8 @@ sources := $(filter-out $(addsuffix .c,$(basename $(.S.s))),$(sources)) $(.S.s) +out := $(patsubst %.S,%.c,$(+sysdep-names:.s=.c)) \ $(addsuffix .c,$(sysdep_routines)) \ - $(+subdir-nodist) -#foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2) + $(+subdir-nodist) $(dont_distribute) +foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2) +tsrcs := $(filter-out $(+out), $(sources) $(all-headers) $(distribute)) \ $(+sysdeps) foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2) diff --git a/Makefile b/Makefile index 8556b61761..9220372f52 100644 --- a/Makefile +++ b/Makefile @@ -242,7 +242,7 @@ distribute := README INSTALL FAQ NOTES NEWS PROJECTS \ config.h.in config.make.in config-name.in Makefile.in \ autolock.sh munch-tmpl.c munch.awk interp.c \ sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \ - rpm/Makefile rpm/template rpm/rpmrc + rpm/Makefile rpm/template rpm/rpmrc nsswitch.h netgroup.h distribute := $(strip $(distribute)) generated := $(generated) stubs.h version-info.h diff --git a/libio/ioflockfile.c b/libio/ioflockfile.c deleted file mode 100644 index a68f4b662d..0000000000 --- a/libio/ioflockfile.c +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright (C) 1996 Free Software Foundation - -This file is part of the GNU IO Library. This library is free -software; you can redistribute it and/or modify it under the -terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) -any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this library; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As a special exception, if you link this library with files -compiled with a GNU compiler to produce an executable, this does not cause -the resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why -the executable file might be covered by the GNU General Public License. */ - -#include "libioP.h" -#include <libc-lock.h> - -void -_IO_flockfile (s) - _IO_FILE *s; -{ - __libc_lock_lock (s->_lock); -} -weak_alias (_IO_flockfile, flockfile) - - -void -_IO_funlockfile (s) - _IO_FILE *s; -{ - __libc_lock_unlock (s->_lock); -} -weak_alias (_IO_funlockfile, funlockfile) diff --git a/locale/Makefile b/locale/Makefile index c212b2e71c..cedcd7043c 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -65,7 +65,7 @@ $(objpfx)locale: $(locale-modules:%=$(objpfx)%.o) $(objpfx)localedef $(objpfx)locale: $(lib-modules:%=$(objpfx)%.o) CPPFLAGS := -DLOCALE_PATH='"$(localedir)"' \ - -DCHARMAP_PATH='"$(i18ndir)/charmap"' \ + -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ -DLOCSRCDIR='"$(i18ndir)/locales"' -DHAVE_CONFIG_H \ -Iprograms $(CPPFLAGS) diff --git a/nss/Makefile b/nss/Makefile index 319bad5b29..a921bb7fdf 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -55,7 +55,8 @@ libnss_dns-routines := dns-host dns-network libnss_db-routines := $(addprefix db-,$(filter-out hosts network,\ $(databases))) -generated += $(addsuffix .c,$(libnss_db-routines)) +generated += $(filter-out db-netgrp.c, \ + $(addsuffix .c,$(libnss_db-routines))) distribute += db-XXX.c libnss_files-inhibit-o = $(filter-out .so,$(object-suffixes)) diff --git a/nss/nss_dns/dns-host.c b/nss/nss_dns/dns-host.c index f8d5d37e72..120923069c 100644 --- a/nss/nss_dns/dns-host.c +++ b/nss/nss_dns/dns-host.c @@ -589,15 +589,12 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype, cp += n; continue; /* XXX - had_error++ ? */ } - if (haveanswer) + if (n != result->h_length) { - if (n != result->h_length) - { - cp += n; - continue; - } + cp += n; + continue; } - else + if (!haveanswer) { register int nn; diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c index c653825c78..427c6bfe8d 100644 --- a/nss/nss_files/files-netgrp.c +++ b/nss/nss_files/files-netgrp.c @@ -188,6 +188,11 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, const char *host, *user, *domain; char *cp = *cursor; + /* Some sanity checks. */ + if (cp == NULL) + /* User bug. setnetgrent() wasn't called before. */ + abort (); + /* First skip leading spaces. */ while (isspace (*cp)) ++cp; diff --git a/resolv/Banner b/resolv/Banner index e08f0b4cd3..5d0dc48e95 100644 --- a/resolv/Banner +++ b/resolv/Banner @@ -1 +1 @@ -BIND-4.9.5-T4B +BIND-4.9.5-T6B diff --git a/resolv/arpa/nameser.h b/resolv/arpa/nameser.h index 2352af684c..66b3530d91 100644 --- a/resolv/arpa/nameser.h +++ b/resolv/arpa/nameser.h @@ -92,10 +92,8 @@ #include <sys/cdefs.h> #ifdef _AUX_SOURCE -#include <sys/types.h> /* ech for A/UX */ -#define res_send ucb_res_send /* already def'd in libc */ -#define _res_close _ucb_res_close /* removing res_send.o from the library */ -#endif /* gives an undefined symbol... */ +# include <sys/types.h> +#endif /* * revision information. this is the release date in YYYYMMDD format. @@ -182,6 +180,7 @@ #define T_NIMLOC 32 /* Nimrod locator */ #define T_SRV 33 /* Server selection */ #define T_ATMA 34 /* ATM Address */ +#define T_NAPTR 35 /* Naming Authority PoinTeR */ /* non standard */ #define T_UINFO 100 /* user (finger) information */ #define T_UID 101 /* user ID */ diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c index 1cae1f7295..7c3096c967 100644 --- a/resolv/gethnamaddr.c +++ b/resolv/gethnamaddr.c @@ -341,12 +341,11 @@ getanswer(answer, anslen, qname, qtype) cp += n; continue; /* XXX - had_error++ ? */ } - if (haveanswer) { - if (n != host.h_length) { - cp += n; - continue; - } - } else { + if (n != host.h_length) { + cp += n; + continue; + } + if (!haveanswer) { register int nn; host.h_name = bp; diff --git a/resolv/res_comp.c b/resolv/res_comp.c index 76f7cea5c5..d96fe6e432 100644 --- a/resolv/res_comp.c +++ b/resolv/res_comp.c @@ -394,8 +394,12 @@ int res_ownok(dn) const char *dn; { - if (asterchar(dn[0]) && periodchar(dn[1])) - dn += 2; + if (asterchar(dn[0])) { + if (periodchar(dn[1])) + return (res_hnok(dn+2)); + if (dn[1] == '\0') + return (1); + } return (res_hnok(dn)); } diff --git a/resolv/res_debug.c b/resolv/res_debug.c index cc6f84fea1..49eef72cd2 100644 --- a/resolv/res_debug.c +++ b/resolv/res_debug.c @@ -671,7 +671,7 @@ __p_rr(cp, msg, file) fprintf(file, "\t%s", inet_ntop(AF_INET6, cp, t, sizeof t)); cp += dlen; break; - } + } case T_LOC: { char t[255]; @@ -679,7 +679,30 @@ __p_rr(cp, msg, file) (void) fprintf(file, "\t%s", loc_ntoa(cp, t)); cp += dlen; break; - } + } + + case T_NAPTR: { + u_int order, preference; + + order = _getshort(cp); cp += INT16SZ; + preference = _getshort(cp); cp += INT16SZ; + fprintf(file, "\t%u %u ",order, preference); + /* Flags */ + n = *cp++; + fprintf(file,"\"%.*s\" ", (int)n, cp); + cp += n; + /* Service */ + n = *cp++; + fprintf(file,"\"%.*s\" ", (int)n, cp); + cp += n; + /* Regexp */ + n = *cp++; + fprintf(file,"\"%.*s\" ", (int)n, cp); + cp += n; + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); + break; + } case T_SRV: { u_int priority, weight, port; @@ -691,7 +714,7 @@ __p_rr(cp, msg, file) if ((cp = p_fqname(cp, msg, file)) == NULL) return (NULL); break; - } + } case T_MINFO: case T_RP: @@ -908,6 +931,7 @@ const struct res_sym __p_type_syms[] = { {T_UINFO, "UINFO", "user information (nonstandard)"}, {T_UID, "UID", "user ID (nonstandard)"}, {T_GID, "GID", "group ID (nonstandard)"}, + {T_NAPTR, "NAPTR", "URN Naming Authority"}, #ifdef ALLOW_T_UNSPEC {T_UNSPEC, "UNSPEC", "unspecified data (nonstandard)"}, #endif /* ALLOW_T_UNSPEC */ diff --git a/resolv/res_init.c b/resolv/res_init.c index c8a74f6e05..459948660d 100644 --- a/resolv/res_init.c +++ b/resolv/res_init.c @@ -645,7 +645,7 @@ netinfo_res_init(haveenv, havesearch) } #endif /* NeXT */ -u_int16_t +u_int res_randomid() { struct timeval now; diff --git a/resolv/res_send.c b/resolv/res_send.c index 3efc6cf96f..a5b4fba44b 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -94,8 +94,6 @@ static char rcsid[] = "$Id$"; # include <../conf/options.h> #endif -void _res_close __P((void)); - static int s = -1; /* socket used for communications */ static int connected = 0; /* is the socket connected */ static int vc = 0; /* is the socket a virtual ciruit? */ @@ -320,7 +318,7 @@ res_send(buf, buflen, ans, anssiz) struct sockaddr_in *nsap = &_res.nsaddr_list[ns]; same_ns: if (badns & (1 << ns)) { - _res_close(); + res_close(); goto next_ns; } @@ -337,7 +335,7 @@ res_send(buf, buflen, ans, anssiz) done = 1; break; case res_nextns: - _res_close(); + res_close(); goto next_ns; case res_done: return (resplen); @@ -372,7 +370,7 @@ res_send(buf, buflen, ans, anssiz) truncated = 0; if ((s < 0) || (!vc)) { if (s >= 0) - _res_close(); + res_close(); s = socket(PF_INET, SOCK_STREAM, 0); if (s < 0) { @@ -387,7 +385,7 @@ res_send(buf, buflen, ans, anssiz) Aerror(stderr, "connect/vc", errno, *nsap); badns |= (1 << ns); - _res_close(); + res_close(); goto next_ns; } vc = 1; @@ -404,7 +402,7 @@ res_send(buf, buflen, ans, anssiz) terrno = errno; Perror(stderr, "write failed", errno); badns |= (1 << ns); - _res_close(); + res_close(); goto next_ns; } /* @@ -421,7 +419,7 @@ read_len: if (n <= 0) { terrno = errno; Perror(stderr, "read failed", errno); - _res_close(); + res_close(); /* * A long running process might get its TCP * connection reset if the remote server was @@ -433,10 +431,10 @@ read_len: */ if (terrno == ECONNRESET && !connreset) { connreset = 1; - _res_close(); + res_close(); goto same_ns; } - _res_close(); + res_close(); goto next_ns; } resplen = _getshort(ans); @@ -457,7 +455,7 @@ read_len: if (n <= 0) { terrno = errno; Perror(stderr, "read(vc)", errno); - _res_close(); + res_close(); goto next_ns; } if (truncated) { @@ -504,7 +502,7 @@ read_len: if ((s < 0) || vc) { if (vc) - _res_close(); + res_close(); s = socket(PF_INET, SOCK_DGRAM, 0); if (s < 0) { #if !CAN_RECONNECT @@ -544,7 +542,7 @@ read_len: "connect(dg)", errno, *nsap); badns |= (1 << ns); - _res_close(); + res_close(); goto next_ns; } connected = 1; @@ -552,7 +550,7 @@ read_len: if (send(s, (char*)buf, buflen, 0) != buflen) { Perror(stderr, "send", errno); badns |= (1 << ns); - _res_close(); + res_close(); goto next_ns; } } else { @@ -589,7 +587,7 @@ read_len: != buflen) { Aerror(stderr, "sendto", errno, *nsap); badns |= (1 << ns); - _res_close(); + res_close(); goto next_ns; } } @@ -612,7 +610,7 @@ read_len: if (errno == EINTR) goto wait; Perror(stderr, "select", errno); - _res_close(); + res_close(); goto next_ns; } if (n == 0) { @@ -622,7 +620,7 @@ read_len: Dprint(_res.options & RES_DEBUG, (stdout, ";; timeout\n")); gotsomewhere = 1; - _res_close(); + res_close(); goto next_ns; } __set_errno (0); @@ -631,7 +629,7 @@ read_len: (struct sockaddr *)&from, &fromlen); if (resplen <= 0) { Perror(stderr, "recvfrom", errno); - _res_close(); + res_close(); goto next_ns; } gotsomewhere = 1; @@ -683,7 +681,7 @@ read_len: (stdout, "server rejected query:\n"), ans, (resplen>anssiz)?anssiz:resplen); badns |= (1 << ns); - _res_close(); + res_close(); /* don't retry if called from dig */ if (!_res.pfcode) goto next_ns; @@ -696,7 +694,7 @@ read_len: Dprint(_res.options & RES_DEBUG, (stdout, ";; truncated answer\n")); v_circuit = 1; - _res_close(); + res_close(); goto same_ns; } } /*if vc/dg*/ @@ -718,7 +716,7 @@ read_len: */ if ((v_circuit && (!(_res.options & RES_USEVC) || ns != 0)) || !(_res.options & RES_STAYOPEN)) { - _res_close(); + res_close(); } if (Rhook) { int done = 0, loops = 0; @@ -734,7 +732,7 @@ read_len: done = 1; break; case res_nextns: - _res_close(); + res_close(); goto next_ns; case res_modified: /* give the hook another try */ @@ -753,7 +751,7 @@ read_len: next_ns: ; } /*foreach ns*/ } /*foreach retry*/ - _res_close(); + res_close(); if (!v_circuit) if (!gotsomewhere) __set_errno (ECONNREFUSED); /* no nameservers found */ @@ -772,7 +770,7 @@ read_len: * This routine is not expected to be user visible. */ void -_res_close() +res_close() { if (s >= 0) { (void) close(s); @@ -787,6 +785,12 @@ _res_close() * there is more gunk of this kind over in res_debug.c. */ +void +_res_close() +{ + res_close(); +} + #undef res_send int res_send(buf, buflen, ans, anssiz) diff --git a/resolv/resolv.h b/resolv/resolv.h index e5ec75a4db..fe90ab5a75 100644 --- a/resolv/resolv.h +++ b/resolv/resolv.h @@ -110,7 +110,7 @@ struct __res_state { struct sockaddr_in nsaddr_list[MAXNS]; /* address of name server */ #define nsaddr nsaddr_list[0] /* for backward compatibility */ - u_short id; /* current packet id */ + u_short id; /* current message id */ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ char defdname[256]; /* default domain (deprecated) */ u_long pfcode; /* RES_PRF_ flags - see below. */ @@ -235,6 +235,7 @@ extern const struct res_sym __p_type_syms[]; #define res_isourserver __res_isourserver #define res_nameinquery __res_nameinquery #define res_queriesmatch __res_queriesmatch +#define res_close __res_close __BEGIN_DECLS int res_hnok __P((const char *)); int res_ownok __P((const char *)); @@ -272,7 +273,7 @@ int dn_comp __P((const char *, u_char *, int, int dn_expand __P((const u_char *, const u_char *, const u_char *, char *, int)); int res_init __P((void)); -u_int16_t res_randomid __P((void)); +u_int res_randomid __P((void)); int res_query __P((const char *, int, int, u_char *, int)); int res_search __P((const char *, int, int, u_char *, int)); int res_querydomain __P((const char *, const char *, int, int, @@ -285,6 +286,7 @@ int res_nameinquery __P((const char *, int, int, const u_char *, const u_char *)); int res_queriesmatch __P((const u_char *, const u_char *, const u_char *, const u_char *)); +void res_close __P((void)); __END_DECLS #endif /* !_RESOLV_H_ */ diff --git a/stdio-common/Makefile b/stdio-common/Makefile index e65ff70713..240016c112 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -30,7 +30,7 @@ routines := \ vfscanf \ fscanf scanf sscanf \ perror psignal \ - tmpfile tmpnam tempnam tempname \ + tmpfile tmpnam tmpnam_r tempnam tempname \ getline getw putw \ remove rename \ lockfile diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c index 65e9dfdd88..87578d397a 100644 --- a/stdio-common/tst-printf.c +++ b/stdio-common/tst-printf.c @@ -147,7 +147,7 @@ I am ready for my first lesson today."; #ifndef BSD printf("bad format:\t\"%z\"\n"); - printf("nil pointer (padded):\t\"%10p\"\n", (PTR) NULL); + printf("nil pointer (padded):\t\"%10p\"\n", (void *) NULL); #endif printf("decimal negative:\t\"%d\"\n", -2345); @@ -272,7 +272,6 @@ rfg1 (void) sprintf (buf, "%.G", 33.3); if (strcmp (buf, "3E+01") != 0) printf ("got: '%s', expected: '%s'\n", buf, "3E+01"); - return 0; } void @@ -309,5 +308,4 @@ rfg2 (void) sprintf (buf, "%04.*X", prec, 33); if (strcmp (buf, " 021") != 0) printf ("got: '%s', expected: '%s'\n", buf, " 021"); - return 0; } diff --git a/sunrpc/Makefile b/sunrpc/Makefile index efad599716..7612f1a567 100644 --- a/sunrpc/Makefile +++ b/sunrpc/Makefile @@ -50,7 +50,7 @@ headers = $(addprefix rpc/,auth.h auth_unix.h clnt.h netdb.h pmap_clnt.h \ $(rpcsvc:%=rpcsvc/%) $(rpcsvc:%.x=rpcsvc/%.h) rpcsvc = bootparam.x nlm_prot.x rstat.x \ yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \ - rnusers.x spray.x nfs_prot.x rquota.x yp.x + rnusers.x spray.x nfs_prot.x rquota.x install-others = $(includedir)/rpcsvc/bootparam_prot.h \ $(sysconfdir)/rpc generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) diff --git a/sunrpc/rpcsvc/yp.x b/sunrpc/rpcsvc/yp.x deleted file mode 100644 index 8fe70a2706..0000000000 --- a/sunrpc/rpcsvc/yp.x +++ /dev/null @@ -1,291 +0,0 @@ -/* @(#)yp.x 2.1 88/08/01 4.0 RPCSRC */ - -/* - * Sun RPC is a product of Sun Microsystems, Inc. and is provided for - * unrestricted use provided that this legend is included on all tape - * media and as a part of the software program in whole or part. Users - * may copy or modify Sun RPC without charge, but are not authorized - * to license or distribute it to anyone else except as part of a product or - * program developed by the user. - * - * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE - * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun RPC is provided with no support and without any obligation on the - * part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ - -/* - * Protocol description file for the Yellow Pages Service - */ - -const YPMAXRECORD = 1024; -const YPMAXDOMAIN = 64; -const YPMAXMAP = 64; -const YPMAXPEER = 64; - - -enum ypstat { - YP_TRUE = 1, - YP_NOMORE = 2, - YP_FALSE = 0, - YP_NOMAP = -1, - YP_NODOM = -2, - YP_NOKEY = -3, - YP_BADOP = -4, - YP_BADDB = -5, - YP_YPERR = -6, - YP_BADARGS = -7, - YP_VERS = -8 -}; - - -enum ypxfrstat { - YPXFR_SUCC = 1, - YPXFR_AGE = 2, - YPXFR_NOMAP = -1, - YPXFR_NODOM = -2, - YPXFR_RSRC = -3, - YPXFR_RPC = -4, - YPXFR_MADDR = -5, - YPXFR_YPERR = -6, - YPXFR_BADARGS = -7, - YPXFR_DBM = -8, - YPXFR_FILE = -9, - YPXFR_SKEW = -10, - YPXFR_CLEAR = -11, - YPXFR_FORCE = -12, - YPXFR_XFRERR = -13, - YPXFR_REFUSED = -14 -}; - - -typedef string domainname<YPMAXDOMAIN>; -typedef string mapname<YPMAXMAP>; -typedef string peername<YPMAXPEER>; -typedef opaque keydat<YPMAXRECORD>; -typedef opaque valdat<YPMAXRECORD>; - - -struct ypmap_parms { - domainname domain; - mapname map; - unsigned int ordernum; - peername peer; -}; - -struct ypreq_key { - domainname domain; - mapname map; - keydat key; -}; - -struct ypreq_nokey { - domainname domain; - mapname map; -}; - -struct ypreq_xfr { - ypmap_parms map_parms; - unsigned int transid; - unsigned int prog; - unsigned int port; -}; - - -struct ypresp_val { - ypstat stat; - valdat val; -}; - -struct ypresp_key_val { - ypstat stat; - keydat key; - valdat val; -}; - - -struct ypresp_master { - ypstat stat; - peername peer; -}; - -struct ypresp_order { - ypstat stat; - unsigned int ordernum; -}; - -union ypresp_all switch (bool more) { -case TRUE: - ypresp_key_val val; -case FALSE: - void; -}; - -struct ypresp_xfr { - unsigned int transid; - ypxfrstat xfrstat; -}; - -struct ypmaplist { - mapname map; - ypmaplist *next; -}; - -struct ypresp_maplist { - ypstat stat; - ypmaplist *maps; -}; - -enum yppush_status { - YPPUSH_SUCC = 1, /* Success */ - YPPUSH_AGE = 2, /* Master's version not newer */ - YPPUSH_NOMAP = -1, /* Can't find server for map */ - YPPUSH_NODOM = -2, /* Domain not supported */ - YPPUSH_RSRC = -3, /* Local resource alloc failure */ - YPPUSH_RPC = -4, /* RPC failure talking to server */ - YPPUSH_MADDR = -5, /* Can't get master address */ - YPPUSH_YPERR = -6, /* YP server/map db error */ - YPPUSH_BADARGS = -7, /* Request arguments bad */ - YPPUSH_DBM = -8, /* Local dbm operation failed */ - YPPUSH_FILE = -9, /* Local file I/O operation failed */ - YPPUSH_SKEW = -10, /* Map version skew during transfer */ - YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */ - YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */ - YPPUSH_XFRERR = -13, /* ypxfr error */ - YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */ -}; - -struct yppushresp_xfr { - unsigned transid; - yppush_status status; -}; - -/* - * Response structure and overall result status codes. Success and failure - * represent two separate response message types. - */ - -enum ypbind_resptype { - YPBIND_SUCC_VAL = 1, - YPBIND_FAIL_VAL = 2 -}; - -struct ypbind_binding { - opaque ypbind_binding_addr[4]; /* In network order */ - opaque ypbind_binding_port[2]; /* In network order */ -}; - -union ypbind_resp switch (ypbind_resptype ypbind_status) { -case YPBIND_FAIL_VAL: - unsigned ypbind_error; -case YPBIND_SUCC_VAL: - ypbind_binding ypbind_bindinfo; -}; - -/* Detailed failure reason codes for response field ypbind_error*/ - -const YPBIND_ERR_ERR = 1; /* Internal error */ -const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ -const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ - - -/* - * Request data structure for ypbind "Set domain" procedure. - */ -struct ypbind_setdom { - domainname ypsetdom_domain; - ypbind_binding ypsetdom_binding; - unsigned ypsetdom_vers; -}; - - -/* - * YP access protocol - */ -program YPPROG { - version YPVERS { - void - YPPROC_NULL(void) = 0; - - bool - YPPROC_DOMAIN(domainname) = 1; - - bool - YPPROC_DOMAIN_NONACK(domainname) = 2; - - ypresp_val - YPPROC_MATCH(ypreq_key) = 3; - - ypresp_key_val - YPPROC_FIRST(ypreq_key) = 4; - - ypresp_key_val - YPPROC_NEXT(ypreq_key) = 5; - - ypresp_xfr - YPPROC_XFR(ypreq_xfr) = 6; - - void - YPPROC_CLEAR(void) = 7; - - ypresp_all - YPPROC_ALL(ypreq_nokey) = 8; - - ypresp_master - YPPROC_MASTER(ypreq_nokey) = 9; - - ypresp_order - YPPROC_ORDER(ypreq_nokey) = 10; - - ypresp_maplist - YPPROC_MAPLIST(domainname) = 11; - } = 2; -} = 100004; - - -/* - * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR - */ -program YPPUSH_XFRRESPPROG { - version YPPUSH_XFRRESPVERS { - void - YPPUSHPROC_NULL(void) = 0; - - yppushresp_xfr - YPPUSHPROC_XFRRESP(void) = 1; - } = 1; -} = 0x40000000; /* transient: could be anything up to 0x5fffffff */ - - -/* - * YP binding protocol - */ -program YPBINDPROG { - version YPBINDVERS { - void - YPBINDPROC_NULL(void) = 0; - - ypbind_resp - YPBINDPROC_DOMAIN(domainname) = 1; - - void - YPBINDPROC_SETDOM(ypbind_setdom) = 2; - } = 2; -} = 100007; - - diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c index 7c3a31b79e..c9efc97024 100644 --- a/sunrpc/svc_udp.c +++ b/sunrpc/svc_udp.c @@ -46,7 +46,9 @@ static char sccsid[] = "@(#)svc_udp.c 1.24 87/08/11 Copyr 1984 Sun Micro"; #define rpc_buffer(xprt) ((xprt)->xp_p1) -#define MAX(a, b) ((a > b) ? a : b) +#ifndef MAX +# define MAX(a, b) ((a > b) ? a : b) +#endif static bool_t svcudp_recv(); static bool_t svcudp_reply(); diff --git a/sysdeps/alpha/Dist b/sysdeps/alpha/Dist index c9419e6ef3..3cc9595dfb 100644 --- a/sysdeps/alpha/Dist +++ b/sysdeps/alpha/Dist @@ -3,3 +3,5 @@ DEFS.h divrem.h divl.S divlu.S divq.S divqu.S reml.S remlu.S remq.S remqu.S _mcount.S +stxcpy.S +stxncpy.S diff --git a/sysdeps/alpha/strchr.c b/sysdeps/alpha/strchr.c deleted file mode 100644 index 69afa4b87f..0000000000 --- a/sysdeps/alpha/strchr.c +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <string.h> - -/* Return the length of the null-terminated string STR. Scan for - the null terminator quickly by testing eight bytes at a time. */ - -char * -strchr (const char *str, int c) -{ - const char *char_ptr; - const unsigned long int *longword_ptr; - unsigned long int charmask; - - c = (unsigned char) c; - - /* Handle the first few characters by reading one character at a time. - Do this until STR is aligned on a 8-byte border. */ - for (char_ptr = str; ((unsigned long int) char_ptr & 7) != 0; ++char_ptr) - if (*char_ptr == c) - return (char *) char_ptr; - else if (*char_ptr == '\0') - return NULL; - - longword_ptr = (unsigned long int *) char_ptr; - - /* Set up a longword, each of whose bytes is C. */ - charmask = c | (c << 8); - charmask |= charmask << 16; - charmask |= charmask << 32; - - for (;;) - { - const unsigned long int longword = *longword_ptr++; - int ge, le, zero; - - /* Set bits in ZERO if bytes in LONGWORD are zero. */ - asm ("cmpbge $31, %1, %0" : "=r" (zero) : "r" (longword)); - - /* Set bits in GE if bytes in CHARMASK are >= bytes in LONGWORD. */ - asm ("cmpbge %1, %2, %0" : "=r" (ge) : "r" (charmask), "r" (longword)); - - /* Set bits in LE if bytes in CHARMASK are <= bytes in LONGWORD. */ - asm ("cmpbge %2, %1, %0" : "=r" (le) : "r" (charmask), "r" (longword)); - - /* Bytes that are both <= and >= are == to C. */ - if (zero || (ge & le)) - { - /* Which of the bytes was the C? */ - - char *cp = (char *) (longword_ptr - 1); - int i; - - for (i = 0; i < 8; i++) - { - if (cp[i] == c) - return &cp[i]; - if (cp[i] == 0) - return NULL; - } - return NULL; - } - } -} - -#ifdef weak_alias -#undef index -weak_alias (strchr, index) -#endif diff --git a/sysdeps/alpha/stxcpy.S b/sysdeps/alpha/stxcpy.S index e381b704cd..49dd8e5c64 100644 --- a/sysdeps/alpha/stxcpy.S +++ b/sysdeps/alpha/stxcpy.S @@ -36,7 +36,7 @@ Cambridge, MA 02139, USA. */ Furthermore, v0, a3-a5, t11, and t12 are untouched. */ -/* This is generally scheduled for the EV5, but should still be pretty +/* This is generally scheduled for the EV5, but should still be pretty good for the EV4 too. */ #include <sysdep.h> @@ -65,7 +65,7 @@ stxcpy_aligned: lda t2, -1 # e1 : build a mask against false zero mskqh t2, a1, t2 # e0 : detection in the src word mskqh t1, a1, t3 # e0 : - ornot t1, t2, t2 # .. e1 : + ornot t1, t2, t2 # .. e1 : mskql t0, a1, t0 # e0 : assemble the first output word cmpbge zero, t2, t7 # .. e1 : bits set iff null found or t0, t3, t1 # e0 : @@ -99,9 +99,9 @@ $a_eos: /* We're doing a partial word store and so need to combine our source and original destination words. */ ldq_u t0, 0(a0) # e0 : - subq t8, 1, t6 # .. e1 : + subq t8, 1, t6 # .. e1 : zapnot t1, t6, t1 # e0 : clear src bytes >= null - or t8, t6, t7 # .. e1 : + or t8, t6, t7 # .. e1 : zap t0, t7, t0 # e0 : clear dst bytes <= null or t0, t1, t1 # e1 : @@ -156,13 +156,13 @@ $u_head: or t1, t4, t1 # .. e1 : mskqh t1, a0, t1 # e0 : or t0, t1, t1 # e1 : - + or t1, t6, t6 # e0 : cmpbge zero, t6, t7 # .. e1 : lda t6, -1 # e0 : for masking just below bne t7, $u_final # .. e1 : - mskql t6, a1, t6 # e0 : mask out the bits we have + mskql t6, a1, t6 # e0 : mask out the bits we have or t6, t2, t2 # e1 : already extracted before cmpbge zero, t2, t7 # e0 : testing eos bne t7, $u_late_head_exit # .. e1 (zdb) @@ -181,7 +181,7 @@ $u_head: /* Unaligned copy main loop. In order to avoid reading too much, the loop is structured to detect zeros in aligned source words. - This has, unfortunately, effectively pulled half of a loop + This has, unfortunately, effectively pulled half of a loop iteration out into the head and half into the tail, but it does prevent nastiness from accumulating in the very thing we want to run as fast as possible. @@ -207,7 +207,7 @@ $u_loop: /* We've found a zero somewhere in the source word we just read. If it resides in the lower half, we have one (probably partial) - word to write out, and if it resides in the upper half, we + word to write out, and if it resides in the upper half, we have one full and one partial word left to write out. On entry to this basic block: @@ -234,7 +234,7 @@ $u_final: negq t7, t6 # e0 : isolate low bit set and t6, t7, t8 # e1 : - and t8, 0x80, t6 # e0 : avoid dest word load if we can + and t8, 0x80, t6 # e0 : avoid dest word load if we can bne t6, 1f # .. e1 (zdb) ldq_u t0, 0(a0) # e0 : @@ -256,7 +256,7 @@ $unaligned: and a0, 7, t4 # .. e1 : find dest misalignment and a1, 7, t5 # e0 : find src misalignment - /* Conditionally load the first destination word and a bytemask + /* Conditionally load the first destination word and a bytemask with 0xff indicating that the destination byte is sacrosanct. */ mov zero, t0 # .. e1 : @@ -290,18 +290,19 @@ $unaligned: negq t7, t6 # .. e1 : build bitmask of bytes <= zero and t6, t7, t8 # e0 : - nop # .. e1 : + and a1, 7, t5 # .. e1 : subq t8, 1, t6 # e0 : or t6, t8, t7 # e1 : + srl t8, t5, t8 # e0 : adjust final null return value - zapnot t2, t7, t2 # e0 : prepare source word; mirror changes + zapnot t2, t7, t2 # .. e1 : prepare source word; mirror changes and t1, t2, t1 # e1 : to source validity mask - extql t2, a1, t2 # e0 : + extql t2, a1, t2 # .. e0 : extql t1, a1, t1 # e0 : - andnot t0, t2, t0 # e0 : zero place for source to reside + andnot t0, t2, t0 # .. e1 : zero place for source to reside or t0, t1, t1 # e1 : and put it there - stq_u t1, 0(a0) # e0 : - ret (t9) # .. e1 : + stq_u t1, 0(a0) # .. e0 : + ret (t9) .end __stxcpy diff --git a/sysdeps/libm-ieee754/w_cabs.c b/sysdeps/libm-ieee754/w_cabs.c index 6c67436c6a..bf62f22be3 100644 --- a/sysdeps/libm-ieee754/w_cabs.c +++ b/sysdeps/libm-ieee754/w_cabs.c @@ -14,7 +14,13 @@ __cabs(z) return __hypot(z.x, z.y); } weak_alias (__cabs, cabs) + #ifdef NO_LONG_DOUBLE -strong_alias (__cabs, __cabsl) -weak_alias (__cabs, cabsl) +double +__cabsl(z) + struct __cabs_complexl z; +{ + return __hypotl(z.x, z.y); +} +weak_alias (__cabsl, cabsl) #endif diff --git a/sysdeps/libm-ieee754/w_log10.c b/sysdeps/libm-ieee754/w_log10.c index fc35607644..8a0a70bdf7 100644 --- a/sysdeps/libm-ieee754/w_log10.c +++ b/sysdeps/libm-ieee754/w_log10.c @@ -47,5 +47,5 @@ static char rcsid[] = "$NetBSD: w_log10.c,v 1.6 1995/05/10 20:49:35 jtc Exp $"; weak_alias (__log10, log10) #ifdef NO_LONG_DOUBLE strong_alias (__log10, __log10l) -weak_alias (__log10, log10) +weak_alias (__log10, log10l) #endif diff --git a/sysdeps/stub/e_log10l.c b/sysdeps/stub/e_log10l.c new file mode 100644 index 0000000000..0e8cdcaaa9 --- /dev/null +++ b/sysdeps/stub/e_log10l.c @@ -0,0 +1,11 @@ +#include <math.h> +#include <stdio.h> + +long double +__ieee754_log10l (long double x) +{ + fputs ("__ieee754_log10l not implemented\n", stderr); + return 0.0; +} + +stub_warning (__ieee754_log10l) diff --git a/sysdeps/stub/e_logl.c b/sysdeps/stub/e_logl.c new file mode 100644 index 0000000000..b8357543b0 --- /dev/null +++ b/sysdeps/stub/e_logl.c @@ -0,0 +1,11 @@ +#include <math.h> +#include <stdio.h> + +long double +__ieee754_logl (long double x) +{ + fputs ("__ieee754_logl not implemented\n", stderr); + return 0.0; +} + +stub_warning (__ieee754_logl) diff --git a/sysdeps/stub/e_sqrtl.c b/sysdeps/stub/e_sqrtl.c new file mode 100644 index 0000000000..88a7668330 --- /dev/null +++ b/sysdeps/stub/e_sqrtl.c @@ -0,0 +1,11 @@ +#include <math.h> +#include <stdio.h> + +long double +__ieee754_sqrtl (long double x) +{ + fputs ("__ieee754_sqrtl not implemented\n", stderr); + return 0.0; +} + +stub_warning (__ieee754_sqrtl) diff --git a/sysdeps/stub/s_atanl.c b/sysdeps/stub/s_atanl.c new file mode 100644 index 0000000000..38dd6f5991 --- /dev/null +++ b/sysdeps/stub/s_atanl.c @@ -0,0 +1,12 @@ +#include <math.h> +#include <stdio.h> + +long double +__atanl (long double x) +{ + fputs ("__atanl not implemented\n", stderr); + return 0.0; +} +weak_alias (__atanl, atanl) + +stub_warning (atanl) diff --git a/sysdeps/stub/s_log1pl.c b/sysdeps/stub/s_log1pl.c new file mode 100644 index 0000000000..07282482f3 --- /dev/null +++ b/sysdeps/stub/s_log1pl.c @@ -0,0 +1,12 @@ +#include <math.h> +#include <stdio.h> + +long double +__log1pl (long double x) +{ + fputs ("__log1pl not implemented\n", stderr); + return 0.0; +} +weak_alias (__log1pl, log1pl) + +stub_warning (log1pl) diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index 0879234162..ef0dfbce89 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -1,12 +1,17 @@ init-first.h sysctl.c +termio.h net/if.h +net/if_arp.h net/if_ppp.h net/ppp-comp.h net/ppp_defs.h +net/route.h nfs/nfs.h sys/acct.h +sys/debugreg.h sys/io.h +sys/kd.h sys/kdaemon.h sys/klog.h sys/module.h @@ -14,9 +19,10 @@ sys/mount.h sys/procfs.h sys/quota.h sys/socketcall.h +sys/soundcard.h sys/sysctl.h sys/sysinfo.h sys/sysmacros.h sys/timex.h sys/user.h -termio.h +sys/vt.h diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 7cfa06db66..0f563f082a 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -31,7 +31,8 @@ sysdep_headers += sys/timex.h endif ifeq ($(subdir), socket) -sysdep_headers += sys/socketcall.h net/if.h +sysdep_headers += sys/socketcall.h net/if.h net/if_ppp.h net/ppp-comp.h \ + net/ppp_defs.h net/if_arp.h net/route.h endif ifeq ($(subdir), sunrpc) diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S index ad5f021e99..75be949aff 100644 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ b/sysdeps/unix/sysv/linux/alpha/brk.S @@ -21,6 +21,7 @@ error. Instead, the error condition is indicated by returning the old break value (instead of the new, requested one). */ #include <sysdep.h> +#define _ERRNO_H #include <errnos.h> #ifdef PIC diff --git a/sysdeps/unix/sysv/linux/i386/sigcontext.h b/sysdeps/unix/sysv/linux/sigcontext.h index 92733ab447..92733ab447 100644 --- a/sysdeps/unix/sysv/linux/i386/sigcontext.h +++ b/sysdeps/unix/sysv/linux/sigcontext.h diff --git a/sysdeps/unix/sysv/linux/sys/procfs.h b/sysdeps/unix/sysv/linux/sys/procfs.h index d4a38980c3..619955c1e5 100644 --- a/sysdeps/unix/sysv/linux/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/sys/procfs.h @@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */ #include <signal.h> #include <sys/time.h> #include <sys/types.h> +#include <asm/user.h> #include <asm/elf.h> struct elf_siginfo diff --git a/version.h b/version.h index f16e1dcd2c..f47a199715 100644 --- a/version.h +++ b/version.h @@ -1,4 +1,4 @@ /* This file just defines the current version number of libc. */ #define RELEASE "alpha" -#define VERSION "1.95" +#define VERSION "1.96" |