Re: [PATCH] Microsoft Visual C patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Sun, Jun 15, 2014 at 06:46:16PM +0300, Andrei Errapart wrote:
> Hallo,
> 
> 
> The attached patches are the result of compiling the dtc with the Microsoft
> Visual C (MSVC) in order to be able to run the dtc under Microsoft
> Windows.

Ok, so, in order to apply these, I'll need them one by one, with their
own commit messages and Signed-off-by lines.

> 
> Short descriptions of the patches:
> checks:		MSVC is unable to handle 0-sized array literals.
> fopen:		Binary files should be opened in binary mode.
> signed-char:	For MSVC, char defaults to signed char.
> dtc-header:
>   1) Variadic macro in the form "args..." is a GCC extension.
>   2) MSVC requires 0 to be present in a struct literal.
> 
> On a Linux, all tests pass when these patches have been applied.
> 
> We have been using the dtc on Windows computers for a few days and haven't
> had any problems so far. In the case people are interested in having the
> MSVC project file(s) and the few lightweight compatibility functions
> required for compilation, let me know and I can clean them up for public
> use.
> 
> 
> best regards,
> Andrei

> diff --git a/checks.c b/checks.c
> index 47eda65..cf07864 100644
> --- a/checks.c
> +++ b/checks.c
> @@ -61,17 +61,19 @@ struct check {
>  #define CHECK_ENTRY(nm, tfn, nfn, pfn, d, w, e, ...)	       \
>  	static struct check *nm##_prereqs[] = { __VA_ARGS__ }; \
>  	static struct check nm = { \
> -		.name = #nm, \
> -		.tree_fn = (tfn), \
> -		.node_fn = (nfn), \
> -		.prop_fn = (pfn), \
> -		.data = (d), \
> -		.warn = (w), \
> -		.error = (e), \
> -		.status = UNCHECKED, \
> -		.num_prereqs = ARRAY_SIZE(nm##_prereqs), \
> -		.prereq = nm##_prereqs, \
> +		#nm, \
> +		(tfn), \
> +		(nfn), \
> +		(pfn), \
> +		(d), \
> +		(w), \
> +		(e), \
> +		UNCHECKED, \
> +		false, \
> +		ARRAY_SIZE(nm##_prereqs), \
> +		nm##_prereqs \

Um.. I don't see what removing the C99 initializers has to do with
MSVC not supporting 0 size arrays

>  	};
> +

Please don't include unrelated whitespace changes.

>  #define WARNING(nm, tfn, nfn, pfn, d, ...) \
>  	CHECK_ENTRY(nm, tfn, nfn, pfn, d, true, false, __VA_ARGS__)
>  #define ERROR(nm, tfn, nfn, pfn, d, ...) \
> @@ -153,7 +155,7 @@ static bool run_check(struct check *c, struct node *dt)
>  
>  	c->inprogress = true;
>  
> -	for (i = 0; i < c->num_prereqs; i++) {
> +	for (i = 0; i < c->num_prereqs && c->prereq[i]!=NULL; i++) {

Hrm.  I think I see what you're doing here, but it's kinda subtle.
Without a comment, I think someone's very likely to take it out again.

[snip]

> diff --git a/fstree.c b/fstree.c
> index 4d2791c..6d1beec 100644
> --- a/fstree.c
> +++ b/fstree.c
> @@ -52,7 +52,7 @@ static struct node *read_fstree(const char *dirname)
>  			struct property *prop;
>  			FILE *pfile;
>  
> -			pfile = fopen(tmpname, "r");
> +			pfile = fopen(tmpname, "rb");
>  			if (! pfile) {
>  				fprintf(stderr,
>  					"WARNING: Cannot open %s: %s\n",
> diff --git a/srcpos.c b/srcpos.c
> index 4549773..f534c22 100644
> --- a/srcpos.c
> +++ b/srcpos.c
> @@ -77,7 +77,7 @@ static char *try_open(const char *dirname, const char *fname, FILE **fp)
>  	else
>  		fullname = join_path(dirname, fname);
>  
> -	*fp = fopen(fullname, "r");
> +	*fp = fopen(fullname, "rb");
>  	if (!*fp) {
>  		free(fullname);
>  		fullname = NULL;
> diff --git a/dtc.c b/dtc.c
> index d36ccdc..e3665b6 100644
> --- a/dtc.c
> +++ b/dtc.c
> @@ -237,7 +237,7 @@ int main(int argc, char *argv[])
>  	if (streq(outname, "-")) {
>  		outf = stdout;
>  	} else {
> -		outf = fopen(outname, "w");
> +		outf = fopen(outname, "wb");
>  		if (! outf)
>  			die("Couldn't open output file %s: %s\n",
>  			    outname, strerror(errno));

The fopen() mode patch I'm happy to take once it's sent with its own
comment and signed-off-by lines.

> diff --git a/treesource.c b/treesource.c
> index bf7a626..2386b93 100644
> --- a/treesource.c
> +++ b/treesource.c
> @@ -178,7 +178,7 @@ static void write_propval_bytes(FILE *f, struct data val)
>  			m = m->next;
>  		}
>  
> -		fprintf(f, "%02hhx", *bp++);
> +		fprintf(f, "%02hhx", (unsigned char)(*bp++));
>  		if ((const void *)bp >= propend)
>  			break;
>  		fprintf(f, " ");

Likewise the unsigned char patch.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: pgpGiz2iH9mnB.pgp
Description: PGP signature


[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux