/* NB: does chdir internally */ static pid_list *scan_proc_pids(inode_list *ilist) { DIR *d; struct dirent *de; pid_t pid; pid_list *plist; xchdir("/proc"); d = opendir("/proc"); if (!d) return NULL; plist = NULL; while ((de = readdir(d)) != NULL) { pid = (pid_t)bb_strtou(de->d_name, NULL, 10); if (errno) continue; if (chdir(de->d_name) < 0) continue; plist = scan_link("cwd", pid, ilist, plist); plist = scan_link("exe", pid, ilist, plist); plist = scan_link("root", pid, ilist, plist); plist = scan_dir_links("fd", pid, ilist, plist); plist = scan_dir_links("lib", pid, ilist, plist); plist = scan_dir_links("mmap", pid, ilist, plist); plist = scan_pid_maps("maps", pid, ilist, plist); xchdir("/proc"); } closedir(d); return plist; }
/* NB: does chdir internally */ static void scan_proc_pids(void) { DIR *d; struct dirent *de; pid_t pid; xchdir("/proc"); d = opendir("/proc"); if (!d) return; while ((de = readdir(d)) != NULL) { pid = (pid_t)bb_strtou(de->d_name, NULL, 10); if (errno) continue; if (chdir(de->d_name) < 0) continue; scan_link("cwd", pid); scan_link("exe", pid); scan_link("root", pid); scan_dir_links("fd", pid); scan_dir_links("lib", pid); scan_dir_links("mmap", pid); scan_pid_maps("maps", pid); xchdir("/proc"); } closedir(d); }