Hello, 16.07.2013 at 00:31 Lennart Poettering <[email protected]> wrote:
+ STRV_FOREACH(x, i->xattrs) { + value = *x; + name = strsep(&value, "=");I'd really prefer if we didn't corrupt the string here. Maybe use strv_split_quoted() here? That handles all the values for you anyway...
You mean strv_split() (I'm splitting by "=")? This has one issue: it splits by all separator occurrences and I need to split after first one. If corrupting string is the issue, I can make a copy of it. If you prefer strv_split(), then I can just join if strv_length > 2.
+ for (n = 0; n < strv_length(tmp); ++n) { + len = strlen(tmp[n]); + strncpy(xattr, tmp[n], len+1); + p = strchr(xattr, '='); + if (!p) {+ log_error("%s: Attribute has incorrect format.", i->path);+ return -EBADMSG; + } + if (p[1] == '\"') { + while (true) { + if (!p) + p = tmp[n]; + else + p += 2; + p = strchr(p, '\"'); + if (p && xattr[p-xattr-1] != '\\') + break; + p = NULL; + ++n; + if (n == strv_length(tmp)) + break; + len += strlen(tmp[n]) + 1; + strncat(xattr, " ", 1); + strncat(xattr, tmp[n], len); + } + } + strstrip(xattr); + f = i->xattrs; + i->xattrs = strv_append(i->xattrs, xattr); + if (!i->xattrs){ + strv_free(f); + return log_oom(); + }For this stuf I'd really prefer using one of our already existing quoting APIs, like strv_spit_quoted() or FOREACH_WORD_QUOTED or so.
Well, I've tried it in the beginning, but in doesn't work properly in this case. split_quoted() expects quote on the beginning of a string (ignoring whitespace occurrences). If there's no such case string will be split using whitespace. Example of extended attribute with quotes: user.test="This will \" fail" So how would you like this case to be solved? regards, Maciej -- Maciej Wereski Samsung R&D Institute Poland Samsung Electronics [email protected] _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
