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)
|
#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)
|
static void add_pid(const pid_t pid)
|
||||||
{
|
{
|
||||||
pid_list **curr = &G.pid_list_head;
|
pid_list **curr = &G.pid_list_head;
|
||||||
@ -104,8 +79,15 @@ static void scan_proc_net(const char *path, unsigned port)
|
|||||||
unsigned tmp_port;
|
unsigned tmp_port;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
struct stat st;
|
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);
|
f = fopen_for_read(path);
|
||||||
if (!f)
|
if (!f)
|
||||||
@ -284,11 +266,15 @@ Find processes which use FILEs or PORTs
|
|||||||
|
|
||||||
pp = argv;
|
pp = argv;
|
||||||
while (*pp) {
|
while (*pp) {
|
||||||
char *path = parse_net_arg(*pp, &port);
|
/* parse net arg */
|
||||||
if (path) { /* PORT/PROTO */
|
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);
|
scan_proc_net(path, port);
|
||||||
free(path);
|
|
||||||
} else { /* FILE */
|
} else { /* FILE */
|
||||||
|
file:
|
||||||
xstat(*pp, &st);
|
xstat(*pp, &st);
|
||||||
add_inode(&st);
|
add_inode(&st);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user