]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/escape: use _cleanup_ in one more place
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 9 Jul 2021 11:31:00 +0000 (13:31 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 9 Jul 2021 13:07:13 +0000 (15:07 +0200)
Also, let's not use 'r' for a char*.

src/basic/escape.c

index 2a3a0e31a1ec24291a85bfd8ada22b28fa51af89..00ab4ab73f18a6e4973acd31196edc8237775c04 100644 (file)
@@ -289,9 +289,11 @@ int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit,
 }
 
 int cunescape_length_with_prefix(const char *s, size_t length, const char *prefix, UnescapeFlags flags, char **ret) {
-        char *r, *t;
+        _cleanup_free_ char *ans = NULL;
+        char *t;
         const char *f;
         size_t pl;
+        int r;
 
         assert(s);
         assert(ret);
@@ -300,18 +302,17 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
 
         pl = strlen_ptr(prefix);
 
-        r = new(char, pl+length+1);
-        if (!r)
+        ans = new(char, pl+length+1);
+        if (!ans)
                 return -ENOMEM;
 
         if (prefix)
-                memcpy(r, prefix, pl);
+                memcpy(ans, prefix, pl);
 
-        for (f = s, t = r + pl; f < s + length; f++) {
+        for (f = s, t = ans + pl; f < s + length; f++) {
                 size_t remaining;
                 bool eight_bit = false;
                 char32_t u;
-                int k;
 
                 remaining = s + length - f;
                 assert(remaining > 0);
@@ -329,23 +330,21 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
                                 continue;
                         }
 
-                        free(r);
                         return -EINVAL;
                 }
 
-                k = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
-                if (k < 0) {
+                r = cunescape_one(f + 1, remaining - 1, &u, &eight_bit, flags & UNESCAPE_ACCEPT_NUL);
+                if (r < 0) {
                         if (flags & UNESCAPE_RELAX) {
                                 /* Invalid escape code, let's take it literal then */
                                 *(t++) = '\\';
                                 continue;
                         }
 
-                        free(r);
-                        return k;
+                        return r;
                 }
 
-                f += k;
+                f += r;
                 if (eight_bit)
                         /* One byte? Set directly as specified */
                         *(t++) = u;
@@ -356,8 +355,8 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
 
         *t = 0;
 
-        *ret = r;
-        return t - r;
+        *ret = TAKE_PTR(ans);
+        return t - *ret;
 }
 
 char* xescape_full(const char *s, const char *bad, size_t console_width, XEscapeFlags flags) {