root/maint/gnulib/lib/file-set.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. record_file
  2. seen_file

   1 /* Specialized functions to manipulate a set of files.
   2    Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* written by Jim Meyering */
  18 
  19 #include <config.h>
  20 #include "file-set.h"
  21 
  22 #include "hash-triple.h"
  23 #include "xalloc.h"
  24 
  25 /* Record file, FILE, and dev/ino from *STATS, in the hash table, HT.
  26    If HT is NULL, return immediately.
  27    If memory allocation fails, exit immediately.  */
  28 void
  29 record_file (Hash_table *ht, char const *file, struct stat const *stats)
     /* [previous][next][first][last][top][bottom][index][help] */
  30 {
  31   struct F_triple *ent;
  32 
  33   if (ht == NULL)
  34     return;
  35 
  36   ent = xmalloc (sizeof *ent);
  37   ent->name = xstrdup (file);
  38   ent->st_ino = stats->st_ino;
  39   ent->st_dev = stats->st_dev;
  40 
  41   {
  42     struct F_triple *ent_from_table = hash_insert (ht, ent);
  43     if (ent_from_table == NULL)
  44       {
  45         /* Insertion failed due to lack of memory.  */
  46         xalloc_die ();
  47       }
  48 
  49     if (ent_from_table != ent)
  50       {
  51         /* There was already a matching entry in the table, so ENT was
  52            not inserted.  Free it.  */
  53         triple_free (ent);
  54       }
  55   }
  56 }
  57 
  58 /* Return true if there is an entry in hash table, HT,
  59    for the file described by FILE and STATS.  */
  60 bool
  61 seen_file (Hash_table const *ht, char const *file,
     /* [previous][next][first][last][top][bottom][index][help] */
  62            struct stat const *stats)
  63 {
  64   struct F_triple new_ent;
  65 
  66   if (ht == NULL)
  67     return false;
  68 
  69   new_ent.name = (char *) file;
  70   new_ent.st_ino = stats->st_ino;
  71   new_ent.st_dev = stats->st_dev;
  72 
  73   return !!hash_lookup (ht, &new_ent);
  74 }

/* [previous][next][first][last][top][bottom][index][help] */