diff options
author | qouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-09-22 08:16:10 +0000 |
---|---|---|
committer | qouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524> | 2006-09-22 08:16:10 +0000 |
commit | c493be6c9d2829c73e2e884846d098d955738f62 (patch) | |
tree | daecafa29b9c24b876d73f944b5f29c7937eaca2 /Tools/Source | |
parent | 8554faeb7d9dc858c56d6cdfc0e449b152ce52d7 (diff) | |
download | edk2-platforms-c493be6c9d2829c73e2e884846d098d955738f62.tar.xz |
Modify GenFfsFileTask.
If GenFfsFileTask is failed, the *.ffs file will not be create.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1598 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'Tools/Source')
3 files changed, 34 insertions, 16 deletions
diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFfsFileTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFfsFileTask.java index cbe20f0296..4cbbfab8c6 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFfsFileTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenFfsFileTask.java @@ -150,7 +150,6 @@ public class GenFfsFileTask extends Task implements EfiDefine, FfsTypes { if (this.ffsFileType.equals("")) {
throw new BuildException ("Must set ffsFileType!\n");
}
-
//
// Create ffs file. File name = FfsFileGuid + BaseName + ffsSuffix.
// If outputDir's value was set, file will output to the outputDir.
@@ -169,7 +168,16 @@ public class GenFfsFileTask extends Task implements EfiDefine, FfsTypes { String ffsFilePath = outputPath + this.ffsFileGuid + '-' + this.baseName + ffsSuffix;
File ffsFile = new File (ffsFilePath);
- genFfs(ffsFile);
+ try{
+ genFfs(ffsFile);
+ }catch (BuildException e){
+ if (ffsFile != null && ffsFile.exists()){
+ ffsFile.deleteOnExit();
+ }
+ throw new BuildException(e.getMessage());
+
+ }
+
}
/**
@@ -742,7 +750,7 @@ public class GenFfsFileTask extends Task implements EfiDefine, FfsTypes { @param ffsFile Name of FFS file.
@param isOrg Flag to indicate generate ORG ffs file or not.
**/
- private void genFfs(File ffsFile) {
+ private void genFfs(File ffsFile) throws BuildException {
Section sect;
int fileSize;
int fileDataSize;
@@ -772,6 +780,9 @@ public class GenFfsFileTask extends Task implements EfiDefine, FfsTypes { //
sect.toBuffer((DataOutputStream)dataBuffer);
} catch (Exception e) {
+ if (dataBuffer != null){
+ dataBuffer.close();
+ }
throw new BuildException (e.getMessage());
}
}
diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java index a2bbf4fe8b..4cd7a96cdb 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/GenSectionTask.java @@ -303,11 +303,12 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes System.out.print(e.getMessage());
throw new BuildException(
"Compress.toBuffer failed at section");
+ } finally {
+ if (Do != null){
+ Do.close();
+ }
}
-
}
- Do.close();
-
//
// Call compress
//
@@ -364,7 +365,7 @@ public class GenSectionTask extends Task implements EfiDefine, Section, FfsTypes }
} catch (Exception e) {
throw new BuildException("compress.toBuffer failed!\n");
- }
+ }
} else {
Section sect;
Iterator sectionIter = this.sectFileList.iterator();
diff --git a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java index a7d28f5e7f..17e6298e00 100644 --- a/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java +++ b/Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/Tool.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Random;
import org.apache.tools.ant.BuildException;
import org.tianocore.common.logger.EdkLog;
@@ -36,7 +37,7 @@ public class Tool implements EfiDefine, Section { private Input inputFiles = new Input();
private Input tempInputFile = new Input();
private String outputPath;
- private File outputFile ;
+ private String outputFileName ;
private List<Section> gensectList = new ArrayList<Section>();
/**
Call extern tool
@@ -56,7 +57,7 @@ public class Tool implements EfiDefine, Section { ///
/// check if file exist
///
- //File OutputFile = new File (this.outPutFileName);
+ File outputFile = new File (this.outputFileName);
if (!outputFile.exists()) {
throw new BuildException("The file " + outputFile.getPath() + " does not exist!\n");
}
@@ -133,19 +134,25 @@ public class Tool implements EfiDefine, Section { catch (BuildException e) {
EdkLog.log(e.getMessage());
throw new BuildException ("GenSection failed at Tool!");
- }
- Do.close();
+ } finally {
+ if (Do != null){
+ Do.close();
+ }
+
+ }
this.tempInputFile.insFile(outputFile.getPath());
}
} catch (IOException e){
throw new BuildException ("Gensection failed at tool!");
- }
+ }
try {
- outputFile = File.createTempFile("temp", null, new File(outputPath));
+ Random ran = new Random(9999);
+ this.outputFileName = "Temp" + ran.nextInt();
argument = toolArgList + inputFiles.toStringWithSinglepPrefix(" -i ")
- + tempInputFile.toString(" ")+ " -o " + outputFile.getPath();
+ + tempInputFile.toString(" ")+ " -o " + outputFileName;
EdkLog.log(this, EdkLog.EDK_VERBOSE, command + " " + argument);
+ EdkLog.log(this, EdkLog.EDK_INFO, this.outputFileName);
///
/// execute command line
///
@@ -158,8 +165,7 @@ public class Tool implements EfiDefine, Section { file.delete();
}
}
- } catch (Exception e) {
- EdkLog.log(e.getMessage());
+ } catch (Exception e) {
EdkLog.log(e.getMessage());
throw new BuildException("Execution of externalTool task failed!\n");
}
}
|