]> git.tuebingen.mpg.de Git - adu.git/blobdiff - adu.c
Write the list of all uids to a file.
[adu.git] / adu.c
diff --git a/adu.c b/adu.c
index a7ac6b49aa05629c59169cb2f29f044a9413e747..5f674dc78e06a3389b0e10fe158f2aea2affa285 100644 (file)
--- a/adu.c
+++ b/adu.c
@@ -10,6 +10,8 @@
 
 DEFINE_ERRLIST;
 
+#define DATABASE_DIR "/tmp/adu"
+
 /** evaluates to 1 if x < y, to -1 if x > y and to 0 if x == y */
 #define NUM_COMPARE(x, y) ((int)((x) < (y)) - (int)((x) > (y)))
 
@@ -135,7 +137,7 @@ static struct osl_table_description dir_table_desc = {
        .num_columns = NUM_DT_COLUMNS,
        .flags = 0,
        .column_descriptions = dir_table_cols,
-       .dir = "/tmp/adu"
+       .dir = DATABASE_DIR
 };
 
 /** The columns of the id table. */
@@ -194,6 +196,8 @@ int add_directory(char *dirname, uint32_t dir_num, uint64_t *dir_size,
        return osl_add_row(dir_table, dir_objects);
 }
 
+static uint32_t num_uids;
+
 int create_and_open_user_table(uint32_t uid, struct osl_table **t)
 {
        int ret;
@@ -202,9 +206,11 @@ int create_and_open_user_table(uint32_t uid, struct osl_table **t)
        desc->num_columns = NUM_UT_COLUMNS;
        desc->flags = 0;
        desc->column_descriptions = user_table_cols;
-       desc->dir = para_strdup("/tmp/adu");
+       desc->dir = para_strdup(DATABASE_DIR);
        desc->name = make_message("%u", uid);
-       INFO_LOG("................................. %u\n", uid);
+       num_uids++;
+       INFO_LOG(".............................uid #%u: %u\n",
+               (unsigned)num_uids, (unsigned)uid);
 //     user_table_desc.name = make_message("%u", uid);
        ret = osl_create_table(desc);
        if (ret < 0)
@@ -521,6 +527,35 @@ static int print_statistics(void)
        return 1;
 }
 
+static int write_uid_list(void)
+{
+       char *buf, *filename = DATABASE_DIR "/" "uid_list";
+       uint32_t count = 0;
+       struct user_info *ui;
+       size_t size = num_uids * sizeof(uint32_t);
+       int ret;
+
+       if (!num_uids)
+               return 0;
+       buf = para_malloc(size);
+       FOR_EACH_USER(ui) {
+               if (!ui->table)
+                       continue;
+               write_u32(buf + count++ * sizeof(uint32_t), ui->uid);
+       }
+       ret = para_write_file(filename, buf, size);
+       free(buf);
+       return ret;
+}
+
+static int com_create(char *dirname)
+{
+       int ret = scan_dir(dirname);
+
+       if (ret < 0)
+               return ret;
+       return write_uid_list();
+}
 
 int main(int argc, char **argv)
 {
@@ -533,7 +568,7 @@ int main(int argc, char **argv)
        ret = -E_SYNTAX;
        if (argc != 2)
                goto out;
-       ret = scan_dir(argv[1]);
+       ret = com_create(argv[1]);
        if (ret < 0)
                goto out;
        print_statistics();