[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-wget] Replace some loops with string.h functions
From: |
Tim Rühsen |
Subject: |
Re: [Bug-wget] Replace some loops with string.h functions |
Date: |
Sun, 28 Oct 2018 10:37:33 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 |
Pushed, thanks for your contribution !
On 26.10.18 15:33, Kapus, Timotej wrote:
> Hi,
>
> I'm writing a program analysis that tries to find and replace some loops with
> str* functions. I'm trying to see if these replacements are a useful
> refactoring or the loops are intentional. I noticed that wget has a couple of
> these loops and wrote a patch (pasted below) that changes this.
>
> I replaced 1 loop with strspn, which is clearer to me and 1 loop with
> strrchr, which is both clearer and should probably be faster on most systems.
> There is also some precedent for these refactorings in commits 1fa77ff5b and
> e976d4
>
> Cheers,
> Timotej
>
> From 0bec668e02073738fe560b92fb2a51712420cf26 Mon Sep 17 00:00:00 2001
> From: Timotej Kapus <address@hidden>
> Date: Fri, 26 Oct 2018 14:28:01 +0100
> Subject: [PATCH] Replace loops with string.h functions
>
> * src/init.c Replace loop with strspn
> * src/url.c Replace loop with strrchr
> ---
> src/init.c | 5 +++--
> src/url.c | 5 ++---
> 2 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/init.c b/src/init.c
> index 2fac8ae..64e19b2 100644
> --- a/src/init.c
> +++ b/src/init.c
> @@ -885,8 +885,10 @@ parse_line (const char *line, char **com, char **val,
> int *comind)
>
> #if defined(WINDOWS) || defined(MSDOS)
> # define ISSEP(c) ((c) == '/' || (c) == '\\')
> +# define SEPSTRING "/\\"
> #else
> # define ISSEP(c) ((c) == '/')
> +# define SEPSTRING "/"
> #endif
>
> /* Run commands[comind].action. */
> @@ -927,8 +929,7 @@ setval_internal_tilde (int comind, const char *com, const
> char *val)
> xfree (*pstring);
>
> /* Skip the leading "~/". */
> - for (++val; ISSEP (*val); val++)
> - ;
> + val += strspn(val + 1, SEPSTRING) + 1;
> *pstring = concat_strings (home, "/", val, (char *)0);
> xfree (home);
> }
> diff --git a/src/url.c b/src/url.c
> index 2e0b730..4b2263c 100644
> --- a/src/url.c
> +++ b/src/url.c
> @@ -1248,9 +1248,8 @@ mkalldirs (const char *path)
> struct stat st;
> int res;
>
> - p = path + strlen (path);
> - for (; *p != '/' && p != path; p--)
> - ;
> + p = strrchr(path, '/');
> + p = p == NULL ? path : p;
>
> /* Don't create if it's just a file. */
> if ((p == path) && (*p != '/'))
> --
> 2.7.4
>
>
>
signature.asc
Description: OpenPGP digital signature