bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-wget] [PATCH 20/25] New option --metalink-index to process Meta


From: Giuseppe Scrivano
Subject: Re: [Bug-wget] [PATCH 20/25] New option --metalink-index to process Metalink application/metalink4+xml
Date: Wed, 14 Sep 2016 13:03:58 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

Hi Matthew,

Matthew White <address@hidden> writes:

> On Sun, 11 Sep 2016 23:39:09 +0200
> Giuseppe Scrivano <address@hidden> wrote:
>
>> Hi Matthew,
>> 
>> Matthew White <address@hidden> writes:
>> 
>> > +void
>> > +replace_metalink_basename (char **name, char *ref)
>> > +{
>> > +  size_t dir_len = 0;
>> > +  char *p, *dir, *file, *new;
>> > +
>> > +  if (!name)
>> > +    return;
>> > +
>> > +  /* New basename from file name reference.  */
>> > +  file = ref;
>> > +  if (file)
>> > +    {
>> > +      p = strrchr (file, '/');
>> > +      if (p)
>> > +        file = p + 1;
>> > +    }
>> > +
>> > +  /* Old directory.  */
>> > +  dir = NULL;
>> > +  if (*name)
>> > +    {
>> > +      p = strrchr (*name, '/');
>> > +      if (p)
>> > +        dir_len = (p - *name) + 1;
>> > +    }
>> > +  dir = xstrndup (*name, dir_len);
>> 
>> I'll review this patch more in details, but one small thing here, could
>> we modify name in place and avoid a memory allocation for dir?
>> 
>> name[dir_len] = '\0';
>
> Function amended to modify *name in place.
>
> Followed Tim's suggestions for Patch 09/25 about different environments 
> compatibility, the function now uses last_component() to detect the basename:
> http://lists.gnu.org/archive/html/bug-wget/2016-09/msg00083.html
>
> NOTES: if *name is NULL and ref is like 'dir/C:D:file', the result will be 
> 'C:D:file'; is it advisable to remove the drive letters 'C:D:' and return 
> only 'file'?
>
> /*
>   Replace/remove the basename of a file name.
>
>   The file name is permanently modified.
>
>   Always set NAME to a string, even an empty one.
>
>   Use REF's basename as replacement.  If REF is NULL or if it doesn't
>   provide a valid basename candidate, then remove NAME's basename.
> */
> void
> replace_metalink_basename (char **name, char *ref)
> {

is it something we could do using only dirname and basename?  What you
need here is "dirname(name) + basename(ref)"?

Regards,
Giuseppe



reply via email to

[Prev in Thread] Current Thread [Next in Thread]