@@ -298,6 +298,8 @@ class NBackup
298298 pr_error (status, " nbackup needs local access to database file" );
299299 }
300300
301+ toSystem (decompress);
302+ toSystem (db);
301303 expandDatabaseName (db, dbname, NULL );
302304
303305 if (!uSvc->isService ())
@@ -368,7 +370,7 @@ class NBackup
368370 void internal_unlock_database ();
369371 void attach_database ();
370372 void detach_database ();
371- string to_system ( const PathName & from);
373+ void toSystem (AbstractString & from);
372374 void cleanHistory ();
373375
374376 // Create/open database and backup
@@ -597,12 +599,10 @@ void NBackup::close_database()
597599 dbase = INVALID_HANDLE_VALUE;
598600}
599601
600- string NBackup::to_system ( const PathName & from)
602+ void NBackup::toSystem (AbstractString & from)
601603{
602- string to = from.ToString ();
603604 if (uSvc->utf8FileNames ())
604- ISC_utf8ToSystem (to);
605- return to;
605+ ISC_utf8ToSystem (from);
606606}
607607
608608
@@ -614,14 +614,13 @@ void NBackup::open_backup_scan()
614614 return ;
615615 }
616616
617- string nm = to_system (bakname);
618617#ifdef WIN_NT
619- backup = CreateFile (nm .c_str (), GENERIC_READ, 0 ,
618+ backup = CreateFile (bakname .c_str (), GENERIC_READ, 0 ,
620619 NULL , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL );
621620 if (backup != INVALID_HANDLE_VALUE)
622621 return ;
623622#else
624- backup = os_utils::open (nm .c_str (), O_RDONLY | O_LARGEFILE);
623+ backup = os_utils::open (bakname .c_str (), O_RDONLY | O_LARGEFILE);
625624 if (backup >= 0 )
626625 return ;
627626#endif
@@ -769,7 +768,6 @@ void NBackup::open_backup_decompress()
769768
770769void NBackup::create_backup ()
771770{
772- string nm = to_system (bakname);
773771#ifdef WIN_NT
774772 if (bakname == " stdout" ) {
775773 backup = GetStdHandle (STD_OUTPUT_HANDLE);
@@ -784,7 +782,7 @@ void NBackup::create_backup()
784782 // avoids an issue where writing to a file across a network can occasionally
785783 // return ERROR_ACCESS_DENIED.
786784
787- backup = CreateFile (nm .c_str (), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_DELETE,
785+ backup = CreateFile (bakname .c_str (), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_DELETE,
788786 NULL , CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL );
789787 }
790788 if (backup != INVALID_HANDLE_VALUE)
@@ -795,7 +793,7 @@ void NBackup::create_backup()
795793 backup = 1 ; // Posix file handle for stdout
796794 return ;
797795 }
798- backup = os_utils::open (nm .c_str (), O_WRONLY | O_CREAT | O_EXCL | O_LARGEFILE, 0660 );
796+ backup = os_utils::open (bakname .c_str (), O_WRONLY | O_CREAT | O_EXCL | O_LARGEFILE, 0660 );
799797 if (backup >= 0 )
800798 return ;
801799#endif
@@ -1006,6 +1004,7 @@ void NBackup::attach_database()
10061004 }
10071005
10081006 ClumpletWriter dpb (ClumpletReader::dpbList, MAX_DPB_SIZE);
1007+ uSvc->fillDpb (dpb);
10091008
10101009 const unsigned char * authBlock;
10111010 unsigned int authBlockSize = uSvc->getAuthBlock (&authBlock);
@@ -1299,7 +1298,10 @@ void NBackup::backup_database(int level, Guid& guid, const PathName& fname)
12991298 detach_database ();
13001299
13011300 if (fname.hasData ())
1301+ {
13021302 bakname = fname;
1303+ toSystem (bakname);
1304+ }
13031305 else
13041306 {
13051307 // Let's generate nice new filename
@@ -1697,6 +1699,8 @@ void NBackup::restore_database(const BackupFiles& files, bool repl_seq, bool inc
16971699 fixup_database (repl_seq);
16981700 return ;
16991701 }
1702+ toSystem (bakname);
1703+
17001704 // Never reaches this point when run as service
17011705 try {
17021706 fb_assert (!uSvc->isService ());
@@ -1730,7 +1734,10 @@ void NBackup::restore_database(const BackupFiles& files, bool repl_seq, bool inc
17301734 return ;
17311735 }
17321736 if (!inc_rest || curLevel)
1737+ {
17331738 bakname = files[curLevel - (inc_rest ? 1 : 0 )];
1739+ toSystem (bakname);
1740+ }
17341741 if (!inc_rest || curLevel)
17351742 open_backup_scan ();
17361743 }
0 commit comments