*
* relative_path should be the path to the directory containing this file,
* relative to the root of the backup (NOT relative to the root of the
- * tablespace). bare_file_name should be the name of the file within that
- * directory, without "INCREMENTAL.".
+ * tablespace). It must always end with a trailing slash. bare_file_name
+ * should be the name of the file within that directory, without
+ * "INCREMENTAL.".
*
* n_prior_backups is the number of prior backups, and prior_backup_dirs is
* an array of pathnames where those backups can be found.
rfile *copy_source = NULL;
pg_checksum_context checksum_ctx;
+ /* Sanity check the relative_path. */
+ Assert(relative_path[0] != '\0');
+ Assert(relative_path[strlen(relative_path) - 1] == '/');
+
/*
* Every block must come either from the latest version of the file or
* from one of the prior backups.
* Look for the full file in the previous backup. If not found, then
* look for an incremental file instead.
*/
- snprintf(source_filename, MAXPGPATH, "%s/%s/%s",
+ snprintf(source_filename, MAXPGPATH, "%s/%s%s",
prior_backup_dirs[sidx], relative_path, bare_file_name);
if ((s = make_rfile(source_filename, true)) == NULL)
{
- snprintf(source_filename, MAXPGPATH, "%s/%s/INCREMENTAL.%s",
+ snprintf(source_filename, MAXPGPATH, "%s/%sINCREMENTAL.%s",
prior_backup_dirs[sidx], relative_path, bare_file_name);
s = make_incremental_rfile(source_filename);
}