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