On Thu, 16.01.14 15:42, Maciej Wereski ([email protected]) wrote:
> > 11.12.2013 at 15:15 Lennart Poettering <[email protected]> wrote: > > >On Wed, 11.12.13 14:24, Maciej Wereski > >([email protected]) wrote: > > > >>>>+ xattr = new0(char, strlen(i->argument)+1); > >>>>+ if (!xattr) > >>>>+ return log_oom(); > >>>>+ > >>>>+ tmp = strv_split(i->argument, WHITESPACE); > >>>>+ if (!tmp) > >>>>+ return log_oom(); > >>>>+ > >>>>+ strv_len = strv_length(tmp); > >>>>+ for (n = 0; n < strv_len; ++n) { > >>> > >>>Sounds like a job for the STRV_FOREACH() macro. Since you don't > >>actually > >>>need the strv as strv here it sounds like you actually really want to > >>>use FOREACH_WORD_QUOTED() for this, which will also do the > >>unquoting for > >>>you. > >> > >>Well, FOREACH_WORD_QUOTED() won't work properly, because quotation marks > >>aren't first chars in strings (e.g. user.name="John Smith"). > >>Maybe better > >>idea would be to introduce mandatory separator (e.g. semicolon) > >>instead of > >>quotation marks. > > > >Yeah, FOREACH_WORD_QUOTED() is quite badly designed. We should fix it to > >do somewhat sane quoting and escaping. I'll look into it. > > There is one problem with using it in this patch. In my case > quotation mark isn't first char of the string, so using pointer and > length won't get rid of it. String needs to be modified. Yeah, this has been a long-standing issue actually, the unquoting logic is pretty broken here, we should probably rework FOREACH_WORD_QUOTED() to allocate a buffer for this and do proper unquoting. I have been planning to do this for a while. In fact, we should probably have a closer look that we implement similar quoting rules for all file formats we define. Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
