From eb6f169d018d5fbf1ab1ae22a7af8c595bbc86e2 Mon Sep 17 00:00:00 2001 From: Leon Timmermans Date: Sat, 22 Mar 2025 15:19:31 +0100 Subject: [PATCH] Split PV typemap into mutable and immutable --- cpan/Compress-Raw-Zlib/Zlib.xs | 8 +-- .../lib/Compress/Raw/Zlib.pm | 2 +- cpan/DB_File/DB_File.pm | 2 +- cpan/DB_File/DB_File.xs | 8 +-- cpan/Socket/Socket.pm | 2 +- cpan/Socket/Socket.xs | 2 +- ext/DynaLoader/DynaLoader_pm.PL | 2 +- ext/DynaLoader/dl_aix.xs | 6 +-- ext/DynaLoader/dl_dllload.xs | 6 +-- ext/DynaLoader/dl_dlopen.xs | 6 +-- ext/DynaLoader/dl_dyld.xs | 6 +-- ext/DynaLoader/dl_freemint.xs | 6 +-- ext/DynaLoader/dl_hpux.xs | 6 +-- ext/DynaLoader/dl_vms.xs | 6 +-- ext/DynaLoader/dl_win32.xs | 6 +-- ext/GDBM_File/GDBM_File.pm | 2 +- ext/GDBM_File/GDBM_File.xs | 16 +++--- ext/NDBM_File/NDBM_File.pm | 2 +- ext/NDBM_File/NDBM_File.xs | 6 +-- ext/ODBM_File/ODBM_File.pm | 2 +- ext/ODBM_File/ODBM_File.xs | 6 +-- ext/POSIX/POSIX.xs | 20 +++---- ext/POSIX/lib/POSIX.pm | 2 +- ext/SDBM_File/SDBM_File.pm | 2 +- ext/SDBM_File/SDBM_File.xs | 10 ++-- ext/XS-APItest/APItest.pm | 2 +- ext/XS-APItest/APItest.xs | 54 +++++++++---------- ext/XS-Typemap/Typemap.pm | 2 +- ext/XS-Typemap/Typemap.xs | 12 ++++- lib/ExtUtils/typemap | 13 +++-- 30 files changed, 121 insertions(+), 104 deletions(-) diff --git a/cpan/Compress-Raw-Zlib/Zlib.xs b/cpan/Compress-Raw-Zlib/Zlib.xs index c9a07a7c6102..50891c07ff04 100644 --- a/cpan/Compress-Raw-Zlib/Zlib.xs +++ b/cpan/Compress-Raw-Zlib/Zlib.xs @@ -2262,15 +2262,17 @@ getLastBufferOffset(s) RETVAL void -resetLastBlockByte(s, byte) +resetLastBlockByte(s, byte_sv) Compress::Raw::Zlib::inflateScanStream s - unsigned char* byte + SV* byte_sv CODE: #ifndef MAGIC_APPEND croak("resetLastBlockByte needs zlib 1.2.1 or better"); #else - if (byte != NULL) + if (SvOK(byte_sv)) { + unsigned char* byte = (unsigned char*)SvPV_force_nolen(byte_sv); *byte = *byte ^ (1 << ((8 - s->window_lastbit) & 7)); + } #endif diff --git a/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm b/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm index d81f48d69f24..060796f12cac 100644 --- a/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm +++ b/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm @@ -10,7 +10,7 @@ use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS); -$VERSION = '2.213'; +$VERSION = '2.214'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; diff --git a/cpan/DB_File/DB_File.pm b/cpan/DB_File/DB_File.pm index 351b5d9ca9af..bd5c6d95c7c6 100644 --- a/cpan/DB_File/DB_File.pm +++ b/cpan/DB_File/DB_File.pm @@ -165,7 +165,7 @@ use Carp; # Module not thread safe, so don't clone sub CLONE_SKIP { 1 } -$VERSION = "1.859" ; +$VERSION = "1.860" ; $VERSION = eval $VERSION; # needed for dev releases { diff --git a/cpan/DB_File/DB_File.xs b/cpan/DB_File/DB_File.xs index 5b01ed5b6ca5..49860fd8164c 100644 --- a/cpan/DB_File/DB_File.xs +++ b/cpan/DB_File/DB_File.xs @@ -1578,10 +1578,10 @@ BOOT: DB_File db_DoTie_(isHASH, dbtype, name=undef, flags=O_CREAT|O_RDWR, mode=0666, type=DB_HASH) - int isHASH - char * dbtype - int flags - int mode + int isHASH + const char * dbtype + int flags + int mode CODE: { char * name = (char *) NULL ; diff --git a/cpan/Socket/Socket.pm b/cpan/Socket/Socket.pm index daf4d64b0d90..1d8e02386d7a 100644 --- a/cpan/Socket/Socket.pm +++ b/cpan/Socket/Socket.pm @@ -3,7 +3,7 @@ package Socket; use v5.6.1; use strict; -our $VERSION = '2.038'; +our $VERSION = '2.039'; =head1 NAME diff --git a/cpan/Socket/Socket.xs b/cpan/Socket/Socket.xs index 1bd52a14c078..bab0eb2ff650 100644 --- a/cpan/Socket/Socket.xs +++ b/cpan/Socket/Socket.xs @@ -776,7 +776,7 @@ BOOT: void inet_aton(host) - char * host + const char * host CODE: { #ifdef HAS_GETADDRINFO diff --git a/ext/DynaLoader/DynaLoader_pm.PL b/ext/DynaLoader/DynaLoader_pm.PL index 5506dd315e40..ebe3b08f3ecd 100644 --- a/ext/DynaLoader/DynaLoader_pm.PL +++ b/ext/DynaLoader/DynaLoader_pm.PL @@ -90,7 +90,7 @@ package DynaLoader; # Tim.Bunce@ig.co.uk, August 1994 BEGIN { - our $VERSION = '1.57'; + our $VERSION = '1.58'; } # Note: in almost any other piece of code "our" would have been a better diff --git a/ext/DynaLoader/dl_aix.xs b/ext/DynaLoader/dl_aix.xs index c61d34bdb2ff..675606d2c1c7 100644 --- a/ext/DynaLoader/dl_aix.xs +++ b/ext/DynaLoader/dl_aix.xs @@ -692,7 +692,7 @@ BOOT: void dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: void *retv; @@ -724,7 +724,7 @@ dl_unload_file(libref) void dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: void *retv; @@ -751,7 +751,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_dllload.xs b/ext/DynaLoader/dl_dllload.xs index bf6126395164..6e419486da5c 100644 --- a/ext/DynaLoader/dl_dllload.xs +++ b/ext/DynaLoader/dl_dllload.xs @@ -109,7 +109,7 @@ BOOT: void dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: int mode = 0; @@ -144,7 +144,7 @@ dl_unload_file(libref) void dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: void *retv; @@ -175,7 +175,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename PPCODE: diff --git a/ext/DynaLoader/dl_dlopen.xs b/ext/DynaLoader/dl_dlopen.xs index 0ca89981b4e6..c23b57c312f4 100644 --- a/ext/DynaLoader/dl_dlopen.xs +++ b/ext/DynaLoader/dl_dlopen.xs @@ -173,7 +173,7 @@ BOOT: SV * dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: int mode = RTLD_LAZY; @@ -234,7 +234,7 @@ dl_unload_file(libref) SV * dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: void *sym; @@ -269,7 +269,7 @@ dl_undef_symbols() SV * dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_dyld.xs b/ext/DynaLoader/dl_dyld.xs index 8bf2a8c6c740..ada1c04a195d 100644 --- a/ext/DynaLoader/dl_dyld.xs +++ b/ext/DynaLoader/dl_dyld.xs @@ -156,7 +156,7 @@ BOOT: void * dl_load_file(filename, flags=0) - char * filename + const char * filename int flags CODE: DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); @@ -174,7 +174,7 @@ dl_load_file(filename, flags=0) void * dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err CODE: symbolname = Perl_form_nocontext("_%s", symbolname); @@ -202,7 +202,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_freemint.xs b/ext/DynaLoader/dl_freemint.xs index 8e36befb53c6..979cdaedd9f0 100644 --- a/ext/DynaLoader/dl_freemint.xs +++ b/ext/DynaLoader/dl_freemint.xs @@ -88,7 +88,7 @@ BOOT: void dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: int dlderr,x,max; @@ -147,7 +147,7 @@ haverror: void dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: void *retv; @@ -183,7 +183,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_hpux.xs b/ext/DynaLoader/dl_hpux.xs index 88e6dbddc414..1162892e0093 100644 --- a/ext/DynaLoader/dl_hpux.xs +++ b/ext/DynaLoader/dl_hpux.xs @@ -55,7 +55,7 @@ BOOT: void dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: shl_t obj = NULL; @@ -120,7 +120,7 @@ dl_unload_file(libref) void dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: shl_t obj = (shl_t) libhandle; @@ -162,7 +162,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_vms.xs b/ext/DynaLoader/dl_vms.xs index 03212f95828c..edf43889f08c 100644 --- a/ext/DynaLoader/dl_vms.xs +++ b/ext/DynaLoader/dl_vms.xs @@ -159,7 +159,7 @@ BOOT: SV * dl_expandspec(filespec) - char * filespec + const char * filespec CODE: char vmsspec[NAM$C_MAXRSS], defspec[NAM$C_MAXRSS]; size_t deflen; @@ -222,7 +222,7 @@ dl_expandspec(filespec) SV * dl_load_file(filename, flags=0) - char * filename + const char * filename int flags PREINIT: dTHX; @@ -345,7 +345,7 @@ dl_undef_symbols() SV * dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/DynaLoader/dl_win32.xs b/ext/DynaLoader/dl_win32.xs index 32249c9d2ab5..157f948aa405 100644 --- a/ext/DynaLoader/dl_win32.xs +++ b/ext/DynaLoader/dl_win32.xs @@ -118,7 +118,7 @@ BOOT: void dl_load_file(filename,flags=0) - char * filename + const char * filename #flags is unused SV * flags = NO_INIT PREINIT: @@ -160,7 +160,7 @@ dl_unload_file(libref) void dl_find_symbol(libhandle, symbolname, ign_err=0) void * libhandle - char * symbolname + const char * symbolname int ign_err PREINIT: void *retv; @@ -186,7 +186,7 @@ dl_undef_symbols() void dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name + const char * perl_name void * symref const char * filename CODE: diff --git a/ext/GDBM_File/GDBM_File.pm b/ext/GDBM_File/GDBM_File.pm index 45a1a93cd5d3..3020b7c41b53 100644 --- a/ext/GDBM_File/GDBM_File.pm +++ b/ext/GDBM_File/GDBM_File.pm @@ -733,7 +733,7 @@ require XSLoader; ); # This module isn't dual life, so no need for dev version numbers. -$VERSION = '1.24'; +$VERSION = '1.25'; our $gdbm_errno; diff --git a/ext/GDBM_File/GDBM_File.xs b/ext/GDBM_File/GDBM_File.xs index 27e3fe44e49c..1f4f9efb6b9b 100644 --- a/ext/GDBM_File/GDBM_File.xs +++ b/ext/GDBM_File/GDBM_File.xs @@ -312,8 +312,8 @@ gdbm_GDBM_version(package) GDBM_File gdbm_TIEHASH(dbtype, name, read_write, mode) - char * dbtype - char * name + const char * dbtype + const char * name int read_write int mode PREINIT: @@ -684,7 +684,7 @@ gdbm_count(db) void gdbm_dump(db, filename, ...) GDBM_File db - char * filename + const char * filename PREINIT: int format = GDBM_DUMP_FMT_ASCII; int flags = GDBM_WRCREAT; @@ -725,7 +725,7 @@ gdbm_dump(db, filename, ...) void gdbm_load(db, filename, ...) GDBM_File db - char * filename + const char * filename PREINIT: int flag = GDBM_INSERT; int meta_mask = 0; @@ -1012,8 +1012,8 @@ gdbm_convert(db, flag) int gdbm_failure_atomic(db, even, odd) GDBM_File db - char * even - char * odd + const char * even + const char * odd INIT: CHECKDB(db); CLEANUP: @@ -1023,8 +1023,8 @@ gdbm_failure_atomic(db, even, odd) void gdbm_latest_snapshot(package, even, odd) - char * even - char * odd + const char * even + const char * odd INIT: int result; int syserr; diff --git a/ext/NDBM_File/NDBM_File.pm b/ext/NDBM_File/NDBM_File.pm index f06596f74ee5..8e3b51636d31 100644 --- a/ext/NDBM_File/NDBM_File.pm +++ b/ext/NDBM_File/NDBM_File.pm @@ -7,7 +7,7 @@ require Tie::Hash; require XSLoader; our @ISA = qw(Tie::Hash); -our $VERSION = "1.18"; +our $VERSION = "1.19"; XSLoader::load(); diff --git a/ext/NDBM_File/NDBM_File.xs b/ext/NDBM_File/NDBM_File.xs index a467953cddaf..c65c9c56b75a 100644 --- a/ext/NDBM_File/NDBM_File.xs +++ b/ext/NDBM_File/NDBM_File.xs @@ -60,8 +60,8 @@ MODULE = NDBM_File PACKAGE = NDBM_File PREFIX = ndbm_ NDBM_File ndbm_TIEHASH(dbtype, filename, flags, mode) - char * dbtype - char * filename + const char * dbtype + const char * filename int flags int mode CODE: @@ -69,7 +69,7 @@ ndbm_TIEHASH(dbtype, filename, flags, mode) DBM * dbp ; RETVAL = NULL ; - if ((dbp = dbm_open(filename, flags, mode))) { + if ((dbp = dbm_open((char*)filename, flags, mode))) { RETVAL = (NDBM_File)safecalloc(1, sizeof(NDBM_File_type)); RETVAL->dbp = dbp ; } diff --git a/ext/ODBM_File/ODBM_File.pm b/ext/ODBM_File/ODBM_File.pm index 8d245fbd7b75..0515d996fb33 100644 --- a/ext/ODBM_File/ODBM_File.pm +++ b/ext/ODBM_File/ODBM_File.pm @@ -7,7 +7,7 @@ require Tie::Hash; require XSLoader; our @ISA = qw(Tie::Hash); -our $VERSION = "1.20"; +our $VERSION = "1.21"; XSLoader::load(); diff --git a/ext/ODBM_File/ODBM_File.xs b/ext/ODBM_File/ODBM_File.xs index 2675f7e9e33d..fd46a96d710c 100644 --- a/ext/ODBM_File/ODBM_File.xs +++ b/ext/ODBM_File/ODBM_File.xs @@ -88,8 +88,8 @@ BOOT: ODBM_File odbm_TIEHASH(dbtype, filename, flags, mode) - char * dbtype - char * filename + const char * dbtype + const char * filename int flags int mode CODE: @@ -135,7 +135,7 @@ odbm_TIEHASH(dbtype, filename, flags, mode) if (!opened) croak("ODBM_FILE: Can't open %s", filename); } - dbp = (void*)(dbminit(filename) >= 0 ? &dbmrefcnt : 0); + dbp = (void*)(dbminit((char*)filename) >= 0 ? &dbmrefcnt : 0); RETVAL = (ODBM_File)safecalloc(1, sizeof(ODBM_File_type)); RETVAL->dbp = dbp ; } diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index 2a8feae40487..a062f701334f 100644 --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@ -2060,7 +2060,7 @@ WEXITSTATUS(status) SysRet open(filename, flags = O_RDONLY, mode = 0666) - char * filename + const char * filename int flags Mode_t mode CODE: @@ -3174,7 +3174,7 @@ uname() SysRet write(fd, buffer, nbytes) POSIX::Fd fd - char * buffer + const char * buffer size_t nbytes void @@ -3325,8 +3325,8 @@ wctomb(s, wchar) int strcoll(s1, s2) - char * s1 - char * s2 + const char * s1 + const char * s2 CODE: CHECK_AND_WARN_PROBLEMATIC_LOCALE_; LC_COLLATE_LOCK; @@ -3337,7 +3337,7 @@ strcoll(s1, s2) void strtod(str) - char * str + const char * str PREINIT: double num; char *unparsed; @@ -3359,7 +3359,7 @@ strtod(str) void strtold(str) - char * str + const char * str PREINIT: long double num; char *unparsed; @@ -3381,7 +3381,7 @@ strtold(str) void strtol(str, base = 0) - char * str + const char * str int base PREINIT: long num; @@ -3460,7 +3460,7 @@ strxfrm(src) SysRet mkfifo(filename, mode) - char * filename + const char * filename Mode_t mode ALIAS: access = 1 @@ -3680,7 +3680,7 @@ fpathconf(fd, name) SysRetLong pathconf(filename, name) - char * filename + const char * filename int name SysRet @@ -3725,7 +3725,7 @@ SysRet lchown(uid, gid, path) Uid_t uid Gid_t gid - char * path + const char * path CODE: #ifdef HAS_LCHOWN /* yes, the order of arguments is different, diff --git a/ext/POSIX/lib/POSIX.pm b/ext/POSIX/lib/POSIX.pm index 688b2c08758c..48abaf971d02 100644 --- a/ext/POSIX/lib/POSIX.pm +++ b/ext/POSIX/lib/POSIX.pm @@ -4,7 +4,7 @@ use warnings; our ($AUTOLOAD, %SIGRT); -our $VERSION = '2.23'; +our $VERSION = '2.24'; require XSLoader; diff --git a/ext/SDBM_File/SDBM_File.pm b/ext/SDBM_File/SDBM_File.pm index 6ba1ab8aadfd..dae9a1c9a067 100644 --- a/ext/SDBM_File/SDBM_File.pm +++ b/ext/SDBM_File/SDBM_File.pm @@ -7,7 +7,7 @@ require Tie::Hash; require XSLoader; our @ISA = qw(Tie::Hash); -our $VERSION = "1.17"; +our $VERSION = "1.18"; our @EXPORT_OK = qw(PAGFEXT DIRFEXT PAIRMAX); use Exporter "import"; diff --git a/ext/SDBM_File/SDBM_File.xs b/ext/SDBM_File/SDBM_File.xs index 0df2855a21aa..04f09b9b0223 100644 --- a/ext/SDBM_File/SDBM_File.xs +++ b/ext/SDBM_File/SDBM_File.xs @@ -33,21 +33,21 @@ PROTOTYPES: DISABLE SDBM_File sdbm_TIEHASH(dbtype, filename, flags, mode, pagname=NULL) - char * dbtype - char * filename + const char * dbtype + const char * filename int flags int mode - char * pagname + const char * pagname CODE: { DBM * dbp ; RETVAL = NULL ; if (pagname == NULL) { - dbp = sdbm_open(filename, flags, mode); + dbp = sdbm_open((char*)filename, flags, mode); } else { - dbp = sdbm_prep(filename, pagname, flags, mode); + dbp = sdbm_prep((char*)filename, (char*)pagname, flags, mode); } if (dbp) { RETVAL = (SDBM_File)safecalloc(1, sizeof(SDBM_File_type)); diff --git a/ext/XS-APItest/APItest.pm b/ext/XS-APItest/APItest.pm index 085e6dc2117e..35d4c34e8b3b 100644 --- a/ext/XS-APItest/APItest.pm +++ b/ext/XS-APItest/APItest.pm @@ -4,7 +4,7 @@ use strict; use warnings; use Carp; -our $VERSION = '1.41'; +our $VERSION = '1.42'; require XSLoader; diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs index 69561db6a106..7773268816b2 100644 --- a/ext/XS-APItest/APItest.xs +++ b/ext/XS-APItest/APItest.xs @@ -1662,7 +1662,7 @@ test_utf8_to_bytes(bytes, len) AV * test_utf8n_to_uvchr_msgs(s, len, flags) - char *s + const char *s STRLEN len U32 flags PREINIT: @@ -1702,7 +1702,7 @@ test_utf8n_to_uvchr_msgs(s, len, flags) AV * test_utf8n_to_uvchr_error(s, len, flags) - char *s + const char *s STRLEN len U32 flags PREINIT: @@ -2788,7 +2788,7 @@ call_sv(sv, flags, ...) void call_pv(subname, flags, ...) - char* subname + const char* subname I32 flags PREINIT: I32 i; @@ -2805,7 +2805,7 @@ call_pv(subname, flags, ...) void call_argv(subname, flags, ...) - char* subname + const char* subname I32 flags PREINIT: I32 i; @@ -2834,7 +2834,7 @@ call_argv_cleanup() void call_method(methname, flags, ...) - char* methname + const char* methname I32 flags PREINIT: I32 i; @@ -6620,7 +6620,7 @@ test_isPSXSPC_LC_utf8(U8 * p, int type) RETVAL STRLEN -test_UTF8_IS_REPLACEMENT(char *s, STRLEN len) +test_UTF8_IS_REPLACEMENT(const char *s, STRLEN len) CODE: RETVAL = UTF8_IS_REPLACEMENT(s, s + len); OUTPUT: @@ -6669,7 +6669,7 @@ test_UVCHR_SKIP(UV ord) RETVAL UV -test_UTF8_SKIP(char * ch) +test_UTF8_SKIP(const char * ch) CODE: RETVAL = UTF8_SKIP(ch); OUTPUT: @@ -6718,35 +6718,35 @@ test_isUTF8_POSSIBLY_PROBLEMATIC(char ch) RETVAL STRLEN -test_isUTF8_CHAR(char *s, STRLEN len) +test_isUTF8_CHAR(const char *s, STRLEN len) CODE: RETVAL = isUTF8_CHAR((U8 *) s, (U8 *) s + len); OUTPUT: RETVAL STRLEN -test_isUTF8_CHAR_flags(char *s, STRLEN len, U32 flags) +test_isUTF8_CHAR_flags(const char *s, STRLEN len, U32 flags) CODE: RETVAL = isUTF8_CHAR_flags((U8 *) s, (U8 *) s + len, flags); OUTPUT: RETVAL STRLEN -test_isSTRICT_UTF8_CHAR(char *s, STRLEN len) +test_isSTRICT_UTF8_CHAR(const char *s, STRLEN len) CODE: RETVAL = isSTRICT_UTF8_CHAR((U8 *) s, (U8 *) s + len); OUTPUT: RETVAL STRLEN -test_isC9_STRICT_UTF8_CHAR(char *s, STRLEN len) +test_isC9_STRICT_UTF8_CHAR(const char *s, STRLEN len) CODE: RETVAL = isC9_STRICT_UTF8_CHAR((U8 *) s, (U8 *) s + len); OUTPUT: RETVAL IV -test_is_utf8_valid_partial_char_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_valid_partial_char_flags(const char *s, STRLEN len, U32 flags) CODE: /* RETVAL should be bool (here and in tests below), but making it IV * allows us to test it returning 0 or 1 */ @@ -6755,7 +6755,7 @@ test_is_utf8_valid_partial_char_flags(char *s, STRLEN len, U32 flags) RETVAL IV -test_is_utf8_string(char *s, STRLEN len) +test_is_utf8_string(const char *s, STRLEN len) CODE: RETVAL = is_utf8_string((U8 *) s, len); OUTPUT: @@ -6804,7 +6804,7 @@ OUTPUT: RETVAL AV * -test_is_utf8_string_loc(char *s, STRLEN len) +test_is_utf8_string_loc(const char *s, STRLEN len) PREINIT: AV *av; const U8 * ep; @@ -6817,7 +6817,7 @@ test_is_utf8_string_loc(char *s, STRLEN len) RETVAL AV * -test_is_utf8_string_loclen(char *s, STRLEN len) +test_is_utf8_string_loclen(const char *s, STRLEN len) PREINIT: AV *av; STRLEN ret_len; @@ -6832,14 +6832,14 @@ test_is_utf8_string_loclen(char *s, STRLEN len) RETVAL IV -test_is_utf8_string_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_string_flags(const char *s, STRLEN len, U32 flags) CODE: RETVAL = is_utf8_string_flags((U8 *) s, len, flags); OUTPUT: RETVAL AV * -test_is_utf8_string_loc_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_string_loc_flags(const char *s, STRLEN len, U32 flags) PREINIT: AV *av; const U8 * ep; @@ -6852,7 +6852,7 @@ test_is_utf8_string_loc_flags(char *s, STRLEN len, U32 flags) RETVAL AV * -test_is_utf8_string_loclen_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_string_loclen_flags(const char *s, STRLEN len, U32 flags) PREINIT: AV *av; STRLEN ret_len; @@ -6867,14 +6867,14 @@ test_is_utf8_string_loclen_flags(char *s, STRLEN len, U32 flags) RETVAL IV -test_is_strict_utf8_string(char *s, STRLEN len) +test_is_strict_utf8_string(const char *s, STRLEN len) CODE: RETVAL = is_strict_utf8_string((U8 *) s, len); OUTPUT: RETVAL AV * -test_is_strict_utf8_string_loc(char *s, STRLEN len) +test_is_strict_utf8_string_loc(const char *s, STRLEN len) PREINIT: AV *av; const U8 * ep; @@ -6887,7 +6887,7 @@ test_is_strict_utf8_string_loc(char *s, STRLEN len) RETVAL AV * -test_is_strict_utf8_string_loclen(char *s, STRLEN len) +test_is_strict_utf8_string_loclen(const char *s, STRLEN len) PREINIT: AV *av; STRLEN ret_len; @@ -6902,14 +6902,14 @@ test_is_strict_utf8_string_loclen(char *s, STRLEN len) RETVAL IV -test_is_c9strict_utf8_string(char *s, STRLEN len) +test_is_c9strict_utf8_string(const char *s, STRLEN len) CODE: RETVAL = is_c9strict_utf8_string((U8 *) s, len); OUTPUT: RETVAL AV * -test_is_c9strict_utf8_string_loc(char *s, STRLEN len) +test_is_c9strict_utf8_string_loc(const char *s, STRLEN len) PREINIT: AV *av; const U8 * ep; @@ -6922,7 +6922,7 @@ test_is_c9strict_utf8_string_loc(char *s, STRLEN len) RETVAL AV * -test_is_c9strict_utf8_string_loclen(char *s, STRLEN len) +test_is_c9strict_utf8_string_loclen(const char *s, STRLEN len) PREINIT: AV *av; STRLEN ret_len; @@ -6937,14 +6937,14 @@ test_is_c9strict_utf8_string_loclen(char *s, STRLEN len) RETVAL IV -test_is_utf8_fixed_width_buf_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_fixed_width_buf_flags(const char *s, STRLEN len, U32 flags) CODE: RETVAL = is_utf8_fixed_width_buf_flags((U8 *) s, len, flags); OUTPUT: RETVAL AV * -test_is_utf8_fixed_width_buf_loc_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_fixed_width_buf_loc_flags(const char *s, STRLEN len, U32 flags) PREINIT: AV *av; const U8 * ep; @@ -6957,7 +6957,7 @@ test_is_utf8_fixed_width_buf_loc_flags(char *s, STRLEN len, U32 flags) RETVAL AV * -test_is_utf8_fixed_width_buf_loclen_flags(char *s, STRLEN len, U32 flags) +test_is_utf8_fixed_width_buf_loclen_flags(const char *s, STRLEN len, U32 flags) PREINIT: AV *av; STRLEN ret_len; diff --git a/ext/XS-Typemap/Typemap.pm b/ext/XS-Typemap/Typemap.pm index 8ac96f7d6cec..66d5b05d1ec1 100644 --- a/ext/XS-Typemap/Typemap.pm +++ b/ext/XS-Typemap/Typemap.pm @@ -34,7 +34,7 @@ to the test script. use parent qw/ Exporter /; require XSLoader; -our $VERSION = '0.20'; +our $VERSION = '0.21'; our @EXPORT = (qw/ T_SV diff --git a/ext/XS-Typemap/Typemap.xs b/ext/XS-Typemap/Typemap.xs index f3ee766d40f1..1b0ff0ba9f19 100644 --- a/ext/XS-Typemap/Typemap.xs +++ b/ext/XS-Typemap/Typemap.xs @@ -595,8 +595,18 @@ T_DOUBLE( in ) ## T_PV -char * +const char * T_PV( in ) + const char * in + CODE: + RETVAL = in; + OUTPUT: + RETVAL + +## T_PV_MUTABLE + +char * +T_PV_MUTABLE( in ) char * in CODE: RETVAL = in; diff --git a/lib/ExtUtils/typemap b/lib/ExtUtils/typemap index 5ade80809d53..a442009291b0 100644 --- a/lib/ExtUtils/typemap +++ b/lib/ExtUtils/typemap @@ -14,11 +14,12 @@ short T_IV unsigned short T_UV char T_CHAR unsigned char T_U_CHAR -char * T_PV -unsigned char * T_PV +char * T_PV_MUTABLE +unsigned char * T_PV_MUTABLE const char * T_PV +const unsigned char * T_PV caddr_t T_PV -wchar_t * T_PV +wchar_t * T_PV_MUTABLE wchar_t T_IV # bool_t is defined in bool_t T_IV @@ -28,7 +29,7 @@ time_t T_NV unsigned long * T_OPAQUEPTR char ** T_PACKEDARRAY void * T_PTR -Time_t * T_PV +Time_t * T_PV_MUTABLE SV * T_SV # These are the backwards-compatibility AV*/HV* typemaps that @@ -207,6 +208,8 @@ T_DOUBLE $var = (double)SvNV($arg) T_PV $var = ($type)SvPV_nolen($arg) +T_PV_MUTABLE + $var = ($type)SvPV_force_nolen($arg) T_PTR $var = INT2PTR($type,SvIV($arg)) T_PTRREF @@ -377,6 +380,8 @@ T_DOUBLE sv_setnv($arg, (double)$var); T_PV sv_setpv((SV*)$arg, $var); +T_PV_MUTABLE + sv_setpv((SV*)$arg, $var); T_PTR sv_setiv($arg, PTR2IV($var)); T_PTRREF