* Re: [dm-devel] [PATCH v4 00/12] introduce skip_spaces(), reducing code size plus some clean-ups
[not found] <cover.1257602781.git.andre.goddard@gmail.com>
@ 2009-11-08 16:05 ` James Bottomley
2009-11-08 16:52 ` André Goddard Rosa
[not found] ` <c7d3b02b5e28eaa54a5360d57dfd177c44320187.1257602781.git.andre.goddard@gmail.com>
[not found] ` <7d5883637aa976b54e944998f635d47a41618a75.1257602781.git.andre.goddard@gmail.com>
2 siblings, 1 reply; 5+ messages in thread
From: James Bottomley @ 2009-11-08 16:05 UTC (permalink / raw)
To: device-mapper development
Cc: Pavel Roskin, Stefan Haberland, Jan Kara, linux-cachefs,
Mike Snitzer, Neil Brown, Frederic Weisbecker, Jens Axboe,
Heiko Carstens, James E . J . Bottomley, ibm-acpi-devel, Chr,
Julia Lawall, H . Peter Anvin, Daire Byrne, Alasdair G Kergon,
Greg Banks, Stefan Weinhuber, Eric Sandeen, Adam Belay,
netfilter-devel, Helge Deller, x86, James Morris, Takashi Iwai,
Ingo Molnar, Alan Cox
On Sat, 2009-11-07 at 13:16 -0200, Andr=C3=A9 Goddard Rosa wrote:
> This patch reduces lib.a code size by 173 bytes on my Core 2 with gcc 4=
.4.1
> even considering that it exports a newly defined function skip_spaces()
> to drivers:
> text data bss dec hex filename =
=20
> 64867 840 592 66299 102fb (TOTALS-lib.a-before)
> 64954 584 588 66126 1024e (TOTALS-lib.a-after)
> and implements some code tidy up.
>=20
> Besides reducing lib.a size, it converts many in-tree drivers to use th=
e
> newly defined function, which makes another small reduction on kernel s=
ize
> overall when those drivers are used.
Before we embark on something as massive as this, could we take a step
back. I agree that if I were coming up with the strstip() interface
today I probably wouldn't have given it two overloaded uses.
However, I think the function, in spite of this minor issue, is very
usable. I still don't understand why people thought adding a
__must_check, which is what damaged one of the overloaded uses, is a
good idea.
Assuming there's a good answer to the above:
> + * skip_spaces - Removes leading whitespace from @s.
> + * @s: The string to be stripped.
> + *
> + * Returns a pointer to the first non-whitespace character in @s.
> + */
> +const char *skip_spaces(const char *str)
I don't think const return is a good idea because most functions will be
manipulating the string and using pointers that won't be const, so this
will generate a ton of 'initialization discards qualifiers from pointer
target type' ... so that leads to the question of whether this patch
series was actually compiled ...
James
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 10/12] string: factorize skip_spaces and export it to be generally available
[not found] ` <c7d3b02b5e28eaa54a5360d57dfd177c44320187.1257602781.git.andre.goddard@gmail.com>
@ 2009-11-08 16:50 ` Alan Cox
0 siblings, 0 replies; 5+ messages in thread
From: Alan Cox @ 2009-11-08 16:50 UTC (permalink / raw)
To: André Goddard Rosa
Cc: Andreas Dilger, Mike Snitzer, Takashi Iwai, Kysela,
Stefan Weinhuber, Eric Sandeen, James E . J . Bottomley,
linux-cachefs, WANG Cong, Len Brown, Trond Myklebust,
Rusty Russell, netfilter, Al Viro, Thomas Gleixner, Engelhardt,
Bjorn Helgaas, Martin K . Petersen, linux-kernel, Stoyan Gaydarov,
Kyle McMartin, netfilter-devel, Joe Perches, Andrew Morton
On Sat, 7 Nov 2009 13:16:18 -0200
Andr=E9 Goddard Rosa <andre.goddard@gmail.com> wrote:
> On the following sentence:
> while (*s && isspace(*s))
> s++;
Looks fine but for one thing: it's actually shorter inline than moved
into /lib so at the very least it should be a header inline not a
function call.
Second minor comment. Although it never made it into the final ANSI C,
the proposed name (and the one used in a lot of other non Linux code for
this) is stpblk().
Alan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dm-devel] [PATCH v4 00/12] introduce skip_spaces(), reducing code size plus some clean-ups
2009-11-08 16:05 ` [dm-devel] [PATCH v4 00/12] introduce skip_spaces(), reducing code size plus some clean-ups James Bottomley
@ 2009-11-08 16:52 ` André Goddard Rosa
0 siblings, 0 replies; 5+ messages in thread
From: André Goddard Rosa @ 2009-11-08 16:52 UTC (permalink / raw)
To: James Bottomley
Cc: Pavel Roskin, Stefan Haberland, Jan Kara, linux-cachefs,
Mike Snitzer, Neil Brown, Frederic Weisbecker, Jens Axboe,
Heiko Carstens, James E . J . Bottomley, ibm-acpi-devel,
device-mapper development, Julia Lawall, H . Peter Anvin,
Daire Byrne, Alan Cox, Greg Banks, Stefan Weinhuber, Eric Sandeen,
Adam Belay, netfilter-devel, Helge Deller, x86, James Morris,
Takashi Iwai, Ing
Hi, James!
On Sun, Nov 8, 2009 at 2:05 PM, James Bottomley
<James.Bottomley@hansenpartnership.com> wrote:
> On Sat, 2009-11-07 at 13:16 -0200, Andr=E9 Goddard Rosa wrote:
>> This patch reduces lib.a code size by 173 bytes on my Core 2 with gcc =
4.4.1
>> even considering that it exports a newly defined function skip_spaces(=
)
>> to drivers:
>> =A0 =A0text =A0 =A0data =A0 =A0 bss =A0 =A0 dec =A0 =A0 hex filename
>> =A0 64867 =A0 =A0 840 =A0 =A0 592 =A0 66299 =A0 102fb (TOTALS-lib.a-be=
fore)
>> =A0 64954 =A0 =A0 584 =A0 =A0 588 =A0 66126 =A0 1024e (TOTALS-lib.a-af=
ter)
>> and implements some code tidy up.
>>
>> Besides reducing lib.a size, it converts many in-tree drivers to use t=
he
>> newly defined function, which makes another small reduction on kernel =
size
>> overall when those drivers are used.
>
> Before we embark on something as massive as this, could we take a step
> back. =A0I agree that if I were coming up with the strstip() interface
> today I probably wouldn't have given it two overloaded uses.
>
> However, I think the function, in spite of this minor issue, is very
> usable. =A0I still don't understand why people thought adding a
> __must_check, which is what damaged one of the overloaded uses, is a
> good idea.
Differently of "static void strip(char *str)"@scripts/kconfig/conf.c ,
this function
does not moves the characters to the beginning of the string, so that if =
that
string is going to be reused it should refer to the newly returned string=
start.
I've changed it to remove the const and return a "char *".
Do you think __must_check is not needed as well?
Thanks,
Andr=E9
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 12/12] tree-wide: convert open calls to remove spaces to skip_spaces() lib function
[not found] ` <7d5883637aa976b54e944998f635d47a41618a75.1257602781.git.andre.goddard@gmail.com>
@ 2009-11-08 18:47 ` Theodore Tso
2009-11-08 20:23 ` Julia Lawall
0 siblings, 1 reply; 5+ messages in thread
From: Theodore Tso @ 2009-11-08 18:47 UTC (permalink / raw)
To: André Goddard Rosa
Cc: Pavel Roskin, Stefan Haberland, Jan Kara, linux-cachefs,
Mike Snitzer, Neil Brown, Frederic Weisbecker, Jens Axboe,
Heiko Carstens, James E . J . Bottomley, ibm-acpi-devel, dm-devel,
Julia Lawall, H . Peter Anvin, Daire Byrne, Alasdair G Kergon,
Greg Banks, Stefan Weinhuber, Eric Sandeen, Adam Belay,
Helge Deller, x86, James Morris, Takashi Iwai, Ingo Molnar,
Alan Cox
On Sat, Nov 07, 2009 at 01:16:20PM -0200, Andr=E9 Goddard Rosa wrote:
> Makes use of skip_spaces() defined in lib/string.c for removing leading
> spaces from strings all over the tree.
>=20
> Also, while at it, if we see (*str && isspace(*str)), we can be sure to
> remove the first condition (*str) as the second one (isspace(*str)) als=
o
> evaluates to 0 whenever *str =3D=3D 0, making it redundant. In other wo=
rds,
> "a char equals zero is never a space".
There are a number of places that have the pattern of skipping
whitespace, calling simpler_strtoul(), and then skipping whitespace
afterwards. And thinkpad_acpi.c and fs/ext4/super.c both have an
indentical function, parse_strotul(), which basically does this plus
doing actual error checking (a number of callers of simple_strtoul
aren't checking to see if the user passed in a valid number or not,
boo.)
I would suggest that we should lift parse_strtoul() into lib/, both to
save a bit of code, as well as encouraging people to do proper input
validation, while we are doing this tree-wide cleanup.
- Ted
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v4 12/12] tree-wide: convert open calls to remove spaces to skip_spaces() lib function
2009-11-08 18:47 ` [PATCH v4 12/12] tree-wide: convert open calls to remove spaces to skip_spaces() lib function Theodore Tso
@ 2009-11-08 20:23 ` Julia Lawall
0 siblings, 0 replies; 5+ messages in thread
From: Julia Lawall @ 2009-11-08 20:23 UTC (permalink / raw)
To: Theodore Tso
Cc: Pavel Roskin, Stefan Haberland, Jan Kara, linux-cachefs,
Mike Snitzer, Neil Brown, Frederic Weisbecker, Jens Axboe,
Heiko Carstens, James E . J . Bottomley, ibm-acpi-devel, dm-devel,
H . Peter Anvin, Daire Byrne, Alasdair G Kergon, Greg Banks,
Stefan Weinhuber, Eric Sandeen, Adam Belay, Helge Deller, x86,
James Morris, Takashi Iwai, André Goddard Rosa, Alan Cox
> > Also, while at it, if we see (*str && isspace(*str)), we can be sure to
> > remove the first condition (*str) as the second one (isspace(*str)) also
> > evaluates to 0 whenever *str == 0, making it redundant. In other words,
> > "a char equals zero is never a space".
I tried the following semantic patch (http://coccinelle.lip6.fr), and got
the results below.
@@
expression str;
@@
( // ignore skip_spaces cases
while (*str && isspace(*str)) { \(str++;\|++str;\) }
|
- *str &&
isspace(*str)
)
I haven't checked the results in any way, however.
julia
diff -u -p a/drivers/leds/led-class.c b/drivers/leds/led-class.c
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -50,7 +50,7 @@ static ssize_t led_brightness_store(stru
unsigned long state = simple_strtoul(buf, &after, 10);
size_t count = after - buf;
- if (*after && isspace(*after))
+ if (isspace(*after))
count++;
if (count == size) {
diff -u -p a/drivers/leds/ledtrig-timer.c b/drivers/leds/ledtrig-timer.c
--- a/drivers/leds/ledtrig-timer.c
+++ b/drivers/leds/ledtrig-timer.c
@@ -83,7 +83,7 @@ static ssize_t led_delay_on_store(struct
unsigned long state = simple_strtoul(buf, &after, 10);
size_t count = after - buf;
- if (*after && isspace(*after))
+ if (isspace(*after))
count++;
if (count == size) {
@@ -127,7 +127,7 @@ static ssize_t led_delay_off_store(struc
unsigned long state = simple_strtoul(buf, &after, 10);
size_t count = after - buf;
- if (*after && isspace(*after))
+ if (isspace(*after))
count++;
if (count == size) {
diff -u -p a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -101,7 +101,7 @@ static ssize_t lcd_store_power(struct de
int power = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;
- if (*endp && isspace(*endp))
+ if (isspace(*endp))
size++;
if (size != count)
return -EINVAL;
@@ -140,7 +140,7 @@ static ssize_t lcd_store_contrast(struct
int contrast = simple_strtoul(buf, &endp, 0);
size_t size = endp - buf;
- if (*endp && isspace(*endp))
+ if (isspace(*endp))
size++;
if (size != count)
return -EINVAL;
diff -u -p a/drivers/video/display/display-sysfs.c b/drivers/video/display/display-sysfs.c
--- a/drivers/video/display/display-sysfs.c
+++ b/drivers/video/display/display-sysfs.c
@@ -67,7 +67,7 @@ static ssize_t display_store_contrast(st
contrast = simple_strtoul(buf, &endp, 0);
size = endp - buf;
- if (*endp && isspace(*endp))
+ if (isspace(*endp))
size++;
if (size != count)
diff -u -p a/drivers/video/output.c b/drivers/video/output.c
--- a/drivers/video/output.c
+++ b/drivers/video/output.c
@@ -50,7 +50,7 @@ static ssize_t video_output_store_state(
int request_state = simple_strtoul(buf,&endp,0);
size_t size = endp - buf;
- if (*endp && isspace(*endp))
+ if (isspace(*endp))
size++;
if (size != count)
return -EINVAL;
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-11-08 20:23 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <cover.1257602781.git.andre.goddard@gmail.com>
2009-11-08 16:05 ` [dm-devel] [PATCH v4 00/12] introduce skip_spaces(), reducing code size plus some clean-ups James Bottomley
2009-11-08 16:52 ` André Goddard Rosa
[not found] ` <c7d3b02b5e28eaa54a5360d57dfd177c44320187.1257602781.git.andre.goddard@gmail.com>
2009-11-08 16:50 ` [PATCH v4 10/12] string: factorize skip_spaces and export it to be generally available Alan Cox
[not found] ` <7d5883637aa976b54e944998f635d47a41618a75.1257602781.git.andre.goddard@gmail.com>
2009-11-08 18:47 ` [PATCH v4 12/12] tree-wide: convert open calls to remove spaces to skip_spaces() lib function Theodore Tso
2009-11-08 20:23 ` Julia Lawall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox