From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "John W. Linville" <linville@tuxdriver.com>,
Johannes Berg <johannes@sipsolutions.net>,
devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 2/6] lib / string_helpers: introduce string_escape_mem()
Date: Thu, 03 Jul 2014 12:53:14 +0300 [thread overview]
Message-ID: <1404381194.5102.69.camel@smile.fi.intel.com> (raw)
In-Reply-To: <20140702150150.b87702934d47fd481646f6ff@linux-foundation.org>
On Wed, 2014-07-02 at 15:01 -0700, Andrew Morton wrote:
> On Wed, 2 Jul 2014 16:20:25 +0300 Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>
> > This is almost the opposite function to string_unescape(). Nevertheless it
> > handles \0 and could be used for any byte buffer.
> >
> > The documentation is supplied together with the function prototype.
> >
> > The test cases covers most of the scenarios and would be expanded later on.
> >
> > ...
> >
> > --- a/include/linux/string_helpers.h
> > +++ b/include/linux/string_helpers.h
> > @@ -71,4 +71,87 @@ static inline int string_unescape_any_inplace(char *buf)
> > return string_unescape_any(buf, buf, 0);
> > }
> >
> > +#define ESCAPE_SPACE 0x01
> > +#define ESCAPE_SPECIAL 0x02
> > +#define ESCAPE_NULL 0x04
> > +#define ESCAPE_OCTAL 0x08
> > +#define ESCAPE_ANY \
> > + (ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_SPECIAL | ESCAPE_NULL)
> > +#define ESCAPE_NP 0x10
> > +#define ESCAPE_ANY_NP (ESCAPE_ANY | ESCAPE_NP)
> > +#define ESCAPE_HEX 0x20
> > +
> > +/**
> > + * string_escape_mem - quote characters in the given memory buffer
>
> It drive me nuts when the kerneldoc is in the .h file. Who thinks of
> looking there? I realise that string_unescape() already did that, but
> I'd prefer that we fix string_unescape() rather than imitate it.
No problem, I will do this in separate patch.
>
> > --- a/lib/string_helpers.c
> > +++ b/lib/string_helpers.c
>
> This is a lot of code! Adds nearly a kbyte. I'm surprised that
> escaping a string is so verbose.
> I wonder if the implementation really needs to be so comprehensive?
I studied several kernel cases and try to cover most of them.
> Would a table-driven approach be more compact?
Do you mean something like ctype set of functions?
I wouldn't think so, we have a lot of variations how we would like to
escape. Currently I have such cases covered in terms of flags I
introduced (not all of them in this series):
- ESCAPE_OCTAL (with dictionary)
- ESCAPE_ANY_NP
- ESCAPE_HEX | ESCAPE_NP
- ESCAPE_NULL
... not yet in form of patch
- ESCAPE_SPACE | ESCAPE_SPECIAL (with dictionary)
I can't currently realize how table could cover all of that.
> > static int __init test_string_helpers_init(void)
> > {
> > unsigned int i;
> > @@ -112,6 +315,16 @@ static int __init test_string_helpers_init(void)
> > test_string_unescape("unescape inplace",
> > get_random_int() % (UNESCAPE_ANY + 1), true);
> >
> > + /* Without dictionary */
> > + for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
> > + test_string_escape("escape 0", escape0, i, TEST_STRING_2_DICT_0);
> > +
> > + /* With dictionary */
> > + for (i = 0; i < (ESCAPE_ANY_NP | ESCAPE_HEX) + 1; i++)
> > + test_string_escape("escape 1", escape1, i, TEST_STRING_2_DICT_1);
> > +
> > + test_string_escape_nomem();
> > +
> > return -EINVAL;
> > }
>
> I wonder why this returns -EINVAL.
The idea of course to not let module be loaded. I saw this return code
in test_kstrtox.c. Would you suggest better approach?
--
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2014-07-03 9:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-02 13:20 [PATCH 0/6] lib / string_helpers: introduce string_escape_mem Andy Shevchenko
2014-07-02 13:20 ` [PATCH 1/6] lib / string_helpers: clean up test suite Andy Shevchenko
2014-07-02 21:54 ` Andrew Morton
2014-07-03 9:34 ` Andy Shevchenko
2014-07-02 13:20 ` [PATCH 2/6] lib / string_helpers: introduce string_escape_mem() Andy Shevchenko
2014-07-02 22:01 ` Andrew Morton
2014-07-03 9:53 ` Andy Shevchenko [this message]
2014-07-02 13:20 ` [PATCH 3/6] lib80211: re-use string_escape_mem_any_np() Andy Shevchenko
2014-07-02 13:43 ` Joe Perches
2014-07-02 14:06 ` Andy Shevchenko
2014-07-02 16:30 ` Joe Perches
2014-07-03 10:49 ` Andy Shevchenko
2014-07-02 13:20 ` [PATCH 4/6] staging: wlan-ng: re-use string_escape_mem() Andy Shevchenko
2014-07-02 13:20 ` [PATCH 5/6] staging: rtl8192e: " Andy Shevchenko
2014-07-02 13:35 ` Joe Perches
2014-07-02 14:11 ` Andy Shevchenko
2014-07-02 13:20 ` [PATCH 6/6] staging: rtl8192u: " Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1404381194.5102.69.camel@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.