[git commit master] fuser: code shrink

Denys Vlasenko vda.linux at googlemail.com
Sun Jun 6 20:56:12 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=e3657dcdd655ec96fc6bf38c40dd6a6f015a83de
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
fuser_main                                           918     871     -47

Signed-off-by: Maksym Kryzhanovskyy <xmaks at email.cz>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 procps/fuser.c |   44 +++++++++++++++-----------------------------
 1 files changed, 15 insertions(+), 29 deletions(-)

diff --git a/procps/fuser.c b/procps/fuser.c
index 7465d45..85523c3 100644
--- a/procps/fuser.c
+++ b/procps/fuser.c
@@ -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);
 		}
-- 
1.6.3.3



More information about the busybox-cvs mailing list