X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doio.c;h=dce271d4af8d1decb1aa58b5cc116c07a99779d0;hb=a60c0954410db87be540ee8439afcd54350bbb8e;hp=00e2e758859d919a5b2ef371caf7cc9c6e3769e1;hpb=8490252049bf42d3d2f75d89178a8682bf22ba74;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doio.c b/doio.c index 00e2e75..dce271d 100644 --- a/doio.c +++ b/doio.c @@ -76,13 +76,7 @@ #endif bool -do_open(gv,name,len,as_raw,rawmode,rawperm,supplied_fp) -GV *gv; -register char *name; -I32 len; -int as_raw; -int rawmode, rawperm; -PerlIO *supplied_fp; +do_open(GV *gv, register char *name, I32 len, int as_raw, int rawmode, int rawperm, FILE *supplied_fp) { register IO *io = GvIOn(gv); PerlIO *saveifp = Nullfp; @@ -283,6 +277,7 @@ PerlIO *supplied_fp; } if (IoTYPE(io) && IoTYPE(io) != '|' && IoTYPE(io) != '-') { + dTHR; if (Fstat(PerlIO_fileno(fp),&statbuf) < 0) { (void)PerlIO_close(fp); goto say_false; @@ -297,8 +292,9 @@ PerlIO *supplied_fp; !statbuf.st_mode #endif ) { - Sock_size_t buflen = sizeof tokenbuf; - if (getsockname(PerlIO_fileno(fp), (struct sockaddr *)tokenbuf, + char tmpbuf[256]; + Sock_size_t buflen = sizeof tmpbuf; + if (getsockname(PerlIO_fileno(fp), (struct sockaddr *)tmpbuf, &buflen) >= 0 || errno != ENOTSOCK) IoTYPE(io) = 's'; /* some OS's return 0 on fstat()ed socket */ @@ -340,6 +336,7 @@ PerlIO *supplied_fp; #endif IoIFP(io) = fp; if (writing) { + dTHR; if (IoTYPE(io) == 's' || (IoTYPE(io) == '>' && S_ISCHR(statbuf.st_mode)) ) { if (!(IoOFP(io) = PerlIO_fdopen(PerlIO_fileno(fp),"w"))) { @@ -361,8 +358,7 @@ say_false: } PerlIO * -nextargv(gv) -register GV *gv; +nextargv(register GV *gv) { register SV *sv; #ifndef FLEXFILENAMES @@ -384,6 +380,7 @@ register GV *gv; } filemode = 0; while (av_len(GvAV(gv)) >= 0) { + dTHR; STRLEN len; sv = av_shift(GvAV(gv)); SAVEFREESV(sv); @@ -419,8 +416,12 @@ register GV *gv; #ifndef FLEXFILENAMES if (Stat(SvPVX(sv),&statbuf) >= 0 && statbuf.st_dev == filedev - && statbuf.st_ino == fileino ) { - warn("Can't do inplace edit: %s > 14 characters", + && statbuf.st_ino == fileino +#ifdef DJGPP + || (_djstat_fail_bits & _STFAIL_TRUENAME)!=0 +#endif + ) { + warn("Can't do inplace edit: %s would not be uniq", SvPVX(sv) ); do_close(gv,FALSE); continue; @@ -499,7 +500,8 @@ register GV *gv; return IoIFP(GvIOp(gv)); } else - PerlIO_printf(PerlIO_stderr(), "Can't open %s: %s\n",SvPV(sv, na), Strerror(errno)); + PerlIO_printf(PerlIO_stderr(), "Can't open %s: %s\n", + SvPV(sv, na), Strerror(errno)); } if (inplace) { (void)do_close(argvoutgv,FALSE); @@ -510,10 +512,7 @@ register GV *gv; #ifdef HAS_PIPE void -do_pipe(sv, rgv, wgv) -SV *sv; -GV *rgv; -GV *wgv; +do_pipe(SV *sv, GV *rgv, GV *wgv) { register IO *rstio; register IO *wstio; @@ -592,8 +591,7 @@ do_close(GV *gv, bool not_implicit) } bool -io_close(io) -IO* io; +io_close(IO *io) { bool retval = FALSE; int status; @@ -621,9 +619,9 @@ IO* io; } bool -do_eof(gv) -GV *gv; +do_eof(GV *gv) { + dTHR; register IO *io; int ch; @@ -659,8 +657,7 @@ GV *gv; } long -do_tell(gv) -GV *gv; +do_tell(GV *gv) { register IO *io; register PerlIO *fp; @@ -679,10 +676,7 @@ GV *gv; } bool -do_seek(gv, pos, whence) -GV *gv; -long pos; -int whence; +do_seek(GV *gv, long int pos, int whence) { register IO *io; register PerlIO *fp; @@ -701,10 +695,7 @@ int whence; } long -do_sysseek(gv, pos, whence) -GV *gv; -long pos; -int whence; +do_sysseek(GV *gv, long int pos, int whence) { register IO *io; register PerlIO *fp; @@ -769,9 +760,7 @@ Off_t length; /* length to set file to */ #endif /* F_FREESP */ bool -do_print(sv,fp) -register SV *sv; -PerlIO *fp; +do_print(register SV *sv, FILE *fp) { register char *tmps; STRLEN len; @@ -815,10 +804,9 @@ PerlIO *fp; } I32 -my_stat(ARGS) -dARGS +my_stat(ARGSproto) { - dSP; + djSP; IO *io; GV* tmpgv; @@ -867,10 +855,9 @@ dARGS } I32 -my_lstat(ARGS) -dARGS +my_lstat(ARGSproto) { - dSP; + djSP; SV *sv; if (op->op_flags & OPf_REF) { EXTEND(sp,1); @@ -898,15 +885,13 @@ dARGS } bool -do_aexec(really,mark,sp) -SV *really; -register SV **mark; -register SV **sp; +do_aexec(SV *really, register SV **mark, register SV **sp) { register char **a; char *tmps; if (sp > mark) { + dTHR; New(401,Argv, sp - mark + 1, char*); a = Argv; while (++mark <= sp) { @@ -930,7 +915,7 @@ register SV **sp; } void -do_execfree() +do_execfree(void) { if (Argv) { Safefree(Argv); @@ -942,11 +927,10 @@ do_execfree() } } -#if !defined(OS2) && !defined(WIN32) +#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) bool -do_exec(cmd) -char *cmd; +do_exec(char *cmd) { register char **a; register char *s; @@ -1036,11 +1020,9 @@ char *cmd; #endif /* OS2 || WIN32 */ I32 -apply(type,mark,sp) -I32 type; -register SV **mark; -register SV **sp; +apply(I32 type, register SV **mark, register SV **sp) { + dTHR; register I32 val; register I32 val2; register I32 tot = 0; @@ -1208,10 +1190,7 @@ register SV **sp; /* Do the permissions allow some operation? Assumes statcache already set. */ #ifndef VMS /* VMS' cando is in vms.c */ I32 -cando(bit, effective, statbufp) -I32 bit; -I32 effective; -register struct stat *statbufp; +cando(I32 bit, I32 effective, register struct stat *statbufp) { #ifdef DOSISH /* [Comments and code from Len Reed] @@ -1263,9 +1242,7 @@ register struct stat *statbufp; #endif /* ! VMS */ I32 -ingroup(testgid,effective) -I32 testgid; -I32 effective; +ingroup(I32 testgid, I32 effective) { if (testgid == (effective ? egid : gid)) return TRUE; @@ -1289,11 +1266,9 @@ I32 effective; #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM) I32 -do_ipcget(optype, mark, sp) -I32 optype; -SV **mark; -SV **sp; +do_ipcget(I32 optype, SV **mark, SV **sp) { + dTHR; key_t key; I32 n, flags; @@ -1324,11 +1299,9 @@ SV **sp; } I32 -do_ipcctl(optype, mark, sp) -I32 optype; -SV **mark; -SV **sp; +do_ipcctl(I32 optype, SV **mark, SV **sp) { + dTHR; SV *astr; char *a; I32 id, n, cmd, infosize, getinfo; @@ -1448,11 +1421,10 @@ SV **sp; } I32 -do_msgsnd(mark, sp) -SV **mark; -SV **sp; +do_msgsnd(SV **mark, SV **sp) { #ifdef HAS_MSG + dTHR; SV *mstr; char *mbuf; I32 id, msize, flags; @@ -1472,11 +1444,10 @@ SV **sp; } I32 -do_msgrcv(mark, sp) -SV **mark; -SV **sp; +do_msgrcv(SV **mark, SV **sp) { #ifdef HAS_MSG + dTHR; SV *mstr; char *mbuf; long mtype; @@ -1510,11 +1481,10 @@ SV **sp; } I32 -do_semop(mark, sp) -SV **mark; -SV **sp; +do_semop(SV **mark, SV **sp) { #ifdef HAS_SEM + dTHR; SV *opstr; char *opbuf; I32 id; @@ -1536,12 +1506,10 @@ SV **sp; } I32 -do_shmio(optype, mark, sp) -I32 optype; -SV **mark; -SV **sp; +do_shmio(I32 optype, SV **mark, SV **sp) { #ifdef HAS_SHM + dTHR; SV *mstr; char *mbuf, *shm; I32 id, mpos, msize; @@ -1559,7 +1527,7 @@ SV **sp; SETERRNO(EFAULT,SS$_ACCVIO); /* can't do as caller requested */ return -1; } - shm = (Shmat_t)shmat(id, (char*)NULL, (optype == OP_SHMREAD) ? SHM_RDONLY : 0); + shm = (char *)shmat(id, (char*)NULL, (optype == OP_SHMREAD) ? SHM_RDONLY : 0); if (shm == (char *)-1) /* I hate System V IPC, I really do */ return -1; if (optype == OP_SHMREAD) { @@ -1588,3 +1556,4 @@ SV **sp; } #endif /* SYSV IPC */ +