]> granicus.if.org Git - psmisc/commitdiff
fuser doesnt use losetup
authorCraig Small <csmall@users.sourceforge.net>
Wed, 20 Dec 2000 03:39:08 +0000 (03:39 +0000)
committerCraig Small <csmall@users.sourceforge.net>
Wed, 20 Dec 2000 03:39:08 +0000 (03:39 +0000)
ChangeLog
README
src/fuser.c

index 581db7962224300d13b771da918ec4fd1c2c199c..c6b14a4ced9ae005e1e914088447809387067de3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,7 +5,8 @@ Changes from 19 to 20 (14-DEC-2000)
  - License changed to GPL
  - signames.h generated better (suggested by Grant Erickson)
  - uses getopt() for better command line stuff
- - makes less assumptions about pcess name, closes Debian Bug #53337
+ - makes less assumptions about process name, closes Debian Bug #53337
+ - Doesn't use losetup for loop deivces in fuser.
 
 Changes from version 18 to 19 (25-OCT-1999)
 =============================
diff --git a/README b/README
index 34a6f82073e0438a6f213adaa5ddc791bcb363fd..7ae83708e64f9db1c3ee298ccb1a818c99241e4d 100644 (file)
--- a/README
+++ b/README
@@ -12,3 +12,7 @@ This package contains four little utilities that use the proc FS:
 They should work with most recent kernels. Man pages are included.
 
 - Werner Almesberger <Werner.Almesberger@epfl.ch>
+
+src/loop.h was stolen from util-linux package which in turn stole it from
+the Linux kernel.
+
index a5ddf8fc02373f8370c19a742f78372544297ad3..8834a3c9dbb75421bcb1b6dfed2c52f149657c84 100644 (file)
@@ -16,6 +16,7 @@
 #include <signal.h>
 #include <limits.h>
 #include <netdb.h>
+#include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <netinet/in.h>
@@ -24,6 +25,7 @@
 #include <linux/major.h>       /* for LOOP_MAJOR */
 
 #include "comm.h"
+#include "loop.h"         /* for loop_info */
 #include "signals.h"
 
 
@@ -418,7 +420,6 @@ scan_mounts (void)
   FILE *file;
   struct stat st_dev, st_parent, st_mounted;
   char line[MAX_LINE + 1], path[PATH_MAX + 1], mounted[PATH_MAX + 3];
-  char tmp[MAX_LINE + 1];
   char *end;
 
   if (!(file = fopen (PROC_BASE "/mounts", "r")))
@@ -432,19 +433,15 @@ scan_mounts (void)
        continue;               /* might be NFS or such */
       if (S_ISBLK (st_dev.st_mode) && MAJOR (st_dev.st_rdev) == LOOP_MAJOR)
        {
-         FILE *pipe;
-
-         sprintf (tmp, "losetup %s", path);
-         if (!(pipe = popen (tmp, "r")))
-           fprintf (stderr, "popen(%s) failed\n", tmp);
-         else
-           {
-             int dev, ino;
-
-             if (fscanf (pipe, "%*s [%x]:%d", &dev, &ino) == 2)
-               add_other (it_loop, dev, dev, ino, path);
-             (void) fclose (pipe);
-           }
+          struct loop_info loopinfo;
+          int fd;
+
+          if ((fd = open(path, O_RDWR)) > 0) {
+            if (ioctl(fd, LOOP_GET_STATUS, &loopinfo) >= 0) {
+              add_other(it_loop,loopinfo.lo_device,loopinfo.lo_device,loopinfo.lo_inode,path);
+            }
+            (void) close(fd);
+                }
        }
       if (stat (mounted, &st_mounted) < 0)
        {