loader: const fixes

Make the 'source_override' parameter of loader_get_manifest_files() const.
The const was removed in 74d013a5, seemingly for convenience of calling
loader_free_getenv(), not because it was incorrect.

Give loader_free_getenv() the same signature in all implementations.

Fix a memory leak where it was possible to exit loader_get_manifest_files()
without calling loader_free_getenv().

Don't pass a potentially NULL value to loader_log().
diff --git a/loader/loader.c b/loader/loader.c
index d590d04..3ddbfe3 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -302,7 +302,7 @@
     (void)inst;
     return getenv(name);
 }
-static inline void loader_free_getenv(const char *val,
+static inline void loader_free_getenv(char *val,
                                       const struct loader_instance *inst) {
     // No freeing of memory necessary for Linux, but we should at least touch
     // the val and inst pointers to get rid of compiler warnings.
@@ -358,7 +358,7 @@
     (void)name;
     return NULL;
 }
-static inline void loader_free_getenv(const char *val,
+static inline void loader_free_getenv(char *val,
                                       const struct loader_instance *inst) {
     // stub func
     (void)val;
@@ -2592,11 +2592,12 @@
  */
 static VkResult
 loader_get_manifest_files(const struct loader_instance *inst,
-                          const char *env_override, char *source_override,
+                          const char *env_override, const char *source_override,
                           bool is_layer, bool warn_if_not_present,
                           const char *location, const char *home_location,
                           struct loader_manifest_files *out_files) {
-    char * override = NULL;
+    const char *override = NULL;
+    char *override_getenv = NULL;
     char *loc, *orig_loc = NULL;
     char *reg = NULL;
     char *file, *next_file, *name;
@@ -2612,15 +2613,16 @@
 
     if (source_override != NULL) {
         override = source_override;
-    } else if (env_override != NULL &&
-               (override = loader_getenv(env_override, inst))) {
+    } else if (env_override != NULL) {
 #if !defined(_WIN32)
         if (geteuid() != getuid() || getegid() != getgid()) {
             /* Don't allow setuid apps to use the env var: */
-            loader_free_getenv(override, inst);
-            override = NULL;
+            env_override = NULL;
         }
 #endif
+        if (env_override != NULL) {
+            override = override_getenv = loader_getenv(env_override, inst);
+        }
     }
 
 #if !defined(_WIN32)
@@ -2632,7 +2634,7 @@
         loader_log(
             inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
             "Can't get manifest files with NULL location, env_override=%s",
-            env_override);
+            (env_override != NULL) ? env_override : "");
         res = VK_ERROR_INITIALIZATION_FAILED;
         goto out;
     }
@@ -2688,9 +2690,6 @@
             goto out;
         }
         strcpy(loc, override);
-        if (source_override == NULL) {
-            loader_free_getenv(override, inst);
-        }
     }
 
     // Print out the paths being searched if debugging is enabled
@@ -2880,6 +2879,10 @@
         closedir(sysdir);
     }
 
+    if (override_getenv != NULL) {
+        loader_free_getenv(override_getenv, inst);
+    }
+
     if (NULL != reg && reg != orig_loc) {
         loader_instance_heap_free(inst, reg);
     }