X-Git-Url: http://git.tuebingen.mpg.de/?p=adu.git;a=blobdiff_plain;f=create.c;h=65567e03ee592065cfd4126ac6398b8890dd71e6;hp=a27fe8e7097af4a2c0b8be44e99fa8a42dedb120;hb=e302759338931fca58ee2497dbcc7c86ef6963bf;hpb=446214f9b5a360d09206d9d5141482c9e5a8f053 diff --git a/create.c b/create.c index a27fe8e..65567e0 100644 --- a/create.c +++ b/create.c @@ -4,49 +4,21 @@ * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file create.c The create mode of adu. */ +/** \file create.c \brief The create mode of adu. */ #include /* readdir() */ +#include "format.h" #include "adu.h" #include "gcc-compat.h" #include "cmdline.h" #include "fd.h" #include "string.h" #include "error.h" -#include "portable_io.h" +#include "user.h" /* Id of the device containing the base dir. */ static dev_t device_id; -static int write_uid(struct user_info *ui, void *data) -{ - char **p = data; - - write_u32(*p, ui->uid); - *p += sizeof(uint32_t); - return 1; -} - -static int write_uid_list(void) -{ - char *buf, *p, *filename; - size_t size = num_uids * sizeof(uint32_t); - int ret; - - if (!num_uids) - return 0; - buf = p = adu_malloc(size); - ret = for_each_admissible_user(write_uid, &p); - if (ret < 0) - goto out; - filename = get_uid_list_name(); - ret = adu_write_file(filename, buf, size); - free(filename); -out: - free(buf); - return ret; -} - static int add_directory(char *dirname, uint64_t *dir_num, uint64_t *parent_dir_num, uint64_t *dir_size, uint64_t *dir_files) { @@ -86,9 +58,7 @@ static int update_user_row(struct osl_table *t, uint64_t dir_num, objects[UT_BYTES].size = sizeof(*add); objects[UT_FILES].data = &num_files; objects[UT_FILES].size = sizeof(num_files); - INFO_LOG("######################### ret: %d\n", ret); ret = osl(osl_add_row(t, objects)); - INFO_LOG("######################### ret: %d\n", ret); return ret; } else { /* add size and increment file count */ uint64_t num; @@ -161,7 +131,7 @@ static int scan_dir(char *dirname, uint64_t *parent_dir_num) dir_size += size; dir_files++; uid = s.st_uid; - ret = search_uid(uid, CREATE_USER_TABLE | OPEN_USER_TABLE, &ui); + ret = create_user_table(uid, &ui); if (ret < 0) goto out; ui->bytes += size; @@ -181,7 +151,12 @@ out: return ret; } -int com_create() +/** + * The main function of the create mode. + * + * \return Standard. + */ +int com_create(void) { uint64_t zero = 0ULL; int ret; @@ -200,8 +175,7 @@ int com_create() ret = scan_dir(conf.base_dir_arg, &zero); if (ret < 0) goto out; - ret = write_uid_list(); + ret = write_uid_file(); out: - close_all_tables(); return ret; }