@@ -289,9 +289,11 @@ int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit,
289289}
290290
291291int cunescape_length_with_prefix (const char * s , size_t length , const char * prefix , UnescapeFlags flags , char * * ret ) {
292- char * r , * t ;
292+ _cleanup_free_ char * ans = NULL ;
293+ char * t ;
293294 const char * f ;
294295 size_t pl ;
296+ int r ;
295297
296298 assert (s );
297299 assert (ret );
@@ -300,18 +302,17 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
300302
301303 pl = strlen_ptr (prefix );
302304
303- r = new (char , pl + length + 1 );
304- if (!r )
305+ ans = new (char , pl + length + 1 );
306+ if (!ans )
305307 return - ENOMEM ;
306308
307309 if (prefix )
308- memcpy (r , prefix , pl );
310+ memcpy (ans , prefix , pl );
309311
310- for (f = s , t = r + pl ; f < s + length ; f ++ ) {
312+ for (f = s , t = ans + pl ; f < s + length ; f ++ ) {
311313 size_t remaining ;
312314 bool eight_bit = false;
313315 char32_t u ;
314- int k ;
315316
316317 remaining = s + length - f ;
317318 assert (remaining > 0 );
@@ -329,23 +330,21 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
329330 continue ;
330331 }
331332
332- free (r );
333333 return - EINVAL ;
334334 }
335335
336- k = cunescape_one (f + 1 , remaining - 1 , & u , & eight_bit , flags & UNESCAPE_ACCEPT_NUL );
337- if (k < 0 ) {
336+ r = cunescape_one (f + 1 , remaining - 1 , & u , & eight_bit , flags & UNESCAPE_ACCEPT_NUL );
337+ if (r < 0 ) {
338338 if (flags & UNESCAPE_RELAX ) {
339339 /* Invalid escape code, let's take it literal then */
340340 * (t ++ ) = '\\' ;
341341 continue ;
342342 }
343343
344- free (r );
345- return k ;
344+ return r ;
346345 }
347346
348- f += k ;
347+ f += r ;
349348 if (eight_bit )
350349 /* One byte? Set directly as specified */
351350 * (t ++ ) = u ;
@@ -356,8 +355,8 @@ int cunescape_length_with_prefix(const char *s, size_t length, const char *prefi
356355
357356 * t = 0 ;
358357
359- * ret = r ;
360- return t - r ;
358+ * ret = TAKE_PTR ( ans ) ;
359+ return t - * ret ;
361360}
362361
363362char * xescape_full (const char * s , const char * bad , size_t console_width , XEscapeFlags flags ) {
0 commit comments