@@ -22,7 +22,7 @@ static pgBackup* get_closest_backup(timelineInfo *tlinfo);
2222static pgBackup * get_oldest_backup (timelineInfo * tlinfo );
2323static const char * backupModes []= {"" ,"PAGE" ,"PTRACK" ,"DELTA" ,"FULL" };
2424static pgBackup * readBackupControlFile (const char * path );
25- static int create_backup_dir (pgBackup * backup ,const char * backup_instance_path );
25+ static err_i create_backup_dir (pgBackup * backup ,const char * backup_instance_path );
2626
2727static bool backup_lock_exit_hook_registered = false;
2828static parray * locks = NULL ;
@@ -1461,9 +1461,11 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
14611461int i ;
14621462char temp [MAXPGPATH ];
14631463parray * subdirs ;
1464+ err_i err ;
14641465
14651466/* Try to create backup directory at first */
1466- if (create_backup_dir (backup ,backup_instance_path )!= 0 )
1467+ err = create_backup_dir (backup ,backup_instance_path );
1468+ if ($haserr (err ))
14671469{
14681470/* Clear backup_id as indication of error */
14691471backup -> backup_id = INVALID_BACKUP_ID ;
@@ -1498,8 +1500,14 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
14981500/* create directories for actual backup files */
14991501for (i = 0 ;i < parray_num (subdirs );i ++ )
15001502{
1503+ err_i err ;
15011504join_path_components (temp ,backup -> root_dir ,parray_get (subdirs ,i ));
1502- fio_mkdir (FIO_BACKUP_HOST ,temp ,DIR_PERMISSION , false);
1505+ err = $i (pioMakeDir ,backup -> backup_location , .path = temp ,
1506+ .mode = DIR_PERMISSION , .strict = false);
1507+ if ($haserr (err ))
1508+ {
1509+ elog (WARNING ,"%s" ,$errmsg (err ));
1510+ }
15031511}
15041512
15051513free_dir_list (subdirs );
@@ -1512,22 +1520,24 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
15121520 * 0 - ok
15131521 * -1 - error (warning message already emitted)
15141522 */
1515- int
1523+ static err_i
15161524create_backup_dir (pgBackup * backup ,const char * backup_instance_path )
15171525{
1518- int rc ;
15191526char path [MAXPGPATH ];
1527+ err_i err ;
15201528
15211529join_path_components (path ,backup_instance_path ,base36enc (backup -> backup_id ));
15221530
15231531/* TODO: add wrapper for remote mode */
1524- rc = fio_mkdir (FIO_BACKUP_HOST ,path ,DIR_PERMISSION , true);
1525-
1526- if (rc == 0 )
1532+ err = $i (pioMakeDir ,backup -> backup_location , .path = path ,
1533+ .mode = DIR_PERMISSION , .strict = true);
1534+ if (!$haserr (err ))
1535+ {
15271536backup -> root_dir = pgut_strdup (path );
1528- else
1529- elog (WARNING ,"Cannot create directory \"%s\": %s" ,path ,strerror (errno ));
1530- return rc ;
1537+ }else {
1538+ elog (WARNING ,"%s" ,$errmsg (err ));
1539+ }
1540+ return err ;
15311541}
15321542
15331543/*
@@ -2969,6 +2979,9 @@ pgBackupInit(pgBackup *backup)
29692979backup -> files = NULL ;
29702980backup -> note = NULL ;
29712981backup -> content_crc = 0 ;
2982+
2983+ backup -> backup_location = pioDriveForLocation (FIO_BACKUP_HOST );
2984+ backup -> database_location = pioDriveForLocation (FIO_DB_HOST );
29722985}
29732986
29742987/* free pgBackup object */
@@ -2977,6 +2990,10 @@ pgBackupFree(void *backup)
29772990{
29782991pgBackup * b = (pgBackup * )backup ;
29792992
2993+ /* Both point to global static vars */
2994+ b -> backup_location .self = NULL ;
2995+ b -> database_location .self = NULL ;
2996+
29802997pg_free (b -> primary_conninfo );
29812998pg_free (b -> external_dir_str );
29822999pg_free (b -> root_dir );