RtsFlags: Fix const warning
authorBen Gamari <bgamari.foss@gmail.com>
Sat, 21 Nov 2015 14:48:09 +0000 (15:48 +0100)
committerBen Gamari <ben@smart-cactus.org>
Sat, 21 Nov 2015 14:48:09 +0000 (15:48 +0100)
Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1509

includes/rts/Flags.h
rts/ProfHeap.c
rts/ProfHeap.h
rts/RtsFlags.c

index 878e0f1..9321b4d 100644 (file)
@@ -131,13 +131,13 @@ typedef struct _PROFILING_FLAGS {
 
     nat                 ccsLength;
 
-    char*               modSelector;
-    char*               descrSelector;
-    char*               typeSelector;
-    char*               ccSelector;
-    char*               ccsSelector;
-    char*               retainerSelector;
-    char*               bioSelector;
+    const char*         modSelector;
+    const char*         descrSelector;
+    const char*         typeSelector;
+    const char*         ccSelector;
+    const char*         ccsSelector;
+    const char*         retainerSelector;
+    const char*         bioSelector;
 
 } PROFILING_FLAGS;
 
index bfb8aaa..43bd7b4 100644 (file)
@@ -549,9 +549,9 @@ fprint_ccs(FILE *fp, CostCentreStack *ccs, nat max_length)
 }
 
 rtsBool
-strMatchesSelector( char* str, char* sel )
+strMatchesSelector( const char* str, const char* sel )
 {
-   char* p;
+   const char* p;
    // debugBelch("str_matches_selector %s %s\n", str, sel);
    while (1) {
        // Compare str against wherever we've got to in sel.
index b3bed90..e29a9f6 100644 (file)
@@ -14,7 +14,7 @@
 void    heapCensus         (Time t);
 nat     initHeapProfiling  (void);
 void    endHeapProfiling   (void);
-rtsBool strMatchesSelector (char* str, char* sel);
+rtsBool strMatchesSelector (const char* str, const char* sel);
 
 #include "EndPrivate.h"
 
index e305128..9457279 100644 (file)
@@ -1531,9 +1531,15 @@ static void read_debug_flags(const char* arg)
 
 #ifdef PROFILING
 // Parse a "-h" flag, returning whether the parse resulted in an error.
-static rtsBool read_heap_profiling_flag(const char *arg)
+static rtsBool read_heap_profiling_flag(const char *arg_in)
 {
     // Already parsed "-h"
+
+    // For historical reasons the parser here mutates the arguments.
+    // However, for sanity we want to guarantee const-correctness and parsing
+    // really ought to be an immutable operation. To avoid rewriting the parser
+    // we just operate on a temporary copy of the argument.
+    char *arg = strdup(arg_in);
     rtsBool error = rtsFalse;
     switch (arg[2]) {
     case '\0':
@@ -1638,6 +1644,7 @@ static rtsBool read_heap_profiling_flag(const char *arg)
         error = rtsTrue;
     }
 
+    free(arg);
     return error;
 }
 #endif