Move file-set and hash-triple modules to gnulib.

* bootstrap.conf (gnulib_modules): Remove file-set, now that
it's in gnulib, and the canonicalize module requires it there.
* gl/lib/file-set.c, gl/lib/file-set.h, gl/modules/hash-triple: Remove.
* gl/lib/hash-triple.c, gl/lib/hash-triple.h, gl/modules/file-set: Remove.
This commit is contained in:
Jim Meyering 2007-09-25 22:24:21 +02:00
parent beaa39a649
commit 491c54ca99
8 changed files with 7 additions and 190 deletions

View File

@ -1,5 +1,12 @@
2007-09-27 Jim Meyering <jim@meyering.net>
Move file-set and hash-triple modules to gnulib.
* bootstrap.conf (gnulib_modules): Remove file-set, now that
it's in gnulib, and the canonicalize module requires it there.
* gl/lib/file-set.c, gl/lib/file-set.h, gl/modules/hash-triple: Remove.
* gl/lib/hash-triple.c, gl/lib/hash-triple.h, gl/modules/file-set:
Remove.
Add a test to exercise a readlink bug.
* tests/misc/readlink-fp-loop: New file. Test for the readlink bug
fixed through today's change to Gnulib's canonicalize module.

View File

@ -45,7 +45,6 @@ gnulib_modules="
cycle-check
d-ino d-type diacrit dirfd dirname dup2
error euidaccess exclude exitfail fchdir fcntl fcntl-safer fdl
file-set
file-type fileblocks filemode filenamecat fnmatch-gnu
fopen-safer
fprintftime

View File

@ -1,56 +0,0 @@
#include <config.h>
#include "file-set.h"
#include "hash-triple.h"
#include "xalloc.h"
/* Record destination file, FILE, and dev/ino from *STATS,
in the hash table, HT. If HT is NULL, return immediately.
If memory allocation fails, exit immediately. */
void
record_file (Hash_table *ht, char const *file, struct stat const *stats)
{
struct F_triple *ent;
if (ht == NULL)
return;
ent = xmalloc (sizeof *ent);
ent->name = xstrdup (file);
ent->st_ino = stats->st_ino;
ent->st_dev = stats->st_dev;
{
struct F_triple *ent_from_table = hash_insert (ht, ent);
if (ent_from_table == NULL)
{
/* Insertion failed due to lack of memory. */
xalloc_die ();
}
if (ent_from_table != ent)
{
/* There was alread a matching entry in the table, so ENT was
not inserted. Free it. */
triple_free (ent);
}
}
}
/* Return true if there is an entry in hash table, HT,
for the file described by FILE and STATS. */
bool
seen_file (Hash_table const *ht, char const *file,
struct stat const *stats)
{
struct F_triple new_ent;
if (ht == NULL)
return false;
new_ent.name = (char *) file;
new_ent.st_ino = stats->st_ino;
new_ent.st_dev = stats->st_dev;
return !!hash_lookup (ht, &new_ent);
}

View File

@ -1,12 +0,0 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <stdbool.h>
#include "hash.h"
extern void record_file (Hash_table *ht, char const *file,
struct stat const *stats)
__attribute__((nonnull(2, 3)));
extern bool seen_file (Hash_table const *ht, char const *file,
struct stat const *stats);

View File

@ -1,48 +0,0 @@
#include <config.h>
#include "hash-triple.h"
#include <stdlib.h>
#include "hash-pjw.h"
#include "same.h"
#include "same-inode.h"
/* Hash an F_triple, and *do* consider the file name. */
size_t
triple_hash (void const *x, size_t table_size)
{
struct F_triple const *p = x;
size_t tmp = hash_pjw (p->name, table_size);
/* Ignoring the device number here should be fine. */
return (tmp ^ p->st_ino) % table_size;
}
/* Hash an F_triple, without considering the file name. */
size_t
triple_hash_no_name (void const *x, size_t table_size)
{
struct F_triple const *p = x;
/* Ignoring the device number here should be fine. */
return p->st_ino % table_size;
}
/* Compare two F_triple structs. */
bool
triple_compare (void const *x, void const *y)
{
struct F_triple const *a = x;
struct F_triple const *b = y;
return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false;
}
/* Free an F_triple. */
void
triple_free (void *x)
{
struct F_triple *a = x;
free (a->name);
free (a);
}

View File

@ -1,21 +0,0 @@
#ifndef HASH_TRIPLE_H
#define HASH_TRIPLE_H
#include <sys/types.h>
#include <sys/stat.h>
#include <stdbool.h>
/* Describe a just-created or just-renamed destination file. */
struct F_triple
{
char *name;
ino_t st_ino;
dev_t st_dev;
};
extern size_t triple_hash (void const *x, size_t table_size);
extern size_t triple_hash_no_name (void const *x, size_t table_size);
extern bool triple_compare (void const *x, void const *y);
extern void triple_free (void *x);
#endif

View File

@ -1,27 +0,0 @@
Description:
Very specialized set-of-files code.
Files:
lib/file-set.c
lib/file-set.h
Depends-on:
hash
hash-triple
stdbool
xalloc
xalloc-die
configure.ac:
Makefile.am:
lib_SOURCES += file-set.c
Include:
"file-set.h"
License:
GPL
Maintainer:
Jim Meyering

View File

@ -1,25 +0,0 @@
Description:
Hash functions for file-related triples: name, device, inode.
Files:
lib/hash-triple.c
lib/hash-triple.h
Depends-on:
hash-pjw
same
same-inode
configure.ac:
Makefile.am:
lib_SOURCES += hash-triple.c
Include:
"hash-triple.h"
License:
GPL
Maintainer:
Jim Meyering