-static int add_directory(char *dirname, uint64_t *dir_num, uint64_t *parent_dir_num,
- uint64_t *dir_size, uint64_t *dir_files)
-{
- struct osl_object dir_objects[NUM_DT_COLUMNS];
-
- INFO_LOG("adding #%llu: %s\n", (long long unsigned)*dir_num, dirname);
- dir_objects[DT_NAME].data = dirname;
- dir_objects[DT_NAME].size = strlen(dirname) + 1;
- dir_objects[DT_NUM].data = dir_num;
- dir_objects[DT_NUM].size = sizeof(*dir_num);
- dir_objects[DT_PARENT_NUM].data = parent_dir_num;
- dir_objects[DT_PARENT_NUM].size = sizeof(*parent_dir_num);
- dir_objects[DT_BYTES].data = dir_size;
- dir_objects[DT_BYTES].size = sizeof(*dir_size);
- dir_objects[DT_FILES].data = dir_files;
- dir_objects[DT_FILES].size = sizeof(*dir_files);
- return osl(osl_add_row(dir_table, dir_objects));
-}
-
-static int open_user_table(struct user_info *ui, int create)
-{
- int ret;
- struct passwd *pw;
-
- ui->desc = adu_malloc(sizeof(*ui->desc));
- 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->name = make_message("%u", (unsigned)ui->uid);
- pw = getpwuid(ui->uid);
- if (pw && pw->pw_name)
- ui->pw_name = adu_strdup(pw->pw_name);
-
- INFO_LOG(".............................uid #%u: %u\n",
- (unsigned)num_uids, (unsigned)ui->uid);
- if (create) {
- ret = osl(osl_create_table(ui->desc));
- if (ret < 0)
- goto err;
- num_uids++;
- }
- ret = osl(osl_open_table(ui->desc, &ui->table));
- if (ret < 0)
- goto err;
- return 1;
-err:
- free((char *)ui->desc->name);
- free((char *)ui->desc->dir);
- free(ui->pw_name);
- free(ui->desc);
- ui->desc->name = NULL;
- ui->desc->dir = NULL;
- ui->desc = NULL;
- ui->table = NULL;
- ui->flags = 0;
- return ret;
-}
-
-#define uid_hash_bits 8
-uint32_t uid_hash_table_size = 1 << uid_hash_bits;
-#define PRIME1 0x811c9dc5
-#define PRIME2 0x01000193
-
-void create_hash_table(void)
-{
- uid_hash_table = adu_calloc(uid_hash_table_size
- * sizeof(struct user_info));
-}
-
-static void free_hash_table(void)
-{
- free(uid_hash_table);
- uid_hash_table = NULL;
-}
-
-static int create_tables(void)
-{
- int ret;
-
- dir_table_desc.dir = adu_strdup(conf.database_dir_arg);
- ret = osl(osl_create_table(&dir_table_desc));
- if (ret < 0)
- return ret;
- create_hash_table();
- return 1;
-}
-