|
@@ -13,6 +13,7 @@
|
|
|
#include <linux/cred.h>
|
|
|
#include <linux/mm.h>
|
|
|
#include <linux/printk.h>
|
|
|
+#include <linux/string_helpers.h>
|
|
|
|
|
|
#include <asm/uaccess.h>
|
|
|
#include <asm/page.h>
|
|
@@ -377,26 +378,12 @@ EXPORT_SYMBOL(seq_release);
|
|
|
*/
|
|
|
void seq_escape(struct seq_file *m, const char *s, const char *esc)
|
|
|
{
|
|
|
- char *end = m->buf + m->size;
|
|
|
- char *p;
|
|
|
- char c;
|
|
|
+ char *buf;
|
|
|
+ size_t size = seq_get_buf(m, &buf);
|
|
|
+ int ret;
|
|
|
|
|
|
- for (p = m->buf + m->count; (c = *s) != '\0' && p < end; s++) {
|
|
|
- if (!strchr(esc, c)) {
|
|
|
- *p++ = c;
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (p + 3 < end) {
|
|
|
- *p++ = '\\';
|
|
|
- *p++ = '0' + ((c & 0300) >> 6);
|
|
|
- *p++ = '0' + ((c & 070) >> 3);
|
|
|
- *p++ = '0' + (c & 07);
|
|
|
- continue;
|
|
|
- }
|
|
|
- seq_set_overflow(m);
|
|
|
- return;
|
|
|
- }
|
|
|
- m->count = p - m->buf;
|
|
|
+ ret = string_escape_str(s, buf, size, ESCAPE_OCTAL, esc);
|
|
|
+ seq_commit(m, ret < size ? ret : -1);
|
|
|
}
|
|
|
EXPORT_SYMBOL(seq_escape);
|
|
|
|