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: pgpfdHPLHEK89.pgp
Description: PGP signature

Reply via email to