sunrpc/cache: convert to use string_escape_str()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 28 Nov 2014 15:50:28 +0000 (17:50 +0200)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 9 Dec 2014 16:30:20 +0000 (11:30 -0500)
There is nice kernel helper to escape a given strings by provided rules. Let's
use it instead of custom approach.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
[bfields@redhat.com: fix length calculation]
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
net/sunrpc/cache.c

index 06636214113304696814e231dbd1c26972dbb27f..33fb105d4352627319c604bdd03b7c9493f24adf 100644 (file)
@@ -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--;
        }