#include <dirent.h> /* readdir() */
#include <sys/types.h>
#include <pwd.h>
-#include "cmdline.h" /* TODO: This file should be independent of command line options */
#include "user.h"
#include "fd.h"
#include "string.h"
/** This is always a power of two. It is set in create_hash_table(). */
static uint32_t uid_hash_table_size;
-/* Array of indices to the entries of \a uid_hash_table. */
-static int *uid_hash_table_sort_idx;
-
/** The number of used slots in the hash table. */
static uint32_t num_uids;
ui->desc->num_columns = NUM_UT_COLUMNS;
ui->desc->flags = 0;
ui->desc->column_descriptions = user_table_cols;
- ui->desc->dir = adu_strdup(conf.database_dir_arg);
+ ui->desc->dir = adu_strdup(database_dir);
ui->desc->name = make_message("%u", (unsigned)ui->uid);
pw = getpwuid(ui->uid);
if (pw && pw->pw_name)
assert(uid_hash_table);
for (i = 0; i < uid_hash_table_size; i++) {
int ret;
- struct user_info *ui = uid_hash_table +
- uid_hash_table_sort_idx[i];
+ struct user_info *ui = uid_hash_table + i;
if (!ui_used(ui) || !ui_admissible(ui))
continue;
*/
void create_hash_table(unsigned bits)
{
- int i;
-
uid_hash_table_size = 1 << bits;
uid_hash_table = adu_calloc(uid_hash_table_size *
sizeof(struct user_info));
- uid_hash_table_sort_idx = adu_malloc(uid_hash_table_size * sizeof(int));
- for (i = 0; i < uid_hash_table_size; i++)
- uid_hash_table_sort_idx[i] = i;
}
/**
}
free(uid_hash_table);
uid_hash_table = NULL;
- free(uid_hash_table_sort_idx);
- uid_hash_table_sort_idx = NULL;
}
/*
static char *get_uid_list_name(void)
{
- return make_message("%s/uid_list", conf.database_dir_arg);
-}
-
-static int (*hash_table_comparator)(struct user_info *a, struct user_info *b);
-
-static int comp_wrapper(const void *a, const void *b)
-{
- struct user_info *x = uid_hash_table + *(unsigned *)a;
- struct user_info *y = uid_hash_table + *(unsigned *)b;
- return hash_table_comparator(x, y);
-}
-
-/**
- * Sort the hash table according to a given comparator.
- *
- * \param comp The comparator.
- *
- * The comparator is a user-defined function which must return 1, 0, or -1.
- *
- * \sa qsort(3).
- */
-void sort_hash_table(int (*comp)(struct user_info *, struct user_info *))
-{
- hash_table_comparator = comp;
- qsort(uid_hash_table_sort_idx, uid_hash_table_size,
- sizeof(*uid_hash_table_sort_idx), comp_wrapper);
+ return make_message("%s/uid_list", database_dir);
}
-
/**
* Open the osl tables for all admissible uids.
*