Article View: comp.sources.bugs
Article #123Re: Patches to some Perl 3.0 bugs
From: Guy Harris
Date: Sat, 09 Sep 1989 02:29
Date: Sat, 09 Sep 1989 02:29
133 lines
4025 bytes
4025 bytes
Unofficial patches (which I'll forward to Larry Wall) for some problems:
1) a little problem "lint" caught in "cons.c". "lint" is your friend.
*** cons.c.dist Fri Sep 8 17:35:38 1989
--- cons.c Fri Sep 8 18:46:26 1989
***************
*** 173,179 ****
Newz(103,loc,258,CMD*);
loc++; /* lie a little */
while (count--) {
! if ((cur->c_flags && CF_OPTIMIZE) == CFT_CCLASS) {
for (i = 0; i <= 255; i++) {
if (!loc[i] && cur->c_short->str_ptr[i>>3] & (1 << (i&7))) {
loc[i] = cur;
--- 173,179 ----
Newz(103,loc,258,CMD*);
loc++; /* lie a little */
while (count--) {
! if ((cur->c_flags & CF_OPTIMIZE) == CFT_CCLASS) {
for (i = 0; i <= 255; i++) {
if (!loc[i] && cur->c_short->str_ptr[i>>3] & (1 << (i&7))) {
loc[i] = cur;
2) One "#ifdef SYMLINK"/"#endif" was missed in "doio.c", causing Perl
not to build on machines without "lstat".
*** doio.c.dist Fri Sep 8 17:35:38 1989
--- doio.c Fri Sep 8 18:47:26 1989
***************
*** 457,465 ****
--- 457,467 ----
else {
str_sset(statname,ary->ary_array[sp]);
statstab = Nullstab;
+ #ifdef SYMLINK
if (arg->arg_type == O_LSTAT)
i = lstat(str_get(statname),&statcache);
else
+ #endif
i = stat(str_get(statname),&statcache);
if (i < 0)
max = 0;
3) The "lstat()" function for which the "lstat"s were stuck in there in
the first place seemed not to be recognized by the lexical analyzer.
(It also appears not to have been documented, but then again the
BSD socket functions in Perl don't seem to be documented, either....)
*** toke.c.dist Fri Sep 8 17:35:43 1989
--- toke.c Fri Sep 8 18:49:16 1989
***************
*** 635,640 ****
--- 635,642 ----
FUN2(O_LINK);
if (strEQ(d,"listen"))
FOP2(O_LISTEN);
+ if (strEQ(d,"lstat"))
+ FOP(O_LSTAT);
break;
case 'm': case 'M':
SNARFWORD;
4) "vfork" interacts unpleasantly with register windows on SPARC
machines.
5) "mypopen" required that the system have "dup2()"; some versions of
UNIX do not but do have "fcntl" (S3, S5"R1", S5R2 - S5R3 has both).
*** eval.c.dist Fri Sep 8 17:35:39 1989
--- eval.c Fri Sep 8 17:51:15 1989
***************
*** 14,19 ****
--- 14,23 ----
#include <signal.h>
#include <errno.h>
+ #ifdef sparc
+ # include <vfork.h>
+ #endif
+
extern int errno;
#ifdef VOIDSIG
*** util.c.dist Fri Sep 8 17:35:44 1989
--- util.c Fri Sep 8 19:02:10 1989
***************
*** 12,17 ****
--- 12,30 ----
#include "perl.h"
#include "errno.h"
+ #ifdef sparc
+ /*
+ * XXX - should be "#include <vfork.h>"; however, that doesn't seem
+ * to be sufficient to fix the problem, so we just #define "vfork"
+ * to be "fork"....
+ */
+ #define vfork fork
+ #endif
+
+ #ifdef FCNTL
+ # include <fcntl.h>
+ #endif
+
#ifdef VARARGS
# include <varargs.h>
#endif
***************
*** 1001,1008 ****
this = !this; /* swap this and that */
that = !this;
close(p[that]);
! if (p[this] != (*mode == 'r')) {
! dup2(p[this], *mode == 'r');
close(p[this]);
}
if (doexec) {
--- 1014,1026 ----
this = !this; /* swap this and that */
that = !this;
close(p[that]);
! if (p[this] != this) {
! #ifdef FCNTL
! close(this);
! fcntl(p[this], F_DUPFD, this);
! #else
! dup2(p[this], this);
! #endif
close(p[this]);
}
if (doexec) {
Technical Details
Message-ID:
<2430@auspex.auspex.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!uakari.primate.wisc.edu!aplcen!ginosko!uunet!auspex!guyReferences:
<2428@auspex.auspex.com>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.csd.uwm.edu!uakari.primate.wisc.edu!aplcen!ginosko!uunet!auspex!guy From: guy@auspex.auspex.com (Guy Harris) Newsgroups: comp.sources.bugs,comp.sources.d,alt.sources.d Subject: Re: Patches to some Perl 3.0 bugs Message-ID: <2430@auspex.auspex.com> Date: 9 Sep 89 02:29:30 GMT References: <2428@auspex.auspex.com> Reply-To: guy@auspex.auspex.com (Guy Harris) Followup-To: alt.sources.d Organization: Auspex Systems, Santa Clara Lines: 133