mesa: don't overwrite existing shader files with MESA_SHADER_CAPTURE_PATH
authorMarek Olšák <marek.olsak@amd.com>
Thu, 11 Apr 2019 00:31:40 +0000 (20:31 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 12 Apr 2019 15:34:39 +0000 (11:34 -0400)
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
src/mesa/main/shaderapi.c

index 01342c04e8f7cf1d2c21cbd712994fe51838e3bd..6b73e6c7e7a9002786e4b73aa7dbfa001a73ae01 100644 (file)
@@ -1240,10 +1240,24 @@ link_program(struct gl_context *ctx, struct gl_shader_program *shProg,
    /* Capture .shader_test files. */
    const char *capture_path = _mesa_get_shader_capture_path();
    if (shProg->Name != 0 && shProg->Name != ~0 && capture_path != NULL) {
-      FILE *file;
-      char *filename = ralloc_asprintf(NULL, "%s/%u.shader_test",
+      /* Find an unused filename. */
+      char *filename = NULL;
+      for (unsigned i = 0;; i++) {
+         if (i) {
+            filename = ralloc_asprintf(NULL, "%s/%u-%u.shader_test",
+                                       capture_path, shProg->Name, i);
+         } else {
+            filename = ralloc_asprintf(NULL, "%s/%u.shader_test",
                                        capture_path, shProg->Name);
-      file = fopen(filename, "w");
+         }
+         FILE *file = fopen(filename, "r");
+         if (!file)
+            break;
+         fclose(file);
+         ralloc_free(filename);
+      }
+
+      FILE *file = fopen(filename, "w");
       if (file) {
          fprintf(file, "[require]\nGLSL%s >= %u.%02u\n",
                  shProg->IsES ? " ES" : "",