fuser: code shrink
authorMaksym Kryzhanovskyy <xmaks@email.cz>
Sun, 6 Jun 2010 20:56:12 +0000 (22:56 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 6 Jun 2010 20:56:12 +0000 (22:56 +0200)
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>
procps/fuser.c

index 7465d455499641f05a0e064d27e6091d80c5558a..85523c31c116395611e9283b0f6c0bb0a80f8b2e 100644 (file)
@@ -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);
                }