|
@@ -20,6 +20,7 @@
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/ctype.h>
|
|
|
+#include <linux/string_helpers.h>
|
|
|
#include <asm/uaccess.h>
|
|
|
#include <linux/poll.h>
|
|
|
#include <linux/seq_file.h>
|
|
@@ -1067,30 +1068,15 @@ void qword_add(char **bpp, int *lp, char *str)
|
|
|
{
|
|
|
char *bp = *bpp;
|
|
|
int len = *lp;
|
|
|
- char c;
|
|
|
+ int ret;
|
|
|
|
|
|
if (len < 0) return;
|
|
|
|
|
|
- while ((c=*str++) && len)
|
|
|
- switch(c) {
|
|
|
- case ' ':
|
|
|
- case '\t':
|
|
|
- case '\n':
|
|
|
- case '\\':
|
|
|
- if (len >= 4) {
|
|
|
- *bp++ = '\\';
|
|
|
- *bp++ = '0' + ((c & 0300)>>6);
|
|
|
- *bp++ = '0' + ((c & 0070)>>3);
|
|
|
- *bp++ = '0' + ((c & 0007)>>0);
|
|
|
- }
|
|
|
- len -= 4;
|
|
|
- break;
|
|
|
- default:
|
|
|
- *bp++ = c;
|
|
|
- len--;
|
|
|
- }
|
|
|
- if (c || len <1) len = -1;
|
|
|
+ ret = string_escape_str(str, &bp, len, ESCAPE_OCTAL, "\\ \n\t");
|
|
|
+ if (ret < 0 || ret == len)
|
|
|
+ len = -1;
|
|
|
else {
|
|
|
+ len -= ret;
|
|
|
*bp++ = ' ';
|
|
|
len--;
|
|
|
}
|