guy@auspex.auspex.com (Guy Harris) (09/09/89)
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) {