[PATCH 3/8] Enhance source position implementation.
Scott Wood
scottwood at freescale.com
Thu Sep 25 03:07:38 EST 2008
Jon Loeliger wrote:
> @@ -106,7 +123,9 @@ fail:
> die("Couldn't open \"%s\": %s\n", fname, strerror(errno));
> }
>
> -void dtc_close_file(struct dtc_file *file)
> +
> +void
> +dtc_close_file(struct dtc_file *file)
:-(
> +char *
> +srcpos_string(srcpos *pos)
> +{
> +# define POS_BUF_SIZE (100)
Local #defines make $YOUTHFUL_DEITY_OFFSPRING cry (and the whitespace
after the # doesn't help). Declare a "const int", or just use sizeof(buf).
> + const char *fname;
> + char buf[POS_BUF_SIZE];
> +
> + if (pos->file && pos->file->name)
> + fname = pos->file->name;
> + else
> + fname = "<no-file>";
> +
> + if (pos->first_line == pos->last_line) {
> + if (pos->first_column == pos->last_column) {
> + snprintf(buf, POS_BUF_SIZE, "%s %d:%d",
> + fname, pos->first_line, pos->first_column);
> + } else {
> + snprintf(buf, POS_BUF_SIZE, "%s %d:%d-%d",
> + fname, pos->first_line,
> + pos->first_column, pos->last_column);
> + }
> +
> + } else {
> + snprintf(buf, POS_BUF_SIZE, "%s %d:%d - %d:%d",
> + fname,
> + pos->first_line, pos->first_column,
> + pos->last_line, pos->last_column);
> + }
Seems a little elaborate; are there cases where reporting the
line/column of the first character of the token is not clear?
> + return strdup(buf);
Why not just dynamically allocate the buffer in the first place? Or if
you care about the memory wastage (which you probably don't, given that
you just leak the allocated string in the callers in later patches),
make this function take a FILE * to output to, rather than return an
allocated string.
-Scott
More information about the devicetree-discuss
mailing list