aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksym Kryzhanovskyy <xmaks@email.cz>2010-06-06 22:56:12 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-06-06 22:56:12 +0200
commite3657dcdd655ec96fc6bf38c40dd6a6f015a83de (patch)
tree53bd8c2b7437dc5940afbb0731a447bfa19d5ae1
parentc8aae0b2a0406b499ec8dea4a1e29b52be9da0d0 (diff)
downloadbusybox-w32-e3657dcdd655ec96fc6bf38c40dd6a6f015a83de.tar.gz
busybox-w32-e3657dcdd655ec96fc6bf38c40dd6a6f015a83de.tar.bz2
busybox-w32-e3657dcdd655ec96fc6bf38c40dd6a6f015a83de.zip
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>
-rw-r--r--procps/fuser.c44
1 files changed, 15 insertions, 29 deletions
diff --git a/procps/fuser.c b/procps/fuser.c
index 7465d4554..85523c31c 100644
--- a/procps/fuser.c
+++ b/procps/fuser.c
@@ -40,31 +40,6 @@ struct globals {
40#define INIT_G() do { } while (0) 40#define INIT_G() do { } while (0)
41 41
42 42
43static dev_t find_socket_dev(void)
44{
45 int fd = socket(AF_INET, SOCK_DGRAM, 0);
46 if (fd >= 0) {
47 struct stat buf;
48 int r = fstat(fd, &buf);
49 close(fd);
50 if (r == 0)
51 return buf.st_dev;
52 }
53 return 0;
54}
55
56static char *parse_net_arg(const char *arg, unsigned *port)
57{
58 char path[20], tproto[5];
59
60 if (sscanf(arg, "%u/%4s", port, tproto) != 2)
61 return NULL;
62 sprintf(path, "/proc/net/%s", tproto);
63 if (access(path, R_OK) != 0)
64 return NULL;
65 return xstrdup(path);
66}
67
68static void add_pid(const pid_t pid) 43static void add_pid(const pid_t pid)
69{ 44{
70 pid_list **curr = &G.pid_list_head; 45 pid_list **curr = &G.pid_list_head;
@@ -104,8 +79,15 @@ static void scan_proc_net(const char *path, unsigned port)
104 unsigned tmp_port; 79 unsigned tmp_port;
105 FILE *f; 80 FILE *f;
106 struct stat st; 81 struct stat st;
82 int fd;
107 83
108 st.st_dev = find_socket_dev(); 84 /* find socket dev */
85 st.st_dev = 0;
86 fd = socket(AF_INET, SOCK_DGRAM, 0);
87 if (fd >= 0) {
88 fstat(fd, &st);
89 close(fd);
90 }
109 91
110 f = fopen_for_read(path); 92 f = fopen_for_read(path);
111 if (!f) 93 if (!f)
@@ -284,11 +266,15 @@ Find processes which use FILEs or PORTs
284 266
285 pp = argv; 267 pp = argv;
286 while (*pp) { 268 while (*pp) {
287 char *path = parse_net_arg(*pp, &port); 269 /* parse net arg */
288 if (path) { /* PORT/PROTO */ 270 char path[20], tproto[5];
271 if (sscanf(*pp, "%u/%4s", &port, tproto) != 2)
272 goto file;
273 sprintf(path, "/proc/net/%s", tproto);
274 if (access(path, R_OK) != 0) { /* PORT/PROTO */
289 scan_proc_net(path, port); 275 scan_proc_net(path, port);
290 free(path);
291 } else { /* FILE */ 276 } else { /* FILE */
277 file:
292 xstat(*pp, &st); 278 xstat(*pp, &st);
293 add_inode(&st); 279 add_inode(&st);
294 } 280 }