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:
Maksym Kryzhanovskyy 2010-06-06 22:56:12 +02:00 committed by Denys Vlasenko
parent c8aae0b2a0
commit e3657dcdd6

View File

@ -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);
} }