* tools: usbip: detach: avoid calling strlen() at each iteration
@ 2015-09-15 20:27 Eric Curtin
2015-09-15 20:55 ` Aaro Koskinen
0 siblings, 1 reply; 4+ messages in thread
From: Eric Curtin @ 2015-09-15 20:27 UTC (permalink / raw)
To: valentina.manea.m, shuah.kh; +Cc: linux-usb, linux-kernel
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;
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: tools: usbip: detach: avoid calling strlen() at each iteration
2015-09-15 20:27 tools: usbip: detach: avoid calling strlen() at each iteration Eric Curtin
@ 2015-09-15 20:55 ` Aaro Koskinen
2015-09-16 7:25 ` Clemens Ladisch
2015-09-16 13:44 ` David Laight
0 siblings, 2 replies; 4+ messages in thread
From: Aaro Koskinen @ 2015-09-15 20:55 UTC (permalink / raw)
To: Eric Curtin; +Cc: valentina.manea.m, shuah.kh, linux-usb, linux-kernel
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: tools: usbip: detach: avoid calling strlen() at each iteration
2015-09-15 20:55 ` Aaro Koskinen
@ 2015-09-16 7:25 ` Clemens Ladisch
2015-09-16 13:44 ` David Laight
1 sibling, 0 replies; 4+ messages in thread
From: Clemens Ladisch @ 2015-09-16 7:25 UTC (permalink / raw)
To: Aaro Koskinen, Eric Curtin
Cc: valentina.manea.m, shuah.kh, linux-usb, linux-kernel
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
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: tools: usbip: detach: avoid calling strlen() at each iteration
2015-09-15 20:55 ` Aaro Koskinen
2015-09-16 7:25 ` Clemens Ladisch
@ 2015-09-16 13:44 ` David Laight
1 sibling, 0 replies; 4+ messages in thread
From: David Laight @ 2015-09-16 13:44 UTC (permalink / raw)
To: 'Aaro Koskinen', Eric Curtin
Cc: valentina.manea.m@gmail.com, shuah.kh@samsung.com,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-09-16 13:44 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-15 20:27 tools: usbip: detach: avoid calling strlen() at each iteration Eric Curtin
2015-09-15 20:55 ` Aaro Koskinen
2015-09-16 7:25 ` Clemens Ladisch
2015-09-16 13:44 ` David Laight
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox