Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <sys/stat.h>
- #include <dirent.h>
- #include <unistd.h>
- #include <limits.h>
- #include <string.h>
- int
- main(int argc, char *argv[])
- {
- DIR *main_dir = opendir(argv[1]);
- if (main_dir == NULL) {
- return 1;
- }
- unsigned long long sum = 0;
- struct dirent *curr_dir;
- while ((curr_dir = readdir(main_dir)) != NULL) {
- _Bool is_eq1 = strcmp(curr_dir->d_name, ".");
- _Bool is_eq2 = strcmp(curr_dir->d_name, "..");
- _Bool is_symb = 'A' <= curr_dir->d_name[0] && curr_dir->d_name[0] <= 'Z';
- if (is_eq1 && is_eq2 && is_symb) {
- char folder[PATH_MAX];
- snprintf(folder, PATH_MAX, "%s%s", argv[1], curr_dir->d_name);
- struct stat f;
- _Bool is_exists = stat(folder, &f) != -1;
- _Bool is_reg = S_ISREG(f.st_mode);
- _Bool is_uid_equ = f.st_uid == getuid();
- sum = is_exists && is_reg && is_uid_equ ? sum + f.st_size : sum;
- }
- }
- printf("%llu", sum);
- if (closedir(main_dir) == -1) {
- return -1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment