/* doio.c
*
- * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
+ * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+ * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*/
/*
- * "Far below them they saw the white waters pour into a foaming bowl, and
- * then swirl darkly about a deep oval basin in the rocks, until they found
- * their way out again through a narrow gate, and flowed away, fuming and
- * chattering, into calmer and more level reaches."
+ * Far below them they saw the white waters pour into a foaming bowl, and
+ * then swirl darkly about a deep oval basin in the rocks, until they found
+ * their way out again through a narrow gate, and flowed away, fuming and
+ * chattering, into calmer and more level reaches.
+ *
+ * [p.684 of _The Lord of the Rings_, IV/vi: "The Forbidden Pool"]
*/
/* This file contains functions that do the actual I/O on behalf of ops.
char mode[PERL_MODE_MAX]; /* file mode ("r\0", "rb\0", "ab\0" etc.) */
SV *namesv;
+ PERL_ARGS_ASSERT_DO_OPENN;
+
Zero(mode,sizeof(mode),char);
PL_forkprocess = 1; /* assume true if no fork */
IoTYPE(io) = PerlIO_intmode2str(rawmode, &mode[ix], &writing);
- namesv = sv_2mortal(newSVpv(oname,0));
+ namesv = newSVpvn_flags(oname, len, SVs_TEMP);
num_svs = 1;
svp = &namesv;
type = NULL;
goto say_false;
}
#endif /* USE_STDIO */
- name = SvOK(*svp) ? savesvpv (*svp) : savepvn ("", 0);
+ name = SvOK(*svp) ? savesvpv (*svp) : savepvs ("");
SAVEFREEPV(name);
}
else {
mode[0] = 'w';
writing = 1;
if (out_raw)
- my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+ mode[1] = 'b';
else if (out_crlf)
- my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+ mode[1] = 't';
if (num_svs > 1) {
fp = PerlProc_popen_list(mode, num_svs, svp);
}
writing = 1;
if (out_raw)
- my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+ mode[1] = 'b';
else if (out_crlf)
- my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+ mode[1] = 't';
if (*type == '&') {
duplicity:
dodup = PERLIO_DUP_FD;
}
else {
if (!num_svs) {
- namesv = sv_2mortal(newSVpvn(type,tend - type));
+ namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
num_svs = 1;
svp = &namesv;
type = NULL;
} while (isSPACE(*type));
mode[0] = 'r';
if (in_raw)
- my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+ mode[1] = 'b';
else if (in_crlf)
- my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+ mode[1] = 't';
if (*type == '&') {
goto duplicity;
}
}
else {
if (!num_svs) {
- namesv = sv_2mortal(newSVpvn(type,tend - type));
+ namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
num_svs = 1;
svp = &namesv;
type = NULL;
mode[0] = 'r';
if (in_raw)
- my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+ mode[1] = 'b';
else if (in_crlf)
- my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+ mode[1] = 't';
if (num_svs > 1) {
fp = PerlProc_popen_list(mode,num_svs,svp);
mode[0] = 'r';
if (in_raw)
- my_strlcat(mode, "b", PERL_MODE_MAX - 1);
+ mode[1] = 'b';
else if (in_crlf)
- my_strlcat(mode, "t", PERL_MODE_MAX - 1);
+ mode[1] = 't';
if (*name == '-' && name[1] == '\0') {
fp = PerlIO_stdin();
}
else {
if (!num_svs) {
- namesv = sv_2mortal(newSVpvn(type,tend - type));
+ namesv = newSVpvn_flags(type, tend - type, SVs_TEMP);
num_svs = 1;
svp = &namesv;
type = NULL;
Gid_t filegid;
IO * const io = GvIOp(gv);
+ PERL_ARGS_ASSERT_NEXTARGV;
+
if (!PL_argvoutgv)
PL_argvoutgv = gv_fetchpvs("ARGVOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
if (io && (IoFLAGS(io) & IOf_ARGV) && (IoFLAGS(io) & IOf_START)) {
IoFLAGS(io) &= ~IOf_START;
if (PL_inplace) {
- if (!PL_argvout_stack)
- PL_argvout_stack = newAV();
assert(PL_defoutgv);
- av_push(PL_argvout_stack, SvREFCNT_inc_simple_NN(PL_defoutgv));
+ Perl_av_create_and_push(aTHX_ &PL_argvout_stack,
+ SvREFCNT_inc_simple_NN(PL_defoutgv));
}
}
if (PL_filemode & (S_ISUID|S_ISGID)) {
const char *star = strchr(PL_inplace, '*');
if (star) {
const char *begin = PL_inplace;
- sv_setpvn(sv, "", 0);
+ sv_setpvs(sv, "");
do {
sv_catpvn(sv, begin, star - begin);
sv_catpvn(sv, PL_oldname, oldlen);
if (ckWARN_d(WARN_INPLACE))
Perl_warner(aTHX_ packWARN(WARN_INPLACE),
"Can't do inplace edit: %"SVf" would not be unique",
- sv);
+ SVfARG(sv));
do_close(gv,FALSE);
continue;
}
if (ckWARN_d(WARN_INPLACE))
Perl_warner(aTHX_ packWARN(WARN_INPLACE),
"Can't rename %s to %"SVf": %s, skipping file",
- PL_oldname, (void*)sv, Strerror(errno));
+ PL_oldname, SVfARG(sv), Strerror(errno));
do_close(gv,FALSE);
continue;
}
if (ckWARN_d(WARN_INPLACE))
Perl_warner(aTHX_ packWARN(WARN_INPLACE),
"Can't rename %s to %"SVf": %s, skipping file",
- PL_oldname, sv, Strerror(errno) );
+ PL_oldname, SVfARG(sv), Strerror(errno) );
do_close(gv,FALSE);
continue;
}
if (io && (IoFLAGS(io) & IOf_ARGV)
&& PL_argvout_stack && AvFILLp(PL_argvout_stack) >= 0)
{
- GV * const oldout = (GV*)av_pop(PL_argvout_stack);
+ GV * const oldout = MUTABLE_GV(av_pop(PL_argvout_stack));
setdefout(oldout);
SvREFCNT_dec(oldout);
return NULL;
if (!gv)
gv = PL_argvgv;
- if (!gv || SvTYPE(gv) != SVt_PVGV) {
+ if (!gv || !isGV_with_GP(gv)) {
if (not_implicit)
SETERRNO(EBADF,SS_IVCHAN);
return FALSE;
dVAR;
bool retval = FALSE;
+ PERL_ARGS_ASSERT_IO_CLOSE;
+
if (IoIFP(io)) {
if (IoTYPE(io) == IoTYPE_PIPE) {
const int status = PerlProc_pclose(IoIFP(io));
dVAR;
register IO * const io = GvIO(gv);
+ PERL_ARGS_ASSERT_DO_EOF;
+
if (!io)
return TRUE;
else if ((IoTYPE(io) == IoTYPE_WRONLY) && ckWARN(WARN_IO))
register IO *io = NULL;
register PerlIO *fp;
+ PERL_ARGS_ASSERT_DO_TELL;
+
if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) {
#ifdef ULTRIX_STDIO_BOTCH
if (PerlIO_eof(fp))
register IO *io = NULL;
register PerlIO *fp;
+ PERL_ARGS_ASSERT_DO_SYSSEEK;
+
if (gv && (io = GvIO(gv)) && (fp = IoIFP(io)))
return PerlLIO_lseek(PerlIO_fileno(fp), pos, whence);
if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
}
int
-Perl_mode_from_discipline(pTHX_ SV *discp)
+Perl_mode_from_discipline(pTHX_ const char *s, STRLEN len)
{
int mode = O_BINARY;
- if (discp) {
- STRLEN len;
- const char *s = SvPV_const(discp,len);
+ if (s) {
while (*s) {
if (*s == ':') {
switch (s[1]) {
Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
{
dVAR;
- register const char *tmps;
- STRLEN len;
- U8 *tmpbuf = NULL;
- bool happy = TRUE;
+
+ PERL_ARGS_ASSERT_DO_PRINT;
/* assuming fp is checked earlier */
if (!sv)
return TRUE;
- switch (SvTYPE(sv)) {
- case SVt_NULL:
- if (ckWARN(WARN_UNINITIALIZED))
- report_uninit(sv);
- return TRUE;
- case SVt_IV:
- if (SvIOK(sv)) {
- assert(!SvGMAGICAL(sv));
- if (SvIsUV(sv))
- PerlIO_printf(fp, "%"UVuf, (UV)SvUVX(sv));
- else
- PerlIO_printf(fp, "%"IVdf, (IV)SvIVX(sv));
- return !PerlIO_error(fp);
- }
- /* FALL THROUGH */
- default:
+ if (SvTYPE(sv) == SVt_IV && SvIOK(sv)) {
+ assert(!SvGMAGICAL(sv));
+ if (SvIsUV(sv))
+ PerlIO_printf(fp, "%"UVuf, (UV)SvUVX(sv));
+ else
+ PerlIO_printf(fp, "%"IVdf, (IV)SvIVX(sv));
+ return !PerlIO_error(fp);
+ }
+ else {
+ STRLEN len;
/* Do this first to trigger any overloading. */
- tmps = SvPV_const(sv, len);
+ const char *tmps = SvPV_const(sv, len);
+ U8 *tmpbuf = NULL;
+ bool happy = TRUE;
+
if (PerlIO_isutf8(fp)) {
if (!SvUTF8(sv)) {
/* We don't modify the original scalar. */
}
}
}
- break;
+ /* To detect whether the process is about to overstep its
+ * filesize limit we would need getrlimit(). We could then
+ * also transparently raise the limit with setrlimit() --
+ * but only until the system hard limit/the filesystem limit,
+ * at which we would get EPERM. Note that when using buffered
+ * io the write failure can be delayed until the flush/close. --jhi */
+ if (len && (PerlIO_write(fp,tmps,len) == 0))
+ happy = FALSE;
+ Safefree(tmpbuf);
+ return happy ? !PerlIO_error(fp) : FALSE;
}
- /* To detect whether the process is about to overstep its
- * filesize limit we would need getrlimit(). We could then
- * also transparently raise the limit with setrlimit() --
- * but only until the system hard limit/the filesystem limit,
- * at which we would get EPERM. Note that when using buffered
- * io the write failure can be delayed until the flush/close. --jhi */
- if (len && (PerlIO_write(fp,tmps,len) == 0))
- happy = FALSE;
- Safefree(tmpbuf);
- return happy ? !PerlIO_error(fp) : FALSE;
}
I32
do_fstat_have_io:
PL_laststype = OP_STAT;
PL_statgv = gv;
- sv_setpvn(PL_statname, "", 0);
+ sv_setpvs(PL_statname, "");
if(io) {
if (IoIFP(io)) {
return (PL_laststatval = PerlLIO_fstat(PerlIO_fileno(IoIFP(io)), &PL_statcache));
} else if (IoDIRP(io)) {
-#ifdef HAS_DIRFD
- return (PL_laststatval = PerlLIO_fstat(dirfd(IoDIRP(io)), &PL_statcache));
-#else
- Perl_die(aTHX_ PL_no_func, "dirfd");
- NORETURN_FUNCTION_END;
-#endif
+ return (PL_laststatval = PerlLIO_fstat(my_dirfd(IoDIRP(io)), &PL_statcache));
} else {
if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
report_evil_fh(gv, io, PL_op->op_type);
const char *s;
STRLEN len;
PUTBACK;
- if (SvTYPE(sv) == SVt_PVGV) {
- gv = (GV*)sv;
+ if (isGV_with_GP(sv)) {
+ gv = MUTABLE_GV(sv);
goto do_fstat;
}
- else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV) {
- gv = (GV*)SvRV(sv);
+ else if (SvROK(sv) && isGV_with_GP(SvRV(sv))) {
+ gv = MUTABLE_GV(SvRV(sv));
goto do_fstat;
}
else if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVIO) {
- io = (IO*)SvRV(sv);
+ io = MUTABLE_IO(SvRV(sv));
+ gv = NULL;
goto do_fstat_have_io;
}
static const char no_prev_lstat[] = "The stat preceding -l _ wasn't an lstat";
dSP;
SV *sv;
+ const char *file;
if (PL_op->op_flags & OPf_REF) {
EXTEND(SP,1);
if (cGVOP_gv == PL_defgv) {
PL_statgv = NULL;
sv = POPs;
PUTBACK;
- if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVGV && ckWARN(WARN_IO)) {
+ if (SvROK(sv) && isGV_with_GP(SvRV(sv)) && ckWARN(WARN_IO)) {
Perl_warner(aTHX_ packWARN(WARN_IO), "Use of -l on filehandle %s",
- GvENAME((GV*) SvRV(sv)));
+ GvENAME((const GV *)SvRV(sv)));
return (PL_laststatval = -1);
}
- /* XXX Do really need to be calling SvPV() all these times? */
- sv_setpv(PL_statname,SvPV_nolen_const(sv));
- PL_laststatval = PerlLIO_lstat(SvPV_nolen_const(sv),&PL_statcache);
- if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && strchr(SvPV_nolen_const(sv), '\n'))
+ file = SvPV_nolen_const(sv);
+ sv_setpv(PL_statname,file);
+ PL_laststatval = PerlLIO_lstat(file,&PL_statcache);
+ if (PL_laststatval < 0 && ckWARN(WARN_NEWLINE) && strchr(file, '\n'))
Perl_warner(aTHX_ packWARN(WARN_NEWLINE), PL_warn_nl, "lstat");
return PL_laststatval;
}
S_exec_failed(pTHX_ const char *cmd, int fd, int do_report)
{
const int e = errno;
+ PERL_ARGS_ASSERT_EXEC_FAILED;
if (ckWARN(WARN_EXEC))
Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't exec \"%s\": %s",
cmd, Strerror(e));
int fd, int do_report)
{
dVAR;
-#if defined(MACOS_TRADITIONAL) || defined(__SYMBIAN32__)
+ PERL_ARGS_ASSERT_DO_AEXEC5;
+#if defined(MACOS_TRADITIONAL) || defined(__SYMBIAN32__) || defined(__LIBCATAMOUNT__)
Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system");
#else
if (sp > mark) {
- char **a;
+ const char **a;
const char *tmps = NULL;
- Newx(PL_Argv, sp - mark + 1, char*);
+ Newx(PL_Argv, sp - mark + 1, const char*);
a = PL_Argv;
while (++mark <= sp) {
if (*mark)
- *a++ = (char*)SvPV_nolen_const(*mark);
+ *a++ = SvPV_nolen_const(*mark);
else
*a++ = "";
}
Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
{
dVAR;
- register char **a;
+ register const char **a;
register char *s;
+ char *buf;
char *cmd;
-
/* Make a copy so we can change it */
const Size_t cmdlen = strlen(incmd) + 1;
- Newx(cmd, cmdlen, char);
- my_strlcpy(cmd, incmd, cmdlen);
+
+ PERL_ARGS_ASSERT_DO_EXEC3;
+
+ Newx(buf, cmdlen, char);
+ cmd = buf;
+ memcpy(cmd, incmd, cmdlen);
while (*cmd && isSPACE(*cmd))
cmd++;
if (s[-1] == '\'') {
*--s = '\0';
PERL_FPU_PRE_EXEC
- PerlProc_execl(PL_cshname, "csh", flags, ncmd, NULL);
+ PerlProc_execl(PL_cshname, "csh", flags, ncmd, (char*)NULL);
PERL_FPU_POST_EXEC
*s = '\'';
S_exec_failed(aTHX_ PL_cshname, fd, do_report);
- Safefree(cmd);
+ Safefree(buf);
return FALSE;
}
}
}
doshell:
PERL_FPU_PRE_EXEC
- PerlProc_execl(PL_sh_path, "sh", "-c", cmd, NULL);
+ PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char *)NULL);
PERL_FPU_POST_EXEC
S_exec_failed(aTHX_ PL_sh_path, fd, do_report);
- Safefree(cmd);
+ Safefree(buf);
return FALSE;
}
}
- Newx(PL_Argv, (s - cmd) / 2 + 2, char*);
+ Newx(PL_Argv, (s - cmd) / 2 + 2, const char*);
PL_Cmd = savepvn(cmd, s-cmd);
a = PL_Argv;
for (s = PL_Cmd; *s;) {
*a = NULL;
if (PL_Argv[0]) {
PERL_FPU_PRE_EXEC
- PerlProc_execvp(PL_Argv[0],PL_Argv);
+ PerlProc_execvp(PL_Argv[0],EXEC_ARGV_CAST(PL_Argv));
PERL_FPU_POST_EXEC
if (errno == ENOEXEC) { /* for system V NIH syndrome */
do_execfree();
S_exec_failed(aTHX_ PL_Argv[0], fd, do_report);
}
do_execfree();
- Safefree(cmd);
+ Safefree(buf);
return FALSE;
}
const char *s;
SV ** const oldmark = mark;
+ PERL_ARGS_ASSERT_APPLY;
+
/* Doing this ahead of the switch statement preserves the old behaviour,
where attempting to use kill as a taint test test would fail on
platforms where kill was not defined. */
case OP_CHMOD:
APPLY_TAINT_PROPER();
if (++mark <= sp) {
- val = SvIVx(*mark);
+ val = SvIV(*mark);
APPLY_TAINT_PROPER();
tot = sp - mark;
while (++mark <= sp) {
GV* gv;
- if (SvTYPE(*mark) == SVt_PVGV) {
- gv = (GV*)*mark;
+ if (isGV_with_GP(*mark)) {
+ gv = MUTABLE_GV(*mark);
do_fchmod:
if (GvIO(gv) && IoIFP(GvIOp(gv))) {
#ifdef HAS_FCHMOD
tot--;
}
}
- else if (SvROK(*mark) && SvTYPE(SvRV(*mark)) == SVt_PVGV) {
- gv = (GV*)SvRV(*mark);
+ else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
+ gv = MUTABLE_GV(SvRV(*mark));
goto do_fchmod;
}
else {
tot = sp - mark;
while (++mark <= sp) {
GV* gv;
- if (SvTYPE(*mark) == SVt_PVGV) {
- gv = (GV*)*mark;
+ if (isGV_with_GP(*mark)) {
+ gv = MUTABLE_GV(*mark);
do_fchown:
if (GvIO(gv) && IoIFP(GvIOp(gv))) {
#ifdef HAS_FCHOWN
tot--;
}
}
- else if (SvROK(*mark) && SvTYPE(SvRV(*mark)) == SVt_PVGV) {
- gv = (GV*)SvRV(*mark);
+ else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
+ gv = MUTABLE_GV(SvRV(*mark));
goto do_fchown;
}
else {
Perl_croak(aTHX_ "Unrecognized signal name \"%s\"",s);
}
else
- val = SvIVx(*mark);
+ val = SvIV(*mark);
APPLY_TAINT_PROPER();
tot = sp - mark;
#ifdef VMS
* CRTL's emulation of Unix-style signals and kill()
*/
while (++mark <= sp) {
- I32 proc = SvIVx(*mark);
+ I32 proc = SvIV(*mark);
register unsigned long int __vmssts;
APPLY_TAINT_PROPER();
if (!((__vmssts = sys$delprc(&proc,0)) & 1)) {
if (val < 0) {
val = -val;
while (++mark <= sp) {
- const I32 proc = SvIVx(*mark);
+ const I32 proc = SvIV(*mark);
APPLY_TAINT_PROPER();
#ifdef HAS_KILLPG
if (PerlProc_killpg(proc,val)) /* BSD */
}
else {
while (++mark <= sp) {
- const I32 proc = SvIVx(*mark);
+ const I32 proc = SvIV(*mark);
APPLY_TAINT_PROPER();
if (PerlProc_kill(proc, val))
tot--;
else {
Zero(&utbuf, sizeof utbuf, char);
#ifdef HAS_FUTIMES
- utbuf[0].tv_sec = (long)SvIVx(accessed); /* time accessed */
+ utbuf[0].tv_sec = (long)SvIV(accessed); /* time accessed */
utbuf[0].tv_usec = 0;
- utbuf[1].tv_sec = (long)SvIVx(modified); /* time modified */
+ utbuf[1].tv_sec = (long)SvIV(modified); /* time modified */
utbuf[1].tv_usec = 0;
#elif defined(BIG_TIME)
- utbuf.actime = (Time_t)SvNVx(accessed); /* time accessed */
- utbuf.modtime = (Time_t)SvNVx(modified); /* time modified */
+ utbuf.actime = (Time_t)SvNV(accessed); /* time accessed */
+ utbuf.modtime = (Time_t)SvNV(modified); /* time modified */
#else
- utbuf.actime = (Time_t)SvIVx(accessed); /* time accessed */
- utbuf.modtime = (Time_t)SvIVx(modified); /* time modified */
+ utbuf.actime = (Time_t)SvIV(accessed); /* time accessed */
+ utbuf.modtime = (Time_t)SvIV(modified); /* time modified */
#endif
}
APPLY_TAINT_PROPER();
tot = sp - mark;
while (++mark <= sp) {
GV* gv;
- if (SvTYPE(*mark) == SVt_PVGV) {
- gv = (GV*)*mark;
+ if (isGV_with_GP(*mark)) {
+ gv = MUTABLE_GV(*mark);
do_futimes:
if (GvIO(gv) && IoIFP(GvIOp(gv))) {
#ifdef HAS_FUTIMES
APPLY_TAINT_PROPER();
- if (futimes(PerlIO_fileno(IoIFP(GvIOn(gv))), utbufp))
+ if (futimes(PerlIO_fileno(IoIFP(GvIOn(gv))),
+ (struct timeval *) utbufp))
tot--;
#else
Perl_die(aTHX_ PL_no_func, "futimes");
tot--;
}
}
- else if (SvROK(*mark) && SvTYPE(SvRV(*mark)) == SVt_PVGV) {
- gv = (GV*)SvRV(*mark);
+ else if (SvROK(*mark) && isGV_with_GP(SvRV(*mark))) {
+ gv = MUTABLE_GV(SvRV(*mark));
goto do_futimes;
}
else {
const char * const name = SvPV_nolen_const(*mark);
APPLY_TAINT_PROPER();
#ifdef HAS_FUTIMES
- if (utimes(name, utbufp))
+ if (utimes(name, (struct timeval *)utbufp))
#else
if (PerlLIO_utime(name, utbufp))
#endif
*/
{
dVAR;
+
+ PERL_ARGS_ASSERT_CANDO;
+
#ifdef DOSISH
/* [Comments and code from Len Reed]
* MS-DOS "user" is similar to UNIX's "superuser," but can't write
}
#endif /* ! VMS */
-bool
-Perl_ingroup(pTHX_ Gid_t testgid, bool effective)
+static bool
+S_ingroup(pTHX_ Gid_t testgid, bool effective)
{
#ifdef MACOS_TRADITIONAL
/* This is simply not correct for AppleShare, but fix it yerself. */
const I32 n = (optype == OP_MSGGET) ? 0 : SvIVx(*++mark);
const I32 flags = SvIVx(*++mark);
+ PERL_ARGS_ASSERT_DO_IPCGET;
PERL_UNUSED_ARG(sp);
SETERRNO(0,0);
STRLEN infosize = 0;
I32 getinfo = (cmd == IPC_STAT);
+ PERL_ARGS_ASSERT_DO_IPCCTL;
PERL_UNUSED_ARG(sp);
switch (optype)
const char * const mbuf = SvPV_const(mstr, len);
const I32 msize = len - sizeof(long);
+ PERL_ARGS_ASSERT_DO_MSGSND;
PERL_UNUSED_ARG(sp);
if (msize < 0)
SETERRNO(0,0);
return msgsnd(id, (struct msgbuf *)mbuf, msize, flags);
#else
+ PERL_UNUSED_ARG(sp);
+ PERL_UNUSED_ARG(mark);
Perl_croak(aTHX_ "msgsnd not implemented");
#endif
}
I32 msize, flags, ret;
const I32 id = SvIVx(*++mark);
SV * const mstr = *++mark;
+
+ PERL_ARGS_ASSERT_DO_MSGRCV;
PERL_UNUSED_ARG(sp);
/* suppress warning when reading into undef var --jhi */
if (! SvOK(mstr))
- sv_setpvn(mstr, "", 0);
+ sv_setpvs(mstr, "");
msize = SvIVx(*++mark);
mtype = (long)SvIVx(*++mark);
flags = SvIVx(*++mark);
}
return ret;
#else
+ PERL_UNUSED_ARG(sp);
+ PERL_UNUSED_ARG(mark);
Perl_croak(aTHX_ "msgrcv not implemented");
#endif
}
const I32 id = SvIVx(*++mark);
SV * const opstr = *++mark;
const char * const opbuf = SvPV_const(opstr, opsize);
+
+ PERL_ARGS_ASSERT_DO_SEMOP;
PERL_UNUSED_ARG(sp);
if (opsize < 3 * SHORTSIZE
SV * const mstr = *++mark;
const I32 mpos = SvIVx(*++mark);
const I32 msize = SvIVx(*++mark);
+
+ PERL_ARGS_ASSERT_DO_SHMIO;
PERL_UNUSED_ARG(sp);
SETERRNO(0,0);
if (shmctl(id, IPC_STAT, &shmds) == -1)
return -1;
- if (mpos < 0 || msize < 0 || (size_t)mpos + msize > shmds.shm_segsz) {
+ if (mpos < 0 || msize < 0
+ || (size_t)mpos + msize > (size_t)shmds.shm_segsz) {
SETERRNO(EFAULT,SS_ACCVIO); /* can't do as caller requested */
return -1;
}
if (shm == (char *)-1) /* I hate System V IPC, I really do */
return -1;
if (optype == OP_SHMREAD) {
- const char *mbuf;
+ char *mbuf;
/* suppress warning when reading into undef var (tchrist 3/Mar/00) */
if (! SvOK(mstr))
- sv_setpvn(mstr, "", 0);
+ sv_setpvs(mstr, "");
SvPV_force_nolen(mstr);
mbuf = SvGROW(mstr, (STRLEN)msize+1);
dVAR;
SV * const tmpcmd = newSV(0);
PerlIO *fp;
+
+ PERL_ARGS_ASSERT_START_GLOB;
+
ENTER;
SAVEFREESV(tmpcmd);
#ifdef VMS /* expand the wildcards right here, rather than opening a pipe, */