[Crosstoolchain-logs] [device-tree-compiler] 270/357: dtc: Make dt_from_blob() open its own input file, like the other input formats

Hector Oron zumbi at moszumanska.debian.org
Thu Dec 8 17:06:22 UTC 2016


This is an automated email from the git hooks/post-receive script.

zumbi pushed a commit to branch upstream/1.3.x
in repository device-tree-compiler.

commit a742aade6a28fbebf7a66448b40b983549897253
Author: David Gibson <david at gibson.dropbear.id.au>
Date:   Fri May 16 13:22:09 2008 +1000

    dtc: Make dt_from_blob() open its own input file, like the other input formats
    
    Currently, main() has a variable for the input file.  It used to be
    that main() would open the input based on command line arguments
    before passing it to the dt_from_*() function.  However, only
    dt_from_blob() uses this.  dt_from_source() opens its own file, and
    dt_from_fs() interprets the argument as as a directory and does its
    own opendir() call.
    
    Furthermore, main() opened the file with dtc_open_file() but closed it
    with a direct call to fclose().
    
    Therefore, to improve the interface consistency between the
    dt_from_*() functions, make dt_from_blob() open and close its own
    files like the other dt_from_*() functions.
    
    Signed-off-by: David Gibson <david at gibson.dropbear.id.au>
---
 dtc.c      | 16 +++++-----------
 dtc.h      |  2 +-
 flattree.c | 26 ++++++++++++++++----------
 3 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/dtc.c b/dtc.c
index 9b0164c..267d581 100644
--- a/dtc.c
+++ b/dtc.c
@@ -118,7 +118,6 @@ int main(int argc, char *argv[])
 	int force = 0, check = 0;
 	const char *arg;
 	int opt;
-	struct dtc_file *inf = NULL;
 	FILE *outf = NULL;
 	int outversion = DEFAULT_FDT_VERSION;
 	int boot_cpuid_phys = 0xfeedbeef;
@@ -186,19 +185,14 @@ int main(int argc, char *argv[])
 	fprintf(stderr, "DTC: %s->%s  on file \"%s\"\n",
 		inform, outform, arg);
 
-	if (streq(inform, "dts")) {
+	if (streq(inform, "dts"))
 		bi = dt_from_source(arg);
-	} else if (streq(inform, "fs")) {
+	else if (streq(inform, "fs"))
 		bi = dt_from_fs(arg);
-	} else if(streq(inform, "dtb")) {
-		inf = dtc_open_file(arg, NULL);
-		bi = dt_from_blob(inf->file);
-	} else {
+	else if(streq(inform, "dtb"))
+		bi = dt_from_blob(arg);
+	else
 		die("Unknown input format \"%s\"\n", inform);
-	}
-
-	if (inf && inf->file != stdin)
-		fclose(inf->file);
 
 	fill_fullpaths(bi->dt, "");
 	process_checks(force, bi);
diff --git a/dtc.h b/dtc.h
index d757242..8935483 100644
--- a/dtc.h
+++ b/dtc.h
@@ -248,7 +248,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
 void dt_to_asm(FILE *f, struct boot_info *bi, int version,
 	       int boot_cpuid_phys);
 
-struct boot_info *dt_from_blob(FILE *f);
+struct boot_info *dt_from_blob(const char *fname);
 
 /* Tree source */
 
diff --git a/flattree.c b/flattree.c
index 8675857..fd69293 100644
--- a/flattree.c
+++ b/flattree.c
@@ -19,6 +19,7 @@
  */
 
 #include "dtc.h"
+#include "srcpos.h"
 
 #define FTF_FULLPATH	0x1
 #define FTF_VARALIGN	0x2
@@ -780,8 +781,9 @@ static struct node *unflatten_tree(struct inbuf *dtbuf,
 }
 
 
-struct boot_info *dt_from_blob(FILE *f)
+struct boot_info *dt_from_blob(const char *fname)
 {
+	struct dtc_file *dtcf;
 	u32 magic, totalsize, version, size_dt;
 	u32 off_dt, off_str, off_mem_rsvmap;
 	int rc;
@@ -796,12 +798,14 @@ struct boot_info *dt_from_blob(FILE *f)
 	u32 val;
 	int flags = 0;
 
-	rc = fread(&magic, sizeof(magic), 1, f);
-	if (ferror(f))
+	dtcf = dtc_open_file(fname, NULL);
+
+	rc = fread(&magic, sizeof(magic), 1, dtcf->file);
+	if (ferror(dtcf->file))
 		die("Error reading DT blob magic number: %s\n",
 		    strerror(errno));
 	if (rc < 1) {
-		if (feof(f))
+		if (feof(dtcf->file))
 			die("EOF reading DT blob magic number\n");
 		else
 			die("Mysterious short read reading magic number\n");
@@ -811,11 +815,11 @@ struct boot_info *dt_from_blob(FILE *f)
 	if (magic != FDT_MAGIC)
 		die("Blob has incorrect magic number\n");
 
-	rc = fread(&totalsize, sizeof(totalsize), 1, f);
-	if (ferror(f))
+	rc = fread(&totalsize, sizeof(totalsize), 1, dtcf->file);
+	if (ferror(dtcf->file))
 		die("Error reading DT blob size: %s\n", strerror(errno));
 	if (rc < 1) {
-		if (feof(f))
+		if (feof(dtcf->file))
 			die("EOF reading DT blob size\n");
 		else
 			die("Mysterious short read reading blob size\n");
@@ -835,12 +839,12 @@ struct boot_info *dt_from_blob(FILE *f)
 	p = blob + sizeof(magic)  + sizeof(totalsize);
 
 	while (sizeleft) {
-		if (feof(f))
+		if (feof(dtcf->file))
 			die("EOF before reading %d bytes of DT blob\n",
 			    totalsize);
 
-		rc = fread(p, 1, sizeleft, f);
-		if (ferror(f))
+		rc = fread(p, 1, sizeleft, dtcf->file);
+		if (ferror(dtcf->file))
 			die("Error reading DT blob: %s\n",
 			    strerror(errno));
 
@@ -902,5 +906,7 @@ struct boot_info *dt_from_blob(FILE *f)
 
 	free(blob);
 
+	dtc_close_file(dtcf);
+
 	return build_boot_info(reservelist, tree);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/crosstoolchain/device-tree-compiler.git



More information about the Crosstoolchain-logs mailing list