summaryrefslogtreecommitdiff
path: root/doio.c
Commit message (Collapse)AuthorAgeFilesLines
* Coverity #28930: unchecked return valueJarkko Hietaniemi2017-02-101-1/+5
| | | | | Strangely, this was apparently found already in 2014, but it now (rightfully) showed up. Coverity database tweak?
* Use cBOOL() instead of ? TRUE : FALSEDagfinn Ilmari Mannsåker2017-01-251-1/+1
| | | | Except under cpan/ and dist/
* Remove obsolete (PL_)statcache mentions in commentsDagfinn Ilmari Mannsåker2017-01-181-1/+1
| | | | cando() has not used PL_statcache since Perl 3 (commit a687059cbaf)
* Change white space to avoid C++ deprecation warningKarl Williamson2016-11-181-17/+22
| | | | | | | | | | | | | | | | | | | | | | C++11 requires space between the end of a string literal and a macro, so that a feature can unambiguously be added to the language. Starting in g++ 6.2, the compiler emits a warning when there isn't a space (presumably so that future versions can support C++11). Unfortunately there are many such instances in the perl core. This commit fixes those, including those in ext/, but individual commits will be used for the other modules, those in dist/ and cpan/. This commit also inserts space at the end of a macro before a string literal, even though that is not deprecated, and removes useless "" literals following a macro (instead of inserting a blank). The result is easier to read, making the macro stand out, and be clearer as to the intention. Code and modules included with the Perl core need to be compilable using C++. This is so that perl can be embedded in C++ programs. (Actually, only the hdr files need to be so compilable, but it would be hard to test that just the hdrs are compilable.) So we need to accommodate changes to the C++ language.
* doio.c: use new SvPVCLEAR and constant string friendly macrosYves Orton2016-10-191-6/+6
|
* Revert "Check against negative uid/gid for fchown()."Jarkko Hietaniemi2016-08-161-11/+1
| | | | | | | | | This reverts commit f95ba548a286b17c260cc168715a9d0d441b14a6. [rt.perl.org #128967] The negative arguments to fchown depend on the platform, so Coverity should not claim it knows what is acceptable.
* [perl #126041] Only clear LS_COLORS for globFather Chrysostomos2016-08-041-8/+5
| | | | | | | | | | | | When miniperl calls csh to implement glob(), we clear %ENV temporarily to avoid csh dying on invalid values for things like LS_COLORS. That has proven to have far too many problems, since many system-dependent env vars are necessary for calling an external process. See the RT ticket for details. A better solution is temporarily to clear only those vars that are known to be problematic and make csh possibly fail. There only hap- pens to be one of those at present, namely LS_COLORS.
* croak on failure to close an in-place edit output fileTony Cook2016-03-171-1/+22
|
* Check against negative uid/gid for fchown().Jarkko Hietaniemi2016-02-071-1/+11
| | | | Coverity CID 135145: Argument cannot be negative (NEGATIVE_RETURNS)
* Ascertain that the fd for fcntl is not negativeJarkko Hietaniemi2015-10-231-1/+1
| | | | | | | Coverity id #45354 Since maxsysfd is I32 Coverity cannot prove that being larger than it means that the fd is non-negative.
* partial PL_statbuf removalDaniel Dragan2015-10-081-7/+9
| | | | | | | | | | | | | | | | Perl_nextargv has to have access to the Stat_t that is written to inside S_openn_cleanup or else run/switches.t, io/argv.t, io/inplace.t, and io/iprefix.t will fail. Removing the uses of PL_statbuf that are using PL_statbuf due to historical reason, and not using PL_statbuf to pass data between different funcs/different callstacks. This patch makes it easier to remove PL_statbuf in the future since the number uses of it has been reduced. -in Perl_apply move SETERRNO before tot--; so the branch can be combined with other "tot--;" branches by CC optmizer -combine 2 Perl_croak(aTHX_ "Illegal suidscript"); statements in S_validate_suid to make code look simpler, drop my_perl arg for space efficiency on threads of rarely executed code
* perlapi: Note another exception to given ruleKarl Williamson2015-10-061-1/+2
| | | | PERL_EXTERNAL_GLOB being defined also results in the described behavior.
* Remove VMS-specific bits of OP_KILL.Craig A. Berry2015-09-191-38/+1
| | | | | | | | | | | | | | | | The rationale for this change almost twenty years ago was that the "CRTL's emulation of Unix-style signals and kill()" couldn't send signals that got noticed by images running in supervisor mode. This hasn't been true of the CRTL for some time, and we haven't been using the CRTL's kill for a very long time either. So remove this once-but-no-longer-necessary hack. Experiments show that it is still possible to kill any process we want, assuming the signalling process has the necessary privileges (or owns the target process). TODO: implement killpg() -- if Win32 can do it, surely it's possible on VMS.
* amigaos4: move the amigaos exec code under amigaos4Andy Broad2015-09-161-36/+15
| | | | | | | | | | | | | | | | | Largely reimplements 839a9f02, 54fa14d7, e8432c63, 40262ff4. The upside is that now doio.c and pp_sys.c have much less AmigaOS specific ifdefs. As a downside, the exec code is now forked (pun only partially accidental.) The earlier story regarding fork+exec, that the AmigaOS creating thread doesn't terminate but instead continues running is both true and false. The more detailed story is that the user-observable behaviour is as with POSIX/UNIX. The thread that created the new "task" (to use the AmigaOS terms) does hang around -- but all it does is to wait for the new task to terminate, and more importantly, it holds on to the resources like filehandles. If the task were to immediately terminate, the resources would be reclaimed by the kernel.
* amigaos4: unlink of open/locked files will failAndy Broad2015-09-051-1/+29
|
* amigaos4: needs inplace edit backup fileAndy Broad2015-09-051-1/+1
| | | | Use __amigaos4__ define instead of AMIGAOS.
* amigaos4: special post-exec trick neededAndy Broad2015-09-051-10/+1
|
* amigaos4: exec returns I32Andy Broad2015-09-051-13/+40
| | | | | Unlike UNIXish fork-exec, in amigaos forking is more like starting a thread, the return code is more than a boolean.
* amigaos4: check that the errno indicates an errorAndy Broad2015-09-051-3/+8
|
* One more FD_CLOEXEC case, missed in 131d45a9.Jarkko Hietaniemi2015-08-261-6/+4
|
* Note that the all the fd flags are saved/restored.Jarkko Hietaniemi2015-08-261-5/+7
| | | | | FD_CLOEXEC is currently usually the only defined fd flag for F_GETFD/F_SETFD, but let's not assume that.
* perlapi: Use F<> around file namesKarl Williamson2015-08-011-1/+1
|
* lseek() SEEK_SET pos may not be negativeJarkko Hietaniemi2015-06-261-1/+4
| | | | Coverity CID 104832
* shmat id can be invalid.Jarkko Hietaniemi2015-06-261-1/+6
| | | | Coverity CID 104852.
* msgrcv id can be invalid.Jarkko Hietaniemi2015-06-261-1/+6
| | | | Coverity CID 104825.
* msgsnd id can be invalid.Jarkko Hietaniemi2015-06-261-1/+6
| | | | Coverity CID 104833.
* silence some gcc -pendantic warningsDavid Mitchell2015-06-191-2/+3
|
* [perl #125115] don't create file GLOB(...) when dupping a closed handleTony Cook2015-06-031-2/+5
|
* Replace common Emacs file-local variables with dir-localsDagfinn Ilmari Mannsåker2015-03-221-6/+0
| | | | | | | | | | | | | | | | An empty cpan/.dir-locals.el stops Emacs using the core defaults for code imported from CPAN. Committer's work: To keep t/porting/cmp_version.t and t/porting/utils.t happy, $VERSION needed to be incremented in many files, including throughout dist/PathTools. perldelta entry for module updates. Add two Emacs control files to MANIFEST; re-sort MANIFEST. For: RT #124119.
* [perl #123814] replace grok_atou with grok_atoUVHugo van der Sanden2015-03-091-2/+6
| | | | | | | | | | | | Some questions and loose ends: XXX gv.c:S_gv_magicalize - why are we using SSize_t for paren? XXX mg.c:Perl_magic_set - need appopriate error handling for $) XXX regcomp.c:S_reg - need to check if we do the right thing if parno was not grokked Perl_get_debug_opts should probably return something unsigned; not sure if that's something we can change.
* avoid C labels in column 0David Mitchell2015-01-211-2/+2
| | | | | | | | | Generally the guideline is to outdent C labels (e.g. 'foo:') 2 columns from the surrounding code. If the label starts at column zero, then it means that diffs, such as those generated by git, display the label rather than the function name at the head of a diff block: which makes diffs harder to peruse.
* optimize Perl_boot_core_UNIVERSAL and Perl_nextargvDaniel Dragan2014-11-071-1/+1
| | | | | | | | | | | Perl_nextargv fuse 2 tests into 1 Perl_boot_core_UNIVERSAL reorder instructions to avoid using a non-vol registers (save cv across the Safefree), not reread CV body * after Safefree. Compute address of CvFILE once. for Perl_boot_core_UNIVERSAL on VC 2003 before 0x66 bytes of 32 bit x86 machine code, after 0x61.
* [perl #57512] Warnings for implicitly closed handlesFather Chrysostomos2014-11-021-2/+15
| | | | | | | | | | | | | | | | | | If the implicit close() fails, warn about it, mentioning $! in the message. This is a default warning in the io category. We do this in two spots, sv_clear and gp_free. While sv_clear would be sufficient to get the warning emitted, the warning won’t contain the name of the handle when called from there, because lone IO thing- ies are nameless. Doing it also when a GV’s glob pointer is freed--as long as the IO thingy in there has a reference count of 1--allows the name to be included in the message, because we still have the glob, which is where the name is stored. The result: $ ./miniperl -Ilib -e 'open fh, ">/Volumes/Disk Image/foo"; print fh "x"x1000, "\n" for 1..50; undef *fh' Warning: unable to close filehandle fh properly: No space left on device at -e line 1.
* Have close() set $! and $^EFather Chrysostomos2014-11-021-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is what we used to get when close reported an error after a print failure (‘Disk Image’ is a small disk image I made): $ ./miniperl -Ilib -e 'open fh, ">/Volumes/Disk Image/foo"; print fh "x"x1000, "\n" for 1..50; unlink "ntoeuhnteo"; warn $!; close fh or die "error closing: $!"' No such file or directory at -e line 1. error closing: No such file or directory at -e line 1. Notice how the value of $! as set by unlink is still present after close fails. So that means after close returns false, you can’t depend on $! to have the reason for the failure, because it might come from an unrelated system call. Remove the ‘unlink’ statement and you get ‘No space left on device’. As of this commit, the output is more helpful: $ ./miniperl -Ilib -e 'open fh, ">/Volumes/Disk Image/foo"; print fh "x"x1000, "\n" for 1..50; unlink "ntoeuhnteo"; warn $!; close fh or die "error closing: $!"' No such file or directory at -e line 1. error closing: No space left on device at -e line 1. Three commits ago, I/O errors started recording the error number in the handle itself. Now ‘close’ restores $! and $^E to the values they were when the I/O error associated with the closed handle occurred. This is related to ticket #57512.
* cleanup perlio.c and doio.cDaniel Dragan2014-10-241-1/+0
| | | | | | | | | | IoIFP will be assigned to again in say_false block. This redundant code is from commit 6e21c824d9 perl 4.0 patch 6. in PerlIO_allocate replace a duplicate block with a goto in PerlIO_resolve_layers replace a func call with a macro, this couldn't have been using magic due to the previous SvROK
* [perl #122703] ensure $! is set when chmod() and utime() failTony Cook2014-10-221-0/+2
| | | | | | | When called with a closed file handle, neither chmod nor utime set errno when they failed, chown() did set errno, but this wasn't tested.
* Introduce the double-diamond operator <<>>Rafael Garcia-Suarez2014-09-301-3/+6
| | | | | | | | | | | This operator works like <> or <ARGV>, as it reads the list of file names to open from the command-line arguments. However, it disables the magic-open feature (that forks to execute piped commands) : $ bleadperl -e 'while(<>){print}' 'echo foo |' foo $ bleadperl -e 'while(<<>>){print}' 'echo foo |' Can't open echo foo |: No such file or directory at -e line 1.
* Use grok_atou instead of atoi.Jarkko Hietaniemi2014-07-221-1/+1
| | | | | Remaining atoi() uses include at least: ext/DynaLoader/dl_aix.xs, os2/os2.c, vms/vms.c
* Remove or downgrade unnecessary dVAR.Jarkko Hietaniemi2014-06-251-26/+0
| | | | | | | | You need to configure with g++ *and* -Accflags=-DPERL_GLOBAL_STRUCT or -Accflags=-DPERL_GLOBAL_STRUCT_PRIVATE to see any difference. (g++ does not do the "post-annotation" form of "unused".) The version code has some of these issues, reported upstream.
* Silence -Wunused-parameter my_perl under threads.Jarkko Hietaniemi2014-06-191-0/+6
| | | | | | | | | | | | | | For S_ functions, remove the context. For Perl_ functions, add PERL_UNUSED_CONTEXT. Tricky because sometimes depends on DEBUGGING, and sometimes on whether we are have PERL_IMPLICIT_SYS. (Why all the mathoms Perl_is_uni_... and Perl_is_utf8_... functions are not being whined about is a mystery.) vutil.c (included via util.c) has one of these, but it's cpan/, and a known problem: https://rt.cpan.org/Ticket/Display.html?id=96100
* Adding missing HEKfARG() invocationsBrian Fraser2014-06-131-2/+2
| | | | This silences a chunk of warnings under -Wformat
* 375ed12a broke Config::IniFilesJarkko Hietaniemi2014-06-031-2/+5
| | | | | | | | | ... among other things: https://rt.perl.org/Ticket/Display.html?id=122021 PerlIO::scalar (aka opening scalars for IO) has fileno of -1. This (and probably other exotic PerlIO objects which have funny fds) requires special care.
* Use PERL_UNUSED_RESULT.Jarkko Hietaniemi2014-06-021-8/+5
| | | | | | | (1) Enhance its description. (2) Simplify it: define only if has warn_unused_result. (3) Make it use STMT_START { ... } STMT_END to be less GNU-extensiony. (4) Redo 04783dc7 ("fix 'ignoring return value' compiler warnings") with it.
* Unify the "fall-through" lint annotation.Jarkko Hietaniemi2014-05-291-2/+2
| | | | | | | Used by linters (static checkers), and also good for human readers. Even though "FALL THROUGH" seems to be the most common, e.g BSD lint manual only knows "FALLTHROUGH" (or "FALLTHRU").
* fcntl receiving -1 from fileno, fcntl failing.Jarkko Hietaniemi2014-05-291-35/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Also very few spots of negative numgroups for getgroups(), and fgetc() return, but almost all checking is for fcntl.) (merged fix for perl #121743 and perl #121745: hopefully picked up all the fixes-to-fixes from the ticket...) Fix for Coverity perl5 CIDs 28990..29003,29005..29011,29013, 45354,45363,49926: Argument cannot be negative (NEGATIVE_RETURNS) fd is passed to a parameter that cannot be negative. and CIDs 29004, 29012: Argument cannot be negative (NEGATIVE_RETURNS) num_groups is passed to a parameter that cannot be negative and because of CIDs 29005 and 29006 also CID 28924. In the first set of issues a fd is retrieved from PerlIO_fileno, and that is then used in places like fstat(), fchown(), dup(), etc., without checking whether the fd is valid (>=0). In the second set of issues a potentially negative number is potentially passed to getgroups(). The CIDs 29005 and 29006 were a bit messy: fixing them needed also resolving CID 28924 where the return value of fstat() was ignored, and for completeness adding two croak calls (with perldiag updates): a bit of a waste since it's suidperl code.
* Hide the VMS error identifier SS$_NOPRIV, as customary.Jarkko Hietaniemi2014-05-281-1/+1
|
* [perl #121112] only warn if newline is the last non-NUL characterTony Cook2014-05-281-3/+3
|
* In Perl_nextargv(), move variable declarations into the blocks that use them.Nicholas Clark2014-03-191-8/+8
| | | | | This makes it clearer that variables don't hold values between iterations of the loop, and permits the variable sv to be made const.
* Simplify the code in Perl_nextargv().Nicholas Clark2014-03-191-21/+26
| | | | | | | | | Split the ternary that called Perl_do_open_raw() and Perl_do_open6() based on PL_inplace into two different if blocks, and merge these with the following code which is also conditional on PL_inplace. Remove the warning code from an else block and re-indent it, to make it clear that it is always called if control reaches the end of the while loop.
* Change core uses of Perl_do_openn() to Perl_do_open6() or Perl_do_open_raw().Nicholas Clark2014-03-191-9/+12
| | | | | | Calls to Perl_do_openn() all have at least 2 unused arguments which clutter the code and hinder easy understanding. Perl_do_open6() and Perl_do_open_raw() each only do one job, so don't have the dead arguments.