All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Gang <gang.chen@asianux.com>
To: Joe Perches <joe@perches.com>
Cc: "John W. Linville" <linville@tuxdriver.com>,
	stas.yakovlev@gmail.com, linux-wireless@vger.kernel.org,
	netdev@vger.kernel.org
Subject: Re: [RFC PATCH] vsprintf: Add %p*D extension for 80211 SSIDs
Date: Mon, 07 Jan 2013 14:07:14 +0800	[thread overview]
Message-ID: <50EA6612.6010506@asianux.com> (raw)
In-Reply-To: <1357534195.21481.31.camel@joe-AO722>

于 2013年01月07日 12:49, Joe Perches 写道:
> On Sun, 2013-01-06 at 19:19 -0800, Joe Perches wrote:
>> Maybe these days this should be another vsprintf %p extension
>> like %pM when the DECLARE_MAC_BUF/print_mac uses were converted.
>>
>> (or maybe extend %ph for ssids with %*phs, length, array)
> 

  excuse me:
    I do not quite know how to reply the [RFC PATCH].
    it would be better if you can tell me how to do for [RFC PATCH], thanks.

    :-)


  at least for me:

    although it is good idea to add common, widely used features in public tools function.

    after searching the relative source code:
      it seems print ssid is not quite widely used (although it is a common feature).
        it is used by drivers/net/wireless/libertas
        it is used by drivers/net/wireless/ipw2x00
        no additional using in current kernel source code wide.
      if another modules want to print ssid,
        they can still call print_ssid now (EXPORT_SYMBOL in net/wireless).

    so at least now, it is not necessary to add this feature to public tools function.

  Regards

gchen.

> Maybe like this:
> 
>  lib/vsprintf.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 55 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index fab33a9..98916a0 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -26,6 +26,7 @@
>  #include <linux/math64.h>
>  #include <linux/uaccess.h>
>  #include <linux/ioport.h>
> +#include <linux/ieee80211.h>
>  #include <net/addrconf.h>
>  
>  #include <asm/page.h>		/* for PAGE_SIZE */
> @@ -660,10 +661,59 @@ char *resource_string(char *buf, char *end, struct resource *res,
>  }
>  
>  static noinline_for_stack
> +char *ssid_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
> +		  const char *fmt)
> +{
> +	int i, len = 1;		/* if we pass %*p, field width remains
> +				   negative value, fallback to the default */
> +
> +	if (spec.field_width == 0)
> +		/* nothing to print */
> +		return buf;
> +
> +	if (ZERO_OR_NULL_PTR(addr))
> +		/* NULL pointer */
> +		return string(buf, end, NULL, spec);
> +
> +	if (spec.field_width > 0)
> +		len = min_t(int, spec.field_width, IEEE80211_MAX_SSID_LEN);
> +
> +	for (i = 0; i < len && buf < end; i++) {
> +		if (isprint(addr[i])) {
> +			*buf++ = addr[i];
> +			continue;
> +		}
> +		*buf++ = '\\';
> +		if (buf >= end)
> +			continue;
> +		if (addr[i] == '\0')
> +			*buf++ = '0';
> +		else if (addr[i] == '\n')
> +			*buf++ = 'n';
> +		else if (addr[i] == '\r')
> +			*buf++ = 'r';
> +		else if (addr[i] == '\t')
> +			*buf++ = 't';
> +		else if (addr[i] == '\\')
> +			*buf++ = '\\';
> +		else {
> +			if (buf < end)
> +				*buf++ = ((addr[i] >> 6) & 7) + '0';
> +			if (buf < end)
> +				*buf++ = ((addr[i] >> 3) & 7) + '0';
> +			if (buf < end)
> +				*buf++ = ((addr[i] >> 0) & 7) + '0';
> +		}
> +	}
> +
> +	return buf;
> +}
> +
> +static noinline_for_stack
>  char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
>  		 const char *fmt)
>  {
> -	int i, len = 1;		/* if we pass '%ph[CDN]', field witdh remains
> +	int i, len = 1;		/* if we pass '%ph[CDN]', field width remains
>  				   negative value, fallback to the default */
>  	char separator;
>  
> @@ -695,7 +745,6 @@ char *hex_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
>  
>  	for (i = 0; i < len && buf < end - 1; i++) {
>  		buf = hex_byte_pack(buf, addr[i]);
> -
>  		if (buf < end && separator && i != len - 1)
>  			*buf++ = separator;
>  	}
> @@ -1016,6 +1065,8 @@ int kptr_restrict __read_mostly;
>   *             [0][1][2][3]-[4][5]-[6][7]-[8][9]-[10][11][12][13][14][15]
>   *           little endian output byte order is:
>   *             [3][2][1][0]-[5][4]-[7][6]-[8][9]-[10][11][12][13][14][15]
> + * - 'D' For a 80211 SSID, it prints the SSID escaping any non-printable
> +         characters with a leading \ and octal or [0nrt\]
>   * - 'V' For a struct va_format which contains a format string * and va_list *,
>   *       call vsnprintf(->format, *->va_list).
>   *       Implements a "recursive vsnprintf".
> @@ -1088,6 +1139,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
>  		break;
>  	case 'U':
>  		return uuid_string(buf, end, ptr, spec, fmt);
> +	case 'D':
> +		return ssid_string(buf, end, ptr, spec, fmt);
>  	case 'V':
>  		{
>  			va_list va;
> 
> 
> 
> 


-- 
Chen Gang

Asianux Corporation

  reply	other threads:[~2013-01-07  6:06 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-05 13:41 [PATCH] drivers/net/wireless/ipw2x00: use strlcpy instead of strncpy Chen Gang
2013-01-05 14:42 ` Joe Perches
2013-01-07  2:49   ` Chen Gang
2013-01-07  2:57     ` Chen Gang F T
2013-01-07  2:57       ` Chen Gang F T
2013-01-07  3:19     ` Joe Perches
2013-01-07  3:42       ` Chen Gang F T
2013-01-07  4:49       ` [RFC PATCH] vsprintf: Add %p*D extension for 80211 SSIDs Joe Perches
2013-01-07  6:07         ` Chen Gang [this message]
2013-01-07  6:37           ` Joe Perches
2013-01-07  6:37             ` Joe Perches
2013-01-07  6:58             ` Chen Gang
2013-01-07  6:58               ` Chen Gang
2013-01-07  7:47         ` Johannes Berg
2013-01-07 17:22           ` Joe Perches
2013-01-08  2:57             ` Chen Gang
2013-01-08  2:57               ` Chen Gang
2013-01-08  3:11               ` Joe Perches
2013-01-08  3:11                 ` Joe Perches
2013-01-08  3:20                 ` Chen Gang

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=50EA6612.6010506@asianux.com \
    --to=gang.chen@asianux.com \
    --cc=joe@perches.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=netdev@vger.kernel.org \
    --cc=stas.yakovlev@gmail.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.