1919#include "kerncompat.h"
2020#include <limits.h>
2121#include <time.h>
22- #include <ctype.h>
2322#include <errno.h>
2423#include <stdarg.h>
2524#include <stdio.h>
2928#include "common/messages.h"
3029#include "common/send-stream.h"
3130#include "common/path-utils.h"
31+ #include "common/string-utils.h"
3232#include "cmds/receive-dump.h"
3333
3434#define PATH_CAT_OR_RET (function_name , outpath , path1 , path2 , ret ) \
4040 } \
4141})
4242
43- /*
44- * Print path and escape characters (in a C way) that could break the line.
45- * Returns the length of the escaped characters. Unprintable characters are
46- * escaped as octals.
47- */
48- static int print_path_escaped_len (const char * path , size_t path_len )
49- {
50- size_t i ;
51- int len = 0 ;
52-
53- for (i = 0 ; i < path_len ; i ++ ) {
54- char c = path [i ];
55-
56- len ++ ;
57- switch (c ) {
58- case '\a' : putchar ('\\' ); putchar ('a' ); len ++ ; break ;
59- case '\b' : putchar ('\\' ); putchar ('b' ); len ++ ; break ;
60- case '\e' : putchar ('\\' ); putchar ('e' ); len ++ ; break ;
61- case '\f' : putchar ('\\' ); putchar ('f' ); len ++ ; break ;
62- case '\n' : putchar ('\\' ); putchar ('n' ); len ++ ; break ;
63- case '\r' : putchar ('\\' ); putchar ('r' ); len ++ ; break ;
64- case '\t' : putchar ('\\' ); putchar ('t' ); len ++ ; break ;
65- case '\v' : putchar ('\\' ); putchar ('v' ); len ++ ; break ;
66- case ' ' : putchar ('\\' ); putchar (' ' ); len ++ ; break ;
67- case '\\' : putchar ('\\' ); putchar ('\\' ); len ++ ; break ;
68- default :
69- if (!isprint (c )) {
70- printf ("\\%c%c%c" ,
71- '0' + ((c & 0300 ) >> 6 ),
72- '0' + ((c & 070 ) >> 3 ),
73- '0' + (c & 07 ));
74- len += 3 ;
75- } else {
76- putchar (c );
77- }
78- }
79- }
80- return len ;
81- }
82-
83- static int print_path_escaped (const char * path )
84- {
85- return print_path_escaped_len (path , strlen (path ));
86- }
87-
8843enum print_mode {
8944 PRINT_DUMP_NORMAL ,
9045 PRINT_DUMP_SUBVOLUME ,
@@ -115,7 +70,7 @@ static int __print_dump(enum print_mode mode, void *user, const char *path,
11570
11671 /* Unified header */
11772 printf ("%-16s" , title );
118- ret = print_path_escaped (out_path );
73+ ret = string_print_escape_special (out_path );
11974 if (!fmt ) {
12075 putchar ('\n' );
12176 return 0 ;
@@ -203,7 +158,7 @@ static int print_mksock(const char *path, void *user)
203158static int print_symlink (const char * path , const char * lnk , void * user )
204159{
205160 PRINT_DUMP_NO_NEWLINE (user , path , "symlink" , "dest=" );
206- print_path_escaped (lnk );
161+ string_print_escape_special (lnk );
207162 putchar ('\n' );
208163 return 0 ;
209164}
@@ -216,15 +171,15 @@ static int print_rename(const char *from, const char *to, void *user)
216171
217172 PATH_CAT_OR_RET ("rename" , full_to , r -> full_subvol_path , to , ret );
218173 PRINT_DUMP_NO_NEWLINE (user , from , "rename" , "dest=" );
219- print_path_escaped (full_to );
174+ string_print_escape_special (full_to );
220175 putchar ('\n' );
221176 return 0 ;
222177}
223178
224179static int print_link (const char * path , const char * lnk , void * user )
225180{
226181 PRINT_DUMP_NO_NEWLINE (user , path , "link" , "dest=" );
227- print_path_escaped (lnk );
182+ string_print_escape_special (lnk );
228183 putchar ('\n' );
229184 return 0 ;
230185}
@@ -257,7 +212,7 @@ static int print_clone(const char *path, u64 offset, u64 len,
257212
258213 PATH_CAT_OR_RET ("clone" , full_path , r -> full_subvol_path , clone_path , ret );
259214 PRINT_DUMP_NO_NEWLINE (user , path , "clone" , "offset=%llu len=%llu from=" , offset , len );
260- print_path_escaped (full_path );
215+ string_print_escape_special (full_path );
261216 putchar (' ' );
262217 printf ("clone_offset=%llu\n" , clone_offset );
263218 return 0 ;
@@ -271,9 +226,9 @@ static int print_set_xattr(const char *path, const char *name,
271226 const void * data , int len , void * user )
272227{
273228 PRINT_DUMP_NO_NEWLINE (user , path , "set_xattr" , "name=" );
274- print_path_escaped (name );
229+ string_print_escape_special (name );
275230 putchar (' ' );
276- print_path_escaped_len (( char * )data , len );
231+ string_print_escape_special_len (( const char * )data , len );
277232 putchar (' ' );
278233 printf ("len=%d\n" , len );
279234 return 0 ;
@@ -283,7 +238,7 @@ static int print_remove_xattr(const char *path, const char *name, void *user)
283238{
284239
285240 PRINT_DUMP_NO_NEWLINE (user , path , "remove_xattr" , "name=" );
286- print_path_escaped (name );
241+ string_print_escape_special (name );
287242 putchar ('\n' );
288243 return 0 ;
289244}
0 commit comments