void print_all() { storage_print(); size_print(); clist_print(); }
int main(int argc, char **argv) { #if 0 { //system("cat /proc/self/status"); int i; for (i = 0; i < argc; i++) printf("*%s* ", argv[i]); printf("\n"); } #endif if (argc < 2) { fprintf(stderr, "Error fldd: invalid arguments\n"); usage(); exit(1); } if (strcmp(argv[1], "--help") == 0) { usage(); return 0; } // check program access if (access(argv[1], R_OK)) { fprintf(stderr, "Error fldd: cannot access %s\n", argv[1]); exit(1); } char *quiet = getenv("FIREJAIL_QUIET"); if (quiet && strcmp(quiet, "yes") == 0) arg_quiet = 1; if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-?") ==0) { usage(); return 0; } int fd = STDOUT_FILENO; // attempt to open the file if (argc == 3) { fd = open(argv[2], O_CREAT | O_TRUNC | O_WRONLY, 0644); if (!fd) { fprintf(stderr, "Error fldd: invalid arguments\n"); usage(); exit(1); } } // initialize local storage lib_paths_init(); // process files struct stat s; if (stat(argv[1], &s) == -1) errExit("stat"); if (S_ISDIR(s.st_mode)) walk_directory(argv[1]); else { if (is_lib_64(argv[1])) parse_elf(argv[1]); else fprintf(stderr, "Warning fldd: %s is not a 64bit program/library\n", argv[1]); } // print libraries and exit storage_print(libs, fd); if (argc == 3) close(fd); return 0; }