chiark / gitweb /
basic/escape: merge utf8 and non-utf8 paths in cunescape_one
[elogind.git] / src / basic / extract-word.c
index 5b993e87081d0578782b2e8c08fa39cfb3dc39c5..de56168909c9405d4e66c14965527ffad91befd3 100644 (file)
@@ -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;