]> err.no Git - util-linux/commitdiff
mount: cleanup canonicalize() usage
authorKarel Zak <kzak@redhat.com>
Mon, 22 Oct 2007 13:49:26 +0000 (15:49 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 25 Oct 2007 19:50:59 +0000 (21:50 +0200)
This patch renames canonicalize() to canonicalize_mountpoint() and
moves this function to realpath.c where is all cannonicalize code.
The canonicalize_mountpoint() function checks for special "none",
"proc", "swap" pseudo mointpoint.

The patch also adds a new generic canonicalize() function.

Signed-off-by: Karel Zak <kzak@redhat.com>
mount/fsprobe.c
mount/fstab.c
mount/mount.c
mount/realpath.c
mount/realpath.h
mount/sundries.c
mount/sundries.h
mount/umount.c

index 9be16fcb8fb30b8488dab5ae3a1b845ea91a2211..9808fbeba5a72dd3157420cee9783cb612361f9c 100644 (file)
@@ -10,6 +10,7 @@
 #include "fsprobe.h"
 #include "sundries.h"          /* for xstrdup */
 #include "nls.h"
+#include "realpath.h"
 
 /* list of already tested filesystems by fsprobe_procfsloop_mount() */
 static struct tried {
index 694f4a66a220a97679a29983ec2ae89179d6fdf8..4d045cea08f0518fe04fbeb9f90af1d1e8191b2e 100644 (file)
@@ -18,6 +18,7 @@
 #include "fsprobe.h"
 #include "mount_paths.h"
 #include "nls.h"
+#include "realpath.h"
 
 #define streq(s, t)    (strcmp ((s), (t)) == 0)
 
@@ -325,7 +326,7 @@ getfs_by_specdir (const char *spec, const char *dir) {
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) {
                /* dir */
                if (!streq(mc->m.mnt_dir, dir)) {
-                       char *dr = canonicalize(mc->m.mnt_dir);
+                       char *dr = canonicalize_mountpoint(mc->m.mnt_dir);
                        int ok = 0;
 
                        if (streq(dr, dir))
@@ -371,7 +372,7 @@ getfs_by_dir (const char *dir) {
                if (streq(mc->m.mnt_dir, dir))
                        return mc;
 
-       cdir = canonicalize(dir);
+       cdir = canonicalize_mountpoint(dir);
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt) {
                if (streq(mc->m.mnt_dir, cdir)) {
                        free(cdir);
@@ -823,7 +824,9 @@ struct my_mntent *my_getmntent (mntFILE *mfp) { return NULL; }
 mntFILE *my_setmntent (const char *file, char *mode) { return NULL; }
 void my_endmntent (mntFILE *mfp) { }
 int my_addmntent (mntFILE *mfp, struct my_mntent *mnt) { return 0; }
-char *myrealpath(const char *path, char *resolved_path, int m) { return NULL; }
+
+char *canonicalize (const char *path) {  return NULL; }
+char *canonicalize_mountpoint (const char *path) { return NULL; }
 
 int
 main(int argc, char **argv)
index b65ee62ce9c1c33a6bc835a0da5a3f916749f1ce..42f87b03e3ac9ee60acdd1166bf13660e409fc6e 100644 (file)
@@ -42,6 +42,7 @@
 #include "mount_paths.h"
 #include "env.h"
 #include "nls.h"
+#include "realpath.h"
 
 #define DO_PS_FIDDLING
 
@@ -926,7 +927,7 @@ update_mtab_entry(const char *spec, const char *node, const char *type,
        struct my_mntent mnt;
 
        mnt.mnt_fsname = canonicalize (spec);
-       mnt.mnt_dir = canonicalize (node);
+       mnt.mnt_dir = canonicalize_mountpoint (node);
        mnt.mnt_type = type;
        mnt.mnt_opts = opts;
        mnt.mnt_freq = freq;
@@ -1451,7 +1452,7 @@ mounted (const char *spec0, const char *node0) {
                return ret;
 
        spec = canonicalize(spec0);
-       node = canonicalize(node0);
+       node = canonicalize_mountpoint(node0);
 
        mc0 = mtab_head();
        for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
index d659685a8349485195582da155e8b193aa695b32..fdb15b7cdb78ed7dbd17aa61c1304080f7d529ca 100644 (file)
 # define MAXSYMLINKS 256
 #endif
 
+
+/* Make a canonical pathname from PATH.  Returns a freshly malloced string.
+   It is up the *caller* to ensure that the PATH is sensible.  i.e.
+   canonicalize ("/dev/fd0/.") returns "/dev/fd0" even though ``/dev/fd0/.''
+   is not a legal pathname for ``/dev/fd0''.  Anything we cannot parse
+   we return unmodified.   */
+char *
+canonicalize_mountpoint (const char *path) {
+       if (path == NULL)
+               return NULL;
+
+       if (streq(path, "none") ||
+           streq(path, "proc") ||
+           streq(path, "devpts"))
+               return xstrdup(path);
+
+       return canonicalize(path);
+}
+
+char *
+canonicalize (const char *path) {
+       char canonical[PATH_MAX+2];
+
+       if (path == NULL)
+               return NULL;
+
+       if (myrealpath (path, canonical, PATH_MAX+1))
+               return xstrdup(canonical);
+
+       return xstrdup(path);
+}
+
 char *
 myrealpath(const char *path, char *resolved_path, int maxreslth) {
        int readlinks = 0;
index 016fc4849b9bf3401312c866616a6505f20564fe..a8fad639acfb54d9998930d6892689d4497d0ac4 100644 (file)
@@ -7,5 +7,7 @@
 #endif
 
 extern char *myrealpath(const char *path, char *resolved_path, int m);
+extern char *canonicalize (const char *path);
+extern char *canonicalize_mountpoint (const char *path);
 
 #endif /* REALPATH_H */
index 45404c5cf87726475b2dad4062a41e5279b482bd..1669554c0ee8506f1ab45f7e185069ca3ec3cdb0 100644 (file)
@@ -224,31 +224,6 @@ matching_opts (const char *options, const char *test_opts) {
      return 1;
 }
 
-/* Make a canonical pathname from PATH.  Returns a freshly malloced string.
-   It is up the *caller* to ensure that the PATH is sensible.  i.e.
-   canonicalize ("/dev/fd0/.") returns "/dev/fd0" even though ``/dev/fd0/.''
-   is not a legal pathname for ``/dev/fd0''.  Anything we cannot parse
-   we return unmodified.   */
-char *
-canonicalize (const char *path) {
-       char canonical[PATH_MAX+2];
-
-       if (path == NULL)
-               return NULL;
-
-#if 1
-       if (streq(path, "none") ||
-           streq(path, "proc") ||
-           streq(path, "devpts"))
-               return xstrdup(path);
-#endif
-       if (myrealpath (path, canonical, PATH_MAX+1))
-               return xstrdup(canonical);
-
-       return xstrdup(path);
-}
-
-
 /*
  * Parses NAME=value, returns -1 on parse error, 0 success. The success is also
  * when the 'spec' doesn't contain name=value pair (because the spec could be
index 95d4bea7a246bba797c4deef2d94728b2604fa9b..3d6a1bd22e774e92c00c0470d28e6ceac3196b72 100644 (file)
@@ -24,7 +24,6 @@ extern int sloppy;
 
 /* Functions in sundries.c that are used in mount.c and umount.c  */ 
 void block_signals (int how);
-char *canonicalize (const char *path);
 void error (const char *fmt, ...);
 int matching_type (const char *type, const char *types);
 int matching_opts (const char *options, const char *test_opts);
index 6af43546e51d16bb7a8bc7a9853a14bd7b6e69b3..4327dd70deea66309e6fc8dcd38a91ac754ec1a2 100644 (file)
@@ -19,6 +19,7 @@
 #include "fstab.h"
 #include "env.h"
 #include "nls.h"
+#include "realpath.h"
 
 #if defined(MNT_FORCE)
 /* Interesting ... it seems libc knows about MNT_FORCE and presumably