Change the signature of all the internal do_trans*() functions to return
Size_t rather than I32, so that the count returned by tr//// can cope with
strings longer than 2Gb.
S_do_trans_simple(pTHX_ SV * const sv)
{
S_do_trans_simple(pTHX_ SV * const sv)
{
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv,len);
U8 * const send = s+len;
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv,len);
U8 * const send = s+len;
S_do_trans_count(pTHX_ SV * const sv)
{
STRLEN len;
const U8 *s = (const U8*)SvPV_nomg_const(sv, len);
const U8 * const send = s + len;
S_do_trans_count(pTHX_ SV * const sv)
{
STRLEN len;
const U8 *s = (const U8*)SvPV_nomg_const(sv, len);
const U8 * const send = s + len;
const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_COUNT;
const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_COUNT;
S_do_trans_complex(pTHX_ SV * const sv)
{
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv, len);
U8 * const send = s+len;
S_do_trans_complex(pTHX_ SV * const sv)
{
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv, len);
U8 * const send = s+len;
const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_COMPLEX;
const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_COMPLEX;
S_do_trans_simple_utf8(pTHX_ SV * const sv)
{
U8 *s;
S_do_trans_simple_utf8(pTHX_ SV * const sv)
{
U8 *s;
U8 *d;
U8 *start;
U8 *dstart, *dend;
U8 *d;
U8 *start;
U8 *dstart, *dend;
const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
STRLEN len;
SV* const rv =
const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
STRLEN len;
SV* const rv =
S_do_trans_count_utf8(pTHX_ SV * const sv)
{
const U8 *s;
const U8 *start = NULL;
const U8 *send;
S_do_trans_count_utf8(pTHX_ SV * const sv)
{
const U8 *s;
const U8 *start = NULL;
const U8 *send;
STRLEN len;
SV* const rv =
#ifdef USE_ITHREADS
STRLEN len;
SV* const rv =
#ifdef USE_ITHREADS
S_do_trans_complex_utf8(pTHX_ SV * const sv)
{
U8 *start, *send;
U8 *d;
S_do_trans_complex_utf8(pTHX_ SV * const sv)
{
U8 *start, *send;
U8 *d;
const I32 squash = PL_op->op_private & OPpTRANS_SQUASH;
const I32 del = PL_op->op_private & OPpTRANS_DELETE;
const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
const I32 squash = PL_op->op_private & OPpTRANS_SQUASH;
const I32 del = PL_op->op_private & OPpTRANS_DELETE;
const I32 grows = PL_op->op_private & OPpTRANS_GROWS;
* Returns a count of number of characters translated
*/
* Returns a count of number of characters translated
*/
Perl_do_trans(pTHX_ SV *sv)
{
STRLEN len;
Perl_do_trans(pTHX_ SV *sv)
{
STRLEN len;
: Defined in doio.c, used only in pp_sys.c
pR |Off_t |do_tell |NN GV* gv
: Defined in doop.c, used only in pp.c
: Defined in doio.c, used only in pp_sys.c
pR |Off_t |do_tell |NN GV* gv
: Defined in doop.c, used only in pp.c
-p |I32 |do_trans |NN SV* sv
+p |Size_t |do_trans |NN SV* sv
: Used in my.c and pp.c
p |UV |do_vecget |NN SV* sv|STRLEN offset|int size
: Defined in doop.c, used only in mg.c (with /* XXX slurp this routine */)
: Used in my.c and pp.c
p |UV |do_vecget |NN SV* sv|STRLEN offset|int size
: Defined in doop.c, used only in mg.c (with /* XXX slurp this routine */)
p |void |init_constants
#if defined(PERL_IN_DOOP_C)
p |void |init_constants
#if defined(PERL_IN_DOOP_C)
-sR |I32 |do_trans_simple |NN SV * const sv
-sR |I32 |do_trans_count |NN SV * const sv
-sR |I32 |do_trans_complex |NN SV * const sv
-sR |I32 |do_trans_simple_utf8 |NN SV * const sv
-sR |I32 |do_trans_count_utf8 |NN SV * const sv
-sR |I32 |do_trans_complex_utf8 |NN SV * const sv
+sR |Size_t |do_trans_simple |NN SV * const sv
+sR |Size_t |do_trans_count |NN SV * const sv
+sR |Size_t |do_trans_complex |NN SV * const sv
+sR |Size_t |do_trans_simple_utf8 |NN SV * const sv
+sR |Size_t |do_trans_count_utf8 |NN SV * const sv
+sR |Size_t |do_trans_complex_utf8 |NN SV * const sv
#endif
#if defined(PERL_IN_GV_C)
#endif
#if defined(PERL_IN_GV_C)
- I32 i = do_trans(sv);
- mPUSHi(i);
+ Size_t i = do_trans(sv);
+ mPUSHi((UV)i);
#define PERL_ARGS_ASSERT_DO_TELL \
assert(gv)
#define PERL_ARGS_ASSERT_DO_TELL \
assert(gv)
-PERL_CALLCONV I32 Perl_do_trans(pTHX_ SV* sv);
+PERL_CALLCONV Size_t Perl_do_trans(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_DO_TRANS \
assert(sv)
PERL_CALLCONV UV Perl_do_vecget(pTHX_ SV* sv, STRLEN offset, int size);
#define PERL_ARGS_ASSERT_DO_TRANS \
assert(sv)
PERL_CALLCONV UV Perl_do_vecget(pTHX_ SV* sv, STRLEN offset, int size);
assert(gv); assert(mode); assert(saveifp); assert(saveofp); assert(savefd); assert(savetype)
#endif
#if defined(PERL_IN_DOOP_C)
assert(gv); assert(mode); assert(saveifp); assert(saveofp); assert(savefd); assert(savetype)
#endif
#if defined(PERL_IN_DOOP_C)
-STATIC I32 S_do_trans_complex(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_complex(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX \
assert(sv)
-STATIC I32 S_do_trans_complex_utf8(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_complex_utf8(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8 \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8 \
assert(sv)
-STATIC I32 S_do_trans_count(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_count(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COUNT \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COUNT \
assert(sv)
-STATIC I32 S_do_trans_count_utf8(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_count_utf8(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8 \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8 \
assert(sv)
-STATIC I32 S_do_trans_simple(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_simple(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE \
assert(sv)
-STATIC I32 S_do_trans_simple_utf8(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_simple_utf8(pTHX_ SV * const sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8 \
assert(sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8 \
assert(sv)