mirror of
https://github.com/sheumann/hush.git
synced 2024-12-30 05:29:47 +00:00
fuser: code shrink
function old new delta fuser_main 918 871 -47 Signed-off-by: Maksym Kryzhanovskyy <xmaks@email.cz> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
c8aae0b2a0
commit
e3657dcdd6
@ -40,31 +40,6 @@ struct globals {
|
||||
#define INIT_G() do { } while (0)
|
||||
|
||||
|
||||
static dev_t find_socket_dev(void)
|
||||
{
|
||||
int fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (fd >= 0) {
|
||||
struct stat buf;
|
||||
int r = fstat(fd, &buf);
|
||||
close(fd);
|
||||
if (r == 0)
|
||||
return buf.st_dev;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *parse_net_arg(const char *arg, unsigned *port)
|
||||
{
|
||||
char path[20], tproto[5];
|
||||
|
||||
if (sscanf(arg, "%u/%4s", port, tproto) != 2)
|
||||
return NULL;
|
||||
sprintf(path, "/proc/net/%s", tproto);
|
||||
if (access(path, R_OK) != 0)
|
||||
return NULL;
|
||||
return xstrdup(path);
|
||||
}
|
||||
|
||||
static void add_pid(const pid_t pid)
|
||||
{
|
||||
pid_list **curr = &G.pid_list_head;
|
||||
@ -104,8 +79,15 @@ static void scan_proc_net(const char *path, unsigned port)
|
||||
unsigned tmp_port;
|
||||
FILE *f;
|
||||
struct stat st;
|
||||
int fd;
|
||||
|
||||
st.st_dev = find_socket_dev();
|
||||
/* find socket dev */
|
||||
st.st_dev = 0;
|
||||
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (fd >= 0) {
|
||||
fstat(fd, &st);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
f = fopen_for_read(path);
|
||||
if (!f)
|
||||
@ -284,11 +266,15 @@ Find processes which use FILEs or PORTs
|
||||
|
||||
pp = argv;
|
||||
while (*pp) {
|
||||
char *path = parse_net_arg(*pp, &port);
|
||||
if (path) { /* PORT/PROTO */
|
||||
/* parse net arg */
|
||||
char path[20], tproto[5];
|
||||
if (sscanf(*pp, "%u/%4s", &port, tproto) != 2)
|
||||
goto file;
|
||||
sprintf(path, "/proc/net/%s", tproto);
|
||||
if (access(path, R_OK) != 0) { /* PORT/PROTO */
|
||||
scan_proc_net(path, port);
|
||||
free(path);
|
||||
} else { /* FILE */
|
||||
file:
|
||||
xstat(*pp, &st);
|
||||
add_inode(&st);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user