/** \file create.c The create mode of adu. */
#include <dirent.h> /* readdir() */
+#include "format.h"
#include "adu.h"
#include "gcc-compat.h"
#include "cmdline.h"
static int write_uid_list(void)
{
char *buf, *p, *filename;
- uint32_t count = 0;
- struct user_info *ui;
size_t size = num_uids * sizeof(uint32_t);
int ret;
struct dirent *entry;
int ret, cwd_fd, ret2;
uint64_t dir_size = 0, dir_files = 0;
- uint64_t this_dir_num = ++num_dirs;
+ /* dir count. */
+ static uint64_t current_dir_num;
+
+ uint64_t this_dir_num = ++current_dir_num;
check_signals();
- DEBUG_LOG("----------------- %llu: %s\n", (long long unsigned)num_dirs, dirname);
+ DEBUG_LOG("----------------- %llu: %s\n", (long long unsigned)current_dir_num, dirname);
ret = adu_opendir(dirname, &dir, &cwd_fd);
if (ret < 0) {
if (ret != -ERRNO_TO_ERROR(EACCES))
}
while ((entry = readdir(dir))) {
mode_t m;
- struct stat s;
+ struct stat64 s;
uint32_t uid;
uint64_t size;
struct user_info *ui;
continue;
if (!strcmp(entry->d_name, ".."))
continue;
- if (lstat(entry->d_name, &s) == -1) {
- WARNING_LOG("lstat error for %s/%s\n", dirname,
- entry->d_name);
+ if (lstat64(entry->d_name, &s) == -1) {
+ WARNING_LOG("lstat64 error for %s/%s (%s)\n",
+ dirname, entry->d_name, strerror(errno));
continue;
}
m = s.st_mode;
/* regular file */
size = s.st_size;
dir_size += size;
- num_bytes += size;
dir_files++;
- num_files++;
uid = s.st_uid;
- ret = search_uid(uid, CREATE_USER_TABLE | OPEN_USER_TABLE, &ui);
+ ret = search_uid(uid, NULL, CREATE_USER_TABLE | OPEN_USER_TABLE, &ui);
if (ret < 0)
goto out;
ui->bytes += size;
return ret;
}
-int com_create()
+int com_create(void)
{
uint64_t zero = 0ULL;
int ret;