summaryrefslogtreecommitdiff
path: root/pp_pack.c
Commit message (Collapse)AuthorAgeFilesLines
* [perl #126325] don't read past the end of the source for pack [Hh]Tony Cook2015-11-111-1/+1
| | | | | With a utf8 target but a non-utf8 source, pack Hh would read past the end of the source when given a length, due to an incorrect condition.
* Various pods: Add C<> around many typed-as-is thingsKarl Williamson2015-09-031-8/+8
| | | | Removes 'the' in front of parameter names in some instances.
* [perl #125669] op/pack.t failures with PPC long double (double double) buildsSisyphus2015-08-201-1/+12
| | | | unpack '%65...' failures, to be more exact.
* pp_pack.c: Add commentKarl Williamson2015-08-011-1/+2
|
* packsizetables.c -> packsizetables.incJarkko Hietaniemi2015-07-221-1/+1
|
* pack('f', $NAN) must account for NAN_COMPARE_BROKEN platformsDaniel Dragan2015-05-201-0/+5
| | | | | | | VC6 was returning either packed float +inf or packed float -inf (I dont remember) instead of packed float NAN in t/op/infnan.t . This fixes #125203
* [perl #123971] fix long double pack padding on newer GCCTony Cook2015-04-101-0/+11
|
* 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.
* pp_pack.c: Silence compiler warningKarl Williamson2015-02-201-5/+5
| | | | | | | | | | | This was introduced by 9df874cdaa2f196cc11fbd7b82a85690c243eb9f in changing the name of some static functions. I didn't realize at the time that the function was defined in embed.fnc, as none of the others are, and it was always called with the S_ prefix form. Nor did I notice the compiler warnings. It turns out that the base name of this function is the same as a public function, so I've renamed it to have prefix 'S_my_'.
* [perl #123874] fix argument underflow for pack()Hugo van der Sanden2015-02-181-1/+1
| | | | | NEXTFROM() modified the item count while testing it, so the next use saw the count (of -1) as non-zero and ended up trying to write ~1 bytes.
* pp_pack.c: White-space onlyKarl Williamson2015-02-171-35/+35
| | | | | This outdents some code whose enclosing block was removed in the previous commit
* pp_pack.c: Rmv useless codeKarl Williamson2015-02-171-46/+6
| | | | | | | | As noted in the thread starting at http://nntp.perl.org/group/perl.perl5.porters/223366 and in the comments added in this commit, strings packed in 'u' format don't need any UTF-8ness special handling, so the code that did that can be removed.
* pp_pack.c: Refactor to remove #if EBCDICKarl Williamson2015-02-171-14/+7
| | | | | This commit causes the same code to be executed whether on an ASCII or EBCDIC platform.
* pp_pack.c: Change name of some static functionsKarl Williamson2015-02-171-24/+24
| | | | | Early code tends to conflate the terms Unicode and UTF-8. I find that confusing.
* pack(): avoid << of negative valuesDavid Mitchell2014-12-311-4/+4
| | | | | | | | | | Treat the string as U8* rather than char* when doing all the bit shifts for uuencode. That stops these warnings under ASan: pp_pack.c:1890:34: runtime error: left shift of negative value -127 pp_pack.c:1891:34: runtime error: left shift of negative value -126 pp_pack.c:1899:34: runtime error: left shift of negative value -1 pp_pack.c:1900:30: runtime error: left shift of negative value -31
* fix undefined float behaviour in pack('f')David Mitchell2014-12-311-1/+4
| | | | | | | | | | | | | | | | | | | | | The C standard says that the value of the expression (float)double_var is undefined if 'the value being converted is outside the range of values that can be represented'. So to shut up -fsanitize=undefined: my $p = pack 'f', 1.36514538e67; giving runtime error: value 1.36515e+67 is outside the range of representable values of type 'float' explicitly handle the out of range values. Something similar is already done under defined(VMS) && !defined(_IEEE_FP), except that there it floors to +/- FLT_MAX rather than +/- (float)NV_INF. I don't know which branch is best, and whether they should be merged. This fix was suggested by Aaron Crane.
* Don’t do string overloading for numeric pack fmtsFather Chrysostomos2014-12-101-3/+8
| | | | See <20141130160250.GC31019@pjcj.net>. Commit 354b74ae6f broke this.
* pp_pack.c: Make pack('U', 0x41) eq 'A'Karl Williamson2014-11-241-4/+10
| | | | The 'U' pack/unpack format must be in terms of Unicode code points.
* pp_pack.c: Add commentKarl Williamson2014-11-241-1/+1
|
* Fix double FETCH with pack "w"Father Chrysostomos2014-09-271-2/+2
|
* pp_pack.c: Actually fix threaded buildsFather Chrysostomos2014-09-271-1/+1
|
* pp_pack.c: S_sv_check_inf =~ /$/nan/Father Chrysostomos2014-09-271-4/+4
| | | | At Jarkko Hietaniemi’s suggestion.
* Oops. Fix threaded builds.Father Chrysostomos2014-09-271-1/+1
|
* [perl #12285] Fix str vs num inf/nan treatmentFather Chrysostomos2014-09-271-40/+42
| | | | | | | sprintf, pack and chr were treating 0+"Inf" and "Inf" differently, even though they have the same string and numeric values. pack was also croaking for 0+"Inf" passed to a string format.
* infnan: in pack, first test for the unlikely infnan-ness.Jarkko Hietaniemi2014-09-251-7/+10
| | | | Also make the type I32, not char.
* infnan: perldiag entries fixing, add "in pack" to one message.Jarkko Hietaniemi2014-09-251-1/+1
|
* Make pack-as-int/sprintf-%c-ing/chr-ring inf/nan fatal.Jarkko Hietaniemi2014-09-231-24/+18
| | | | | | | | | | | | In pack: No point in trying to return all-bit-off/all-bits-one because inf/-inf/nan really don't map sensibly into integers. In printf-%c/chr: while U+FFFD would be an option, better to die on such weird input. pack-as-fp still works, sprintf-numeric still works. Make t/op/infnan.t to be less fragile about the number of expected tests.
* No point in pack 'w' for inf/nan.Jarkko Hietaniemi2014-09-221-1/+6
| | | | (For inf, the existing code already did this, slowly.)
* Missing "by" noticed by James Keenan.Jarkko Hietaniemi2014-09-211-1/+1
|
* Comments on unpack 'D' and long doubles formats.Jarkko Hietaniemi2014-09-211-0/+12
|
* pack c/C on inf/nan.Jarkko Hietaniemi2014-08-271-2/+17
| | | | | | | Made them return the 0xFF byte (and warn). Not necessarily the best choice, but there's not that much room in just 256 bytes for all of the inf/-inf/nan. This same choice will need to be made with wider integer packs.
* Remove or downgrade unnecessary dVAR.Jarkko Hietaniemi2014-06-251-6/+2
| | | | | | | | 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.
* Revert "/* NOTREACHED */ belongs *before* the unreachable."Jarkko Hietaniemi2014-06-191-2/+1
| | | | | | This reverts commit 148f39b7de6eae9ddd59e0b0aff691d6abea7aca. (Still needs more work, but wanted to see how well this passed with Jenkins.)
* /* NOTREACHED */ belongs *before* the unreachable.Jarkko Hietaniemi2014-06-191-1/+2
| | | | | | Definitely not *after* it. It marks the start of the unreachable, not the first unrechable line. And if they are in that order, it looks better to linebreak after the lint hint.
* Some low-hanging -Wunreachable-code fruits.Jarkko Hietaniemi2014-06-151-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | - after return/croak/die/exit, return/break are pointless (break is not a terminator/separator, it's a goto) - after goto, another goto (!) is pointless - in some cases (usually function ends) introduce explicit NOT_REACHED to make the noreturn nature clearer (do not do this everywhere, though, since that would mean adding NOT_REACHED after every croak) - for the added NOT_REACHED also add /* NOTREACHED */ since NOT_REACHED is for gcc (and VC), while the comment is for linters - declaring variables in switch blocks is just too fragile: it kind of works for narrowing the scope (which is nice), but breaks the moment there are initializations for the variables (the initializations will be skipped since the flow will bypass the start of the block); in some easy cases simply hoist the declarations out of the block and move them earlier Note 1: Since after this patch the core is not yet -Wunreachable-code clean, not enabling that via cflags.SH, one needs to -Accflags=... it. Note 2: At least with the older gcc 4.4.7 there are far too many "unreachable code" warnings, which seem to go away with gcc 4.8, maybe better flow control analysis. Therefore, the warning should eventually be enabled only for modernish gccs (what about clang and Intel cc?)
* Revert "Some low-hanging -Wunreachable-code fruits."Jarkko Hietaniemi2014-06-131-7/+7
| | | | | | | This reverts commit 8c2b19724d117cecfa186d044abdbf766372c679. I don't understand - smoke-me came back happy with three separate reports... oh well, some other time.
* Some low-hanging -Wunreachable-code fruits.Jarkko Hietaniemi2014-06-131-7/+7
| | | | | | | | | | | | | | | | | | - after croak/die/exit (or return), break (or return!) are pointless (break is not a terminator/separator, it's a promise of a jump) - after goto, another goto (!) is pointless - in some cases (usually function ends) introduce explicit NOT_REACHED to make the noreturn nature clearer (do not do this everywhere, though, since that would mean adding NOT_REACHED after every croak) - for the added NOT_REACHED also add /* NOTREACHED */ since NOT_REACHED is for gcc (and VC), while the comment is for linters - declaring variables in switch blocks is just too fragile: it kind of works for narrowing the scope (which is nice), but breaks the moment there are initializations for the variables (they will be skipped!); in some easy cases simply hoist the declarations out of the block and move them earlier There are still a few places left.
* perlapi: Refactor placements, headings of some functionsKarl Williamson2014-06-051-0/+3
| | | | | | | | | | | | | | It is not very user friendly to list functions as "Functions found in file FOO". Better is to group them by purpose, as many were already. I went through and placed the ones that weren't already so grouped into groups. Patches welcome if you have a better classification. I changed the headings of some so that the important disctinction was the first word so that they are placed in the file more appropriately. And a couple of ones that I had created myself, I came up with a name that I think is better than the original
* Unify the "fall-through" lint annotation.Jarkko Hietaniemi2014-05-291-14/+14
| | | | | | | 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").
* Quad_t and Uquad_t cannot unpack as NVs.Jarkko Hietaniemi2014-05-291-6/+4
| | | | | | | | | | | If IVSIZE >= 8, a Quad_t is always >= IV_MIN, and <= IV_MAX, and an Uquad_t is always (>= 0 aka UV_MIN and) <= UV_MAX; they cannot escape their quadness and be NVs. (This logic may fail if Quad_t is not 8 bytes, but then other things would no doubt fail.) Also tighten the logic by adding HAS_QUAD, also for the pack case. Fix for Coverity perl5 CID 28942.
* perlapi: Consistent spaces after dotsFather Chrysostomos2013-12-291-1/+1
| | | | plus some typo fixes. I probably changed some things in perlintern, too.
* Use IVSIZE not HAS_QUAD to enable 'q' and 'Q' formats in pack.Nicholas Clark2013-09-171-4/+4
| | | | | | | | | | | Whilst the code for 'q' and 'Q' in pp_pack is itself well behaved if enabled on a perl with 32 bit IVs (using SvNV instead of SvIV and SvUV), the regression tests are not. Several tests use an eval of "pack 'q'" to determine if 64 bit integer support is available (instead of $Config{ivsize}), and t/op/pack.t fails many tests. While these could be fixed (or skipped), unfortunately the approach of evaling "pack 'q'" is fairly popular on CPAN, so the breakage isn't just in the perl core, and might also be present in code we can't see or submit patches for.
* Use separate macros for byte vs uv UnicodeKarl Williamson2013-09-101-1/+1
| | | | | | | This removes a macro not yet even in a development release, and splits its calls into two classes: those where the input is a byte; and those where it can be any unsigned integer. The byte implementation avoids a function call on EBCDIC platforms.
* Convert some uvuni() to uvchr()Karl Williamson2013-08-291-7/+7
| | | | | All the tables are now based on the native character set, so using uvuni() in almost all cases is wrong.
* Extract common code to an inline functionKarl Williamson2013-08-291-14/+2
| | | | | This fairly short paradigm is repeated in several places; a later commit will improve it.
* Annotate the "cold" paths in pp_pack.c with UNLIKELY().Nicholas Clark2013-05-201-7/+7
| | | | The usual case is nice regular bytes in the host's nice regular order.
* When endian-swapping in pack, simply copy the bytes in reverse order.Nicholas Clark2013-05-201-72/+64
| | | | | This should restore support for big endian Crays. It doesn't support mixed-endian systems.
* Pass 'needs_swap' as a parameter to SHIFT_BYTES.Nicholas Clark2013-05-201-29/+32
| | | | | | | It feels wrong to have it as an implicit parameter sucked in via the textual expansion of the macro. Whilst it can be derived from the parameter 'datumtype', it seems that the C compiler generates a lot less efficient code that way.
* When endian-swapping in unpack, simply copy the bytes in reverse order.Nicholas Clark2013-05-201-6/+26
| | | | | | | | | | | It is considerably simpler to re-order the bytes before reading them into the variable of the desired type, than to read into the variable and then need a specialised "reverse this integer" function for each size of integer. This should restore support for big endian Crays. It doesn't support mixed-endian systems. Support for mixed-endian systems can be restored (if needed) by re-ordering the bytes correctly at the locations which currently only know how to reverse the bytes.
* Fold the implementation of DO_BO_UNPACK into SHIFT_BYTES(), its only user.Nicholas Clark2013-05-201-29/+3
|