diff mbox

[-,UCM,1/2] control: enable octal and hexadecimal parse

Message ID 1421118039-8075-1-git-send-email-han.lu@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

han.lu@intel.com Jan. 13, 2015, 3 a.m. UTC
From: "Lu, Han" <han.lu@intel.com>

Signed-off-by: Lu, Han <han.lu@intel.com>

Comments

Takashi Iwai Jan. 13, 2015, 4:53 p.m. UTC | #1
At Tue, 13 Jan 2015 11:00:38 +0800,
han.lu@intel.com wrote:
> 
> From: "Lu, Han" <han.lu@intel.com>
> 
> Signed-off-by: Lu, Han <han.lu@intel.com>

Looks good to me.  Liam, any objection for this extension?


thanks,

Takashi

> 
> diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c
> index 978977d..acaf734 100644
> --- a/src/control/ctlparse.c
> +++ b/src/control/ctlparse.c
> @@ -59,10 +59,10 @@ static long get_integer(const char **ptr, long min, long max)
>  		goto out;
>  
>  	s = p;
> -	val = strtol(s, &p, 10);
> +	val = strtol(s, &p, 0);
>  	if (*p == '.') {
>  		p++;
> -		strtol(p, &p, 10);
> +		strtol(p, &p, 0);
>  	}
>  	if (*p == '%') {
>  		val = (long)convert_prange1(strtod(s, NULL), min, max);
> @@ -87,10 +87,10 @@ static long long get_integer64(const char **ptr, long long min, long long max)
>  		goto out;
>  
>  	s = p;
> -	val = strtol(s, &p, 10);
> +	val = strtol(s, &p, 0);
>  	if (*p == '.') {
>  		p++;
> -		strtol(p, &p, 10);
> +		strtol(p, &p, 0);
>  	}
>  	if (*p == '%') {
>  		val = (long long)convert_prange1(strtod(s, NULL), min, max);
> -- 
> 2.1.0
>
Liam Girdwood Jan. 13, 2015, 6:21 p.m. UTC | #2
On Tue, 2015-01-13 at 17:53 +0100, Takashi Iwai wrote:
> At Tue, 13 Jan 2015 11:00:38 +0800,
> han.lu@intel.com wrote:
> > 
> > From: "Lu, Han" <han.lu@intel.com>
> > 
> > Signed-off-by: Lu, Han <han.lu@intel.com>
> 
> Looks good to me.  Liam, any objection for this extension?
> 

Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>

> 
> thanks,
> 
> Takashi
> 
> > 
> > diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c
> > index 978977d..acaf734 100644
> > --- a/src/control/ctlparse.c
> > +++ b/src/control/ctlparse.c
> > @@ -59,10 +59,10 @@ static long get_integer(const char **ptr, long min, long max)
> >  		goto out;
> >  
> >  	s = p;
> > -	val = strtol(s, &p, 10);
> > +	val = strtol(s, &p, 0);
> >  	if (*p == '.') {
> >  		p++;
> > -		strtol(p, &p, 10);
> > +		strtol(p, &p, 0);
> >  	}
> >  	if (*p == '%') {
> >  		val = (long)convert_prange1(strtod(s, NULL), min, max);
> > @@ -87,10 +87,10 @@ static long long get_integer64(const char **ptr, long long min, long long max)
> >  		goto out;
> >  
> >  	s = p;
> > -	val = strtol(s, &p, 10);
> > +	val = strtol(s, &p, 0);
> >  	if (*p == '.') {
> >  		p++;
> > -		strtol(p, &p, 10);
> > +		strtol(p, &p, 0);
> >  	}
> >  	if (*p == '%') {
> >  		val = (long long)convert_prange1(strtod(s, NULL), min, max);
> > -- 
> > 2.1.0
> >
Takashi Iwai Jan. 13, 2015, 8:01 p.m. UTC | #3
At Tue, 13 Jan 2015 17:53:14 +0100,
Takashi Iwai wrote:
> 
> At Tue, 13 Jan 2015 11:00:38 +0800,
> han.lu@intel.com wrote:
> > 
> > From: "Lu, Han" <han.lu@intel.com>
> > 
> > Signed-off-by: Lu, Han <han.lu@intel.com>
> 
> Looks good to me.  Liam, any objection for this extension?

Erm, sorry, I correct my statement: this is buggy.  Look at the code:

> > -	val = strtol(s, &p, 10);
> > +	val = strtol(s, &p, 0);
> >  	if (*p == '.') {
> >  		p++;
> > -		strtol(p, &p, 10);
> > +		strtol(p, &p, 0);

The second strtol() is for skipping the decimals.  So this has to be
10-based.  That is, use zero-base only for the first strtol().


Takashi
han.lu@intel.com Jan. 14, 2015, 1:28 a.m. UTC | #4
> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai@suse.de]
> Sent: Wednesday, January 14, 2015 4:02 AM
> To: Takashi Iwai
> Cc: Lu, Han; Liam Girdwood; alsa-devel@alsa-project.org
> Subject: Re: [PATCH - UCM 1/2] control: enable octal and hexadecimal parse
> 
> At Tue, 13 Jan 2015 17:53:14 +0100,
> Takashi Iwai wrote:
> >
> > At Tue, 13 Jan 2015 11:00:38 +0800,
> > han.lu@intel.com wrote:
> > >
> > > From: "Lu, Han" <han.lu@intel.com>
> > >
> > > Signed-off-by: Lu, Han <han.lu@intel.com>
> >
> > Looks good to me.  Liam, any objection for this extension?
> 
> Erm, sorry, I correct my statement: this is buggy.  Look at the code:
> 
> > > -	val = strtol(s, &p, 10);
> > > +	val = strtol(s, &p, 0);
> > >  	if (*p == '.') {
> > >  		p++;
> > > -		strtol(p, &p, 10);
> > > +		strtol(p, &p, 0);
> 
> The second strtol() is for skipping the decimals.  So this has to be 10-based.
> That is, use zero-base only for the first strtol().
> 
Yes. I thought of skipping hexadecimal, but string begin with ".0x" looks not reasonable, and string begin with ".0" will not be skipped as expected with this patch.
I have removed the second change and resend the patch. Please review, Thanks.

BR,
Han Lu
> 
> Takashi
diff mbox

Patch

diff --git a/src/control/ctlparse.c b/src/control/ctlparse.c
index 978977d..acaf734 100644
--- a/src/control/ctlparse.c
+++ b/src/control/ctlparse.c
@@ -59,10 +59,10 @@  static long get_integer(const char **ptr, long min, long max)
 		goto out;
 
 	s = p;
-	val = strtol(s, &p, 10);
+	val = strtol(s, &p, 0);
 	if (*p == '.') {
 		p++;
-		strtol(p, &p, 10);
+		strtol(p, &p, 0);
 	}
 	if (*p == '%') {
 		val = (long)convert_prange1(strtod(s, NULL), min, max);
@@ -87,10 +87,10 @@  static long long get_integer64(const char **ptr, long long min, long long max)
 		goto out;
 
 	s = p;
-	val = strtol(s, &p, 10);
+	val = strtol(s, &p, 0);
 	if (*p == '.') {
 		p++;
-		strtol(p, &p, 10);
+		strtol(p, &p, 0);
 	}
 	if (*p == '%') {
 		val = (long long)convert_prange1(strtod(s, NULL), min, max);