[Rpm-maint] [rpm-software-management/rpm] debugedit: Distinguish files from directories in src list file (#1436)
mark at klomp.org
Sun Nov 15 20:28:00 UTC 2020
On Sun, 2020-11-15 at 07:20 -0800, Vitalio wrote:
> Append '/' to directories in source file list (for `-l'
> option) to allow
> quickly distinguish them from regular files (to avoid adding them raw
> into %files section). This is needed for ALT for our debuginfo
> processing to speed things up.
I understand you would like to make sure all comp_dirs end with a
trailing '/' character. But I don't think unconditionally adding a '/'
is the right thing to do:
> diff --git a/tools/debugedit.c b/tools/debugedit.c
> index c2884933c..2eb912c72 100644
> --- a/tools/debugedit.c
> +++ b/tools/debugedit.c
> @@ -1923,7 +1923,7 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
> const char *p = skip_dir_prefix (comp_dir, base_dir);
> if (p != NULL && p != '\0')
> - size_t size = strlen (p) + 1;
> + size_t size = strlen (p);
> while (size > 0)
> ssize_t ret = write (list_file_fd, p, size);
> @@ -1932,6 +1932,10 @@ edit_attributes (DSO *dso, unsigned char *ptr, struct abbrev_tag *t, int phase)
> size -= ret;
> p += ret;
> + /* Output trailing dir separator to distinguish them quickly from
> + regular files. */
> + if (size == 0)
> + write (list_file_fd, "/", 2);
Note for others, the list_file contains zero terminated file names.
That is why we want to write size = strlen (p) + 1 characters, so that
it includes the '\0' terminator.
After the while loop size is always zero, unless an error occurred and
not all characters were written. So this code would add a "/"
(including a termination '\0') always, even if there was already one.
So I think you actually want to test that p != '/' before adding the
string "/", but just write (list_file_fd, "", 1) otherwise.
BTW. How does this help you speed things up?
More information about the Rpm-maint