char *out_path,
size_t out_path_size
) {
+ const char *environment_dir;
char candidate[1024];
if (!basename || !basename[0] || !out_path || out_path_size == 0)
out_path[0] = '\0';
+ /* An explicit CLI directory is authoritative. Do not silently fall back
+ * when the operator supplied a path, because that would make evidence
+ * provenance ambiguous. */
if (explicit_dir && explicit_dir[0]) {
if (!redump_join_path(explicit_dir, NULL, basename,
out_path, out_path_size))
return redump_path_exists(out_path);
}
+ /* Environment override is useful for packaged and read-only installs.
+ * Like the CLI override, it is authoritative when set. */
+ environment_dir = getenv("FRIIDUMP_REDUMP_DAT_DIR");
+ if (environment_dir && environment_dir[0]) {
+ if (!redump_join_path(environment_dir, NULL, basename,
+ out_path, out_path_size))
+ return 0;
+ return redump_path_exists(out_path);
+ }
+
+ /* Portable/source-build layout: DAT directory beside the executable. */
if (executable_dir && executable_dir[0] &&
redump_join_path(executable_dir, "redump_dat", basename,
candidate, sizeof(candidate))) {
snprintf(out_path, out_path_size, "%s", candidate);
return 1;
}
-
- /* Retain the executable-relative path as the preferred diagnostic
- * candidate if neither automatic location exists. */
snprintf(out_path, out_path_size, "%s", candidate);
}
+ /* Installed Unix layout: <prefix>/bin/friidump with data under
+ * <prefix>/share/friidump/redump_dat. */
+ if (executable_dir && executable_dir[0] &&
+ redump_join_path(executable_dir, "../share/friidump/redump_dat",
+ basename, candidate, sizeof(candidate))) {
+ if (redump_path_exists(candidate)) {
+ snprintf(out_path, out_path_size, "%s", candidate);
+ return 1;
+ }
+ }
+
+ /* Development convenience for direct source-tree execution. */
if (redump_join_path(".", "redump_dat", basename,
candidate, sizeof(candidate))) {
if (redump_path_exists(candidate)) {
snprintf(out_path, out_path_size, "%s", candidate);
return 1;
}
-
if (!out_path[0])
snprintf(out_path, out_path_size, "%s", candidate);
}