* 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: [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
[parent not found: <c7d3b02b5e28eaa54a5360d57dfd177c44320187.1257602781.git.andre.goddard@gmail.com>]
* 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
[parent not found: <7d5883637aa976b54e944998f635d47a41618a75.1257602781.git.andre.goddard@gmail.com>]
* 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