X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbasic%2Fextract-word.c;h=de56168909c9405d4e66c14965527ffad91befd3;hb=0281ee40d079fb3206a6c9ae9ed52566f64e9803;hp=5b993e87081d0578782b2e8c08fa39cfb3dc39c5;hpb=dbee7798ab5f9e9f0671fd2f39ae9509a2123fd2;p=elogind.git diff --git a/src/basic/extract-word.c b/src/basic/extract-word.c index 5b993e870..de5616890 100644 --- a/src/basic/extract-word.c +++ b/src/basic/extract-word.c @@ -98,8 +98,9 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra if (flags & EXTRACT_CUNESCAPE) { uint32_t u; + bool eight_bit = false; - r = cunescape_one(*p, (size_t) -1, &c, &u); + r = cunescape_one(*p, (size_t) -1, &u, &eight_bit); if (r < 0) { if (flags & EXTRACT_CUNESCAPE_RELAX) { s[sz++] = '\\'; @@ -109,10 +110,10 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra } else { (*p) += r - 1; - if (c != 0) - s[sz++] = c; /* normal explicit char */ + if (eight_bit) + s[sz++] = u; else - sz += utf8_encode_unichar(s + sz, u); /* unicode chars we'll encode as utf8 */ + sz += utf8_encode_unichar(s + sz, u); } } else s[sz++] = c;