@@ -296,6 +296,8 @@ class NBackup
296296 pr_error (status, " nbackup needs local access to database file" );
297297 }
298298
299+ toSystem (decompress);
300+ toSystem (db);
299301 expandDatabaseName (db, dbname, NULL );
300302
301303 if (!uSvc->isService ())
@@ -366,7 +368,7 @@ class NBackup
366368 void internal_unlock_database ();
367369 void attach_database ();
368370 void detach_database ();
369- string to_system ( const PathName & from);
371+ void toSystem (AbstractString & from);
370372 void cleanHistory ();
371373
372374 // Create/open database and backup
@@ -595,12 +597,10 @@ void NBackup::close_database()
595597 dbase = INVALID_HANDLE_VALUE;
596598}
597599
598- string NBackup::to_system ( const PathName & from)
600+ void NBackup::toSystem (AbstractString & from)
599601{
600- string to = from.ToString ();
601602 if (uSvc->utf8FileNames ())
602- ISC_utf8ToSystem (to);
603- return to;
603+ ISC_utf8ToSystem (from);
604604}
605605
606606
@@ -612,14 +612,13 @@ void NBackup::open_backup_scan()
612612 return ;
613613 }
614614
615- string nm = to_system (bakname);
616615#ifdef WIN_NT
617- backup = CreateFile (nm .c_str (), GENERIC_READ, 0 ,
616+ backup = CreateFile (bakname .c_str (), GENERIC_READ, 0 ,
618617 NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL );
619618 if (backup != INVALID_HANDLE_VALUE)
620619 return ;
621620#else
622- backup = os_utils::open (nm .c_str (), O_RDONLY | O_LARGEFILE);
621+ backup = os_utils::open (bakname .c_str (), O_RDONLY | O_LARGEFILE);
623622 if (backup >= 0 )
624623 return ;
625624#endif
@@ -767,7 +766,6 @@ void NBackup::open_backup_decompress()
767766
768767void NBackup::create_backup ()
769768{
770- string nm = to_system (bakname);
771769#ifdef WIN_NT
772770 if (bakname == " stdout" ) {
773771 backup = GetStdHandle (STD_OUTPUT_HANDLE);
@@ -782,7 +780,7 @@ void NBackup::create_backup()
782780 // avoids an issue where writing to a file across a network can occasionally
783781 // return ERROR_ACCESS_DENIED.
784782
785- backup = CreateFile (nm .c_str (), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_DELETE,
783+ backup = CreateFile (bakname .c_str (), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_DELETE,
786784 NULL , CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL );
787785 }
788786 if (backup != INVALID_HANDLE_VALUE)
@@ -793,7 +791,7 @@ void NBackup::create_backup()
793791 backup = 1 ; // Posix file handle for stdout
794792 return ;
795793 }
796- backup = os_utils::open (nm .c_str (), O_WRONLY | O_CREAT | O_EXCL | O_LARGEFILE, 0660 );
794+ backup = os_utils::open (bakname .c_str (), O_WRONLY | O_CREAT | O_EXCL | O_LARGEFILE, 0660 );
797795 if (backup >= 0 )
798796 return ;
799797#endif
@@ -1004,6 +1002,7 @@ void NBackup::attach_database()
10041002 }
10051003
10061004 ClumpletWriter dpb (ClumpletReader::dpbList, MAX_DPB_SIZE);
1005+ uSvc->fillDpb (dpb);
10071006
10081007 const unsigned char * authBlock;
10091008 unsigned int authBlockSize = uSvc->getAuthBlock (&authBlock);
@@ -1297,7 +1296,10 @@ void NBackup::backup_database(int level, Guid& guid, const PathName& fname)
12971296 detach_database ();
12981297
12991298 if (fname.hasData ())
1299+ {
13001300 bakname = fname;
1301+ toSystem (bakname);
1302+ }
13011303 else
13021304 {
13031305 // Let's generate nice new filename
@@ -1695,6 +1697,8 @@ void NBackup::restore_database(const BackupFiles& files, bool repl_seq, bool inc
16951697 fixup_database (repl_seq);
16961698 return ;
16971699 }
1700+ toSystem (bakname);
1701+
16981702 // Never reaches this point when run as service
16991703 try {
17001704 fb_assert (!uSvc->isService ());
@@ -1728,7 +1732,10 @@ void NBackup::restore_database(const BackupFiles& files, bool repl_seq, bool inc
17281732 return ;
17291733 }
17301734 if (!inc_rest || curLevel)
1735+ {
17311736 bakname = files[curLevel - (inc_rest ? 1 : 0 )];
1737+ toSystem (bakname);
1738+ }
17321739 if (!inc_rest || curLevel)
17331740 open_backup_scan ();
17341741 }
0 commit comments