aboutsummaryrefslogtreecommitdiff
path: root/lib/help.c
diff options
context:
space:
mode:
authorWilliam Haddon <william@haddonthethird.net>2019-08-29 14:04:19 -0400
committerRob Landley <rob@landley.net>2019-08-29 19:55:46 -0500
commit0222d5957329eb575ef20ae7a00170bcab70b662 (patch)
treedc7b472b41082c6f5ac54ec1e6515139f1636338 /lib/help.c
parent3841cf8a685b4c95264dae7f42db65ca24dbf1b1 (diff)
downloadtoybox-0222d5957329eb575ef20ae7a00170bcab70b662.tar.gz
diff and patch: support special characters in filenames with quoting as well as unusual timestamp formats
After further research and testing, I've produced a patch which handles all filenames with special characters by copying the GNU quoting behavior, and also treats anything following a tab as a timestamp. This increases both ability to handle possible filenames and ability to apply patches found in the field. In diff, quote and escape filenames according to the following rules. * Surround the filename with quotes if it contains a byte less than 0x20, a byte greater than or equal to 0x80, space, backslash, or quote. * Replace alert, backspace, form feed, newline, carriage return, tab, vertical tab, backslash, and quote with \a, \b, \f, \n, \r, \t, \v, \\, and \", respectively. * Replace other bytes less than 0x20 or greater than or equal to 0x80 with a backslash followed by the three octal digits representing the value of the byte. * Treat valid UTF-8 characters involving sequences of bytes greater than or equal to 0x80 the same as other sequences of such bytes. In patch, process quoted and escaped filenames according to the following rules. * If the filename does not begin with a quote, do not modify the filename. * Remove quotes surrounding the filename. * In quoted filenames, replace \a, \b, \f, \n, \r, \t, \v, \\, and \" with alert, backspace, form feed, newline, carriage return, tab, vertical tab, backslash, and quote, respectively. * In quoted filenames, replace a backslash followed by octal digits with the byte with that value in octal. Also, in patch, treat anything on a +++ or --- line following a tab character after the beginning of the filename as a timestamp, rather than part of the filename.
Diffstat (limited to 'lib/help.c')
0 files changed, 0 insertions, 0 deletions