consting in perl.c:S_Internals_V and Win32 DynaLoader
authorDaniel Dragan <bulk88@hotmail.com>
Wed, 17 Oct 2012 15:56:29 +0000 (11:56 -0400)
committerSteve Hay <steve.m.hay@googlemail.com>
Wed, 31 Oct 2012 08:20:36 +0000 (08:20 +0000)
These assorted static allocated variables were in RW memory in the perl
image. Move them to RO memory so they are sharable between different
Perl processes by the OS. The lack of consting in Win32 Dynaloader traces
to commit 0a753a76406 . S_Internals_V traces to commit 4a5df386486 .

ext/DynaLoader/dl_win32.xs
perl.c
win32/perllib.c
win32/win32.h

index 94296cd..5471870 100644 (file)
@@ -67,9 +67,9 @@ dl_private_init(pTHX)
 static int
 dl_static_linked(char *filename)
 {
-    char **p;
+    const char **p;
     char *ptr, *hptr;
-    static char subStr[] = "/auto/";
+    static const char subStr[] = "/auto/";
     char szBuffer[MAX_PATH];
 
     /* avoid buffer overflow when called with invalid filenames */
@@ -93,7 +93,7 @@ dl_static_linked(char *filename)
     else
        ptr = szBuffer;
 
-    for (p = staticlinkmodules; *p;p++) {
+    for (p = (const char **) staticlinkmodules; *p;p++) {
        if (hptr = strstr(ptr, *p)) {
            /* found substring, need more detailed check if module name match */
            if (hptr==ptr) {
diff --git a/perl.c b/perl.c
index a65dcb6..44bd6a4 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -1670,7 +1670,7 @@ S_Internals_V(pTHX_ CV *cv)
 #endif
     const int entries = 3 + local_patch_count;
     int i;
-    static char non_bincompat_options[] = 
+    static const char non_bincompat_options[] = 
 #  ifdef DEBUGGING
                             " DEBUGGING"
 #  endif
index e838d0c..22e8923 100644 (file)
@@ -18,7 +18,7 @@
 
 
 /* Register any extra external extensions */
-char *staticlinkmodules[] = {
+const char * const staticlinkmodules[] = {
     "DynaLoader",
     /* other similar records will be included from "perllibst.h" */
 #define STATIC1
index 9d229db..0474c61 100644 (file)
@@ -335,7 +335,7 @@ extern char *               win32_get_vendorlib(const char *pl, STRLEN *const len);
 extern void            win32_delete_internal_host(void *h);
 #endif
 
-extern char *          staticlinkmodules[];
+extern const char * const              staticlinkmodules[];
 
 END_EXTERN_C