|
@@ -3471,19 +3471,22 @@ int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
|
|
|
u64bit RefPos;
|
|
|
u64bit nuidSeekRef;
|
|
|
u64bit nuidActualSeek;
|
|
|
- char Root[1024]={0};
|
|
|
- char FilePath[1024]={0};
|
|
|
+ char FilePath[PATH_MAX];
|
|
|
+ char OldPath[PATH_MAX];
|
|
|
+ char OldPathSwap[PATH_MAX];
|
|
|
|
|
|
if(DoBackup){
|
|
|
char BackupPath[1024]; sprintf(BackupPath,"%s~",SSTR(udf->FileName));
|
|
|
- if(laCopyFile(BackupPath,udf->FileName->Ptr)){
|
|
|
+ if(laCopyFile(BackupPath,SSTR(udf->FileName))){
|
|
|
logPrintNew("UDF backup written to \"%s\".\n", BackupPath);
|
|
|
}else{
|
|
|
logPrintNew("Error trying to back up \"%s\".\n", SSTR(udf->FileName));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- udf->DiskFile = fopen(udf->FileName->Ptr, "wb");
|
|
|
+ sprintf(OldPath,"%s",SSTR(udf->FileName));
|
|
|
+ sprintf(FilePath,"%s.incomplete",SSTR(udf->FileName));
|
|
|
+ udf->DiskFile = fopen(FilePath, "wb");
|
|
|
if (!udf->DiskFile) return 0;
|
|
|
|
|
|
la_WriteOnlyMBString(udf, LA_UDF_IDENTIFIER);
|
|
@@ -3500,7 +3503,7 @@ int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
|
|
|
nuidSeekRef = la_Tell(udf);
|
|
|
la_WritePointer(udf, 0); //Seek pos for nuid list;
|
|
|
|
|
|
- logPrint("Packing %s:\n", udf->FileName->Ptr);
|
|
|
+ logPrintNew("Packing %s:\n", SSTR(udf->FileName));
|
|
|
|
|
|
udf->CurrentH2Instance=udf->H2Instances.pFirst;
|
|
|
|
|
@@ -3509,7 +3512,6 @@ int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
|
|
|
ps->WriteQuickSeek = la_Tell(udf);
|
|
|
la_WriteProp(udf, ps->PPP ? ps->PPP : &ps->PP, ps->PPP ? 1 : 0, UseInstanceList);
|
|
|
}
|
|
|
- logPrint("[ALL DONE]\n\n");
|
|
|
|
|
|
nuidActualSeek = la_Tell(udf);
|
|
|
|
|
@@ -3521,7 +3523,7 @@ int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
|
|
|
la_Seek(udf, RefPos); la_WriteLong(udf, udf->TotalRefs);
|
|
|
la_Seek(udf, nuidSeekRef); la_WritePointer(udf, nuidActualSeek);
|
|
|
la_Seek(udf, SizeAndExt); la_WritePointer(udf, ((ActualSize&(0x0000ffffffffffff))<<16)|LA_UDF_EXTENSIONS_ENABLED);
|
|
|
-
|
|
|
+
|
|
|
udf->Modified = 0;
|
|
|
|
|
|
while(ps = lstPopItem(&udf->PropsToOperate)){
|
|
@@ -3532,6 +3534,14 @@ int laPackUDF(laUDF *udf, int UseInstanceList, int DoBackup){
|
|
|
|
|
|
laCloseUDF(udf);
|
|
|
|
|
|
+ /* Move disk file to final name and remove the old file. */
|
|
|
+ sprintf(OldPathSwap,"%s.swap",OldPath);
|
|
|
+ if(rename(OldPath,OldPathSwap)){ logPrint("Failed to rename old file %s\n",OldPath); }
|
|
|
+ if(rename(FilePath,OldPath)){ logPrint("Failed to rename file to final name: %s\n",OldPath); }
|
|
|
+ elif(remove(OldPathSwap)){ logPrint("Failed to remove old swap file %s\n",OldPathSwap); }
|
|
|
+
|
|
|
+ logPrint("[ALL DONE]\n");
|
|
|
+
|
|
|
laHideProgress();
|
|
|
|
|
|
return 1;
|