Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1225537 > unrolled thread
| Started by | Eric Curtin <ericcurtin17@gmail.com> |
|---|---|
| First post | 2015-09-15 22:30 +0200 |
| Last post | 2015-09-16 15:50 +0200 |
| Articles | 4 — 4 participants |
Back to article view | Back to linux.kernel
tools: usbip: detach: avoid calling strlen() at each iteration Eric Curtin <ericcurtin17@gmail.com> - 2015-09-15 22:30 +0200
Re: tools: usbip: detach: avoid calling strlen() at each iteration Aaro Koskinen <aaro.koskinen@iki.fi> - 2015-09-15 23:10 +0200
Re: tools: usbip: detach: avoid calling strlen() at each iteration Clemens Ladisch <clemens@ladisch.de> - 2015-09-16 09:40 +0200
RE: tools: usbip: detach: avoid calling strlen() at each iteration David Laight <David.Laight@ACULAB.COM> - 2015-09-16 15:50 +0200
| From | Eric Curtin <ericcurtin17@gmail.com> |
|---|---|
| Date | 2015-09-15 22:30 +0200 |
| Subject | tools: usbip: detach: avoid calling strlen() at each iteration |
| Message-ID | <q951x-7Hp-35@gated-at.bofh.it> |
Instead of calling strlen on every iteration of the for loop, just call it
once and cache the result in a temporary local variable which will be used
in the for loop instead.
Signed-off-by: Eric Curtin <ericcurtin17@gmail.com>
diff --git a/tools/usb/usbip/src/usbip_detach.c b/tools/usb/usbip/src/usbip_detach.c
index 05c6d15..9db9d21 100644
--- a/tools/usb/usbip/src/usbip_detach.c
+++ b/tools/usb/usbip/src/usbip_detach.c
@@ -47,7 +47,9 @@ static int detach_port(char *port)
uint8_t portnum;
char path[PATH_MAX+1];
- for (unsigned int i = 0; i < strlen(port); i++)
+ unsigned int port_len = strlen(port);
+
+ for (unsigned int i = 0; i < port_len; i++)
if (!isdigit(port[i])) {
err("invalid port %s", port);
return -1;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Aaro Koskinen <aaro.koskinen@iki.fi> |
|---|---|
| Date | 2015-09-15 23:10 +0200 |
| Message-ID | <q95Ed-vd-1@gated-at.bofh.it> |
| In reply to | #1225537 |
Hi, On Tue, Sep 15, 2015 at 09:27:20PM +0100, Eric Curtin wrote: > Instead of calling strlen on every iteration of the for loop, just call it > once and cache the result in a temporary local variable which will be used > in the for loop instead. > > Signed-off-by: Eric Curtin <ericcurtin17@gmail.com> > > diff --git a/tools/usb/usbip/src/usbip_detach.c b/tools/usb/usbip/src/usbip_detach.c > index 05c6d15..9db9d21 100644 > --- a/tools/usb/usbip/src/usbip_detach.c > +++ b/tools/usb/usbip/src/usbip_detach.c > @@ -47,7 +47,9 @@ static int detach_port(char *port) > uint8_t portnum; > char path[PATH_MAX+1]; > The above blank line should be deleted if you declare a new local variable below... > - for (unsigned int i = 0; i < strlen(port); i++) > + unsigned int port_len = strlen(port); > + > + for (unsigned int i = 0; i < port_len; i++) port is read only in this function, so maybe just use "const" and the compiler should know to do the same without adding a new variable? A. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Clemens Ladisch <clemens@ladisch.de> |
|---|---|
| Date | 2015-09-16 09:40 +0200 |
| Message-ID | <q9ftV-6eY-57@gated-at.bofh.it> |
| In reply to | #1225547 |
Aaro Koskinen wrote: > On Tue, Sep 15, 2015 at 09:27:20PM +0100, Eric Curtin wrote: >> - for (unsigned int i = 0; i < strlen(port); i++) >> + unsigned int port_len = strlen(port); >> + >> + for (unsigned int i = 0; i < port_len; i++) > > port is read only in this function, so maybe just use "const" and the > compiler should know to do the same without adding a new variable? If the compiler knows the implementation of strlen() (because it's a built-in function), then it sees that nobody modifies port[] in the loop. If the compiler does not know the implementation of strlen() (because -fno-builtins is used), then it is possible that some other function has a valid non-const pointer and modifies the data through it. (Anyway, the detach_port() function is not time critical, so I don't think that optimizing it is worthwhile if it reduces readability. But seeing the strlen() call at that place grates on me; I'm not against moving it out of the loop.) The loop goes through the string one character at a time, so it might be possible to drop strlen() altogether and just stop the loop when the end of the string is reached. But the actual purpose of the loop is to check whether there is a valid number. This could be done more easily by replacing the loop and the following atoi() call with strtol(). Regards, Clemens -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Laight <David.Laight@ACULAB.COM> |
|---|---|
| Date | 2015-09-16 15:50 +0200 |
| Message-ID | <q9lfY-64l-35@gated-at.bofh.it> |
| In reply to | #1225547 |
From: Aaro Koskinen > Sent: 15 September 2015 21:56 ... > > - for (unsigned int i = 0; i < strlen(port); i++) > > + unsigned int port_len = strlen(port); > > + > > + for (unsigned int i = 0; i < port_len; i++) > > port is read only in this function, so maybe just use "const" and the > compiler should know to do the same without adding a new variable? While I've seen the compiler make the assumption, I'm not sure it should assume that data that is 'const' in one function cannot be modified by a called function. (Unless the compiler has some way of knowing that the called function cannot obtain a non-const pointer to the referenced data.) (This is also independent of whether the const pointer is passed to the function.) David -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web