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

Re: [PATCH] Refactor: make a separate function to add files



Hi!

Some comments about format from the other patch apply here as well.

On Sat, 2009-08-29 at 19:59:20 -0400, David Benjamin wrote:
> Here's the second refactoring patch mentioned in "dpkg list-file performance".
> 
> ===
> Refactor: make a separate function to add files
> 
> Added private function _add_file_to_package for inserting a file to a
> package's entries. The function takes a pos_hint to avoid an O(n^2) loop
> when adding to the end of the list. (This is what the original code
> does, so I have mirrored its behavior.)
> 
> Signed-off-by: David Benjamin <davidben@mit.edu>
> ---
>  src/filesdb.c |   77 ++++++++++++++++++++++++++++++++++++--------------------
>  1 files changed, 49 insertions(+), 28 deletions(-)
> 
> diff --git a/src/filesdb.c b/src/filesdb.c
> index a437a40..e672e94 100644
> --- a/src/filesdb.c
> +++ b/src/filesdb.c
> @@ -116,15 +116,59 @@ static void _erase_pkg_file_data(struct pkginfo *pkg) {
>    pkg->clientdata->files = NULL;
>  }
> + /* add a file to pkg. pos_hint is to help find the end of the list
> +  */
> +typedef struct fileinlist **fileinlist_hint;

No typedefs for structs.

> +static fileinlist_hint _add_file_to_package(struct pkginfo *pkg, const char *file, enum fnnflags flags, fileinlist_hint pos_hint) {

Renamed this to pkg_files_add_file. Renamed pos_hint to the more
descriptive file_tail.

> +  struct fileinlist *newent;
> +  struct filepackages *packageslump;
> +  int putat;

Initialized putat here.

> +  ensure_package_clientdata(pkg);

Added blank line here.

> +  if (pos_hint == NULL)
> +    pos_hint = &pkg->clientdata->files;
> +  /* Make sure we're at the end */
> +  while ((*pos_hint) != NULL) {
> +    pos_hint = &((*pos_hint)->next);
> +  }
> +
> +  /* Create a new node */
> +  newent = nfmalloc(sizeof(struct fileinlist));
> +  newent->namenode = findnamenode(file, flags);
> +  newent->next = NULL;
> +  *pos_hint = newent;
> +  pos_hint = &newent->next;
> +
> +  /* Add pkg to newent's package list */
> +  packageslump = newent->namenode->packages;
> +  putat = 0;

Hmmm and just noticed I forgot to remove this one.

> +  if (packageslump) {
> +    for (; putat < PERFILEPACKAGESLUMP && packageslump->pkgs[putat];
> +         putat++);

Changed this to a while().

> +    if (putat >= PERFILEPACKAGESLUMP)
> +      packageslump = NULL;
> +  }
> +  if (!packageslump) {
> +    packageslump = nfmalloc(sizeof(struct filepackages));
> +    packageslump->more = newent->namenode->packages;
> +    newent->namenode->packages = packageslump;
> +    putat= 0;
> +  }
> +  packageslump->pkgs[putat]= pkg;

Space missing before equal.

> +  if (++putat < PERFILEPACKAGESLUMP)
> +    packageslump->pkgs[putat] = NULL;
> +
> +  /* Return the position for the next guy */
> +  return pos_hint;
> +}
> +

Pushed, thanks!

regards,
guillem


Reply to: