]> err.no Git - util-linux/commitdiff
mount: move realpath.c code to lib/
authorKarel Zak <kzak@redhat.com>
Tue, 3 Feb 2009 21:12:03 +0000 (22:12 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 11 Feb 2009 22:55:51 +0000 (23:55 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
14 files changed:
TODO
include/canonicalize.h [new file with mode: 0644]
lib/canonicalize.c [moved from mount/realpath.c with 74% similarity]
mount/Makefile.am
mount/fsprobe.c
mount/fsprobe_volumeid.c
mount/fstab.c
mount/lomount.c
mount/mount.c
mount/realpath.h [deleted file]
mount/sundries.c
mount/sundries.h
mount/swapon.c
mount/umount.c

diff --git a/TODO b/TODO
index 42cbed417676b00cd3956cd2c8a5f97524208a55..65cc55aa507c63afdbfa215f48102d761e9ae7af 100644 (file)
--- a/TODO
+++ b/TODO
@@ -12,6 +12,8 @@
    Although mkswap has recently been -L option to create a label nothing appears to
    have been change to swapon to display said labels. (rh#430386)
 
+ * use canonicalize_file_name() when exist in glibc (see lib/canonicalize.v)
+
  * try improve compilation against others libc:
        - klibc
        - ???
diff --git a/include/canonicalize.h b/include/canonicalize.h
new file mode 100644 (file)
index 0000000..b8906d4
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef CANONICALIZE_H
+#define CANONICALIZE_H
+
+#include <limits.h>
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+
+extern char *canonicalize_path(const char *path);
+
+#endif /* CANONICALIZE_H */
similarity index 74%
rename from mount/realpath.c
rename to lib/canonicalize.c
index 9b46951b53202bfd05c090f89032af62ea9b9560..b888fbb8e9be629d56fa4726ea081b4dce9c1053 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * realpath.c -- canonicalize pathname by removing symlinks
+ * canonicalize.c -- canonicalize pathname by removing symlinks
  * Copyright (C) 1993 Rick Sladkey <jrs@world.std.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library Public License for more details.
+ *
  */
 
-#define resolve_symlinks
-
 /*
  * This routine is part of libc.  We include it nevertheless,
  * since the libc version has some security flaws.
+ *
+ * TODO: use canonicalize_file_name() when exist in glibc
  */
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
-#include "realpath.h"
-#include "sundries.h"          /* for xstrdup */
+#include <stdlib.h>
+
+#include "canonicalize.h"
 
 #ifndef MAXSYMLINKS
 # define MAXSYMLINKS 256
 #endif
 
-int
-is_pseudo_fs(const char *type)
-{
-       if (type == NULL || *type == '/')
-               return 0;
-       if (streq(type, "none") ||
-           streq(type, "proc") ||
-           streq(type, "tmpfs") ||
-           streq(type, "sysfs") ||
-           streq(type, "devpts"))
-               return 1;
-       return 0;
-}
-
-/* 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_spec (const char *path)
-{
-       if (path == NULL)
-               return NULL;
-       if (is_pseudo_fs(path))
-               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 *
+static char *
 myrealpath(const char *path, char *resolved_path, int maxreslth) {
        int readlinks = 0;
        char *npath;
@@ -137,7 +97,6 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
                        if (errno != EINVAL)
                                goto err;
                } else {
-#ifdef resolve_symlinks                /* Richard Gooch dislikes sl resolution */
                        int m;
                        char *newbuf;
 
@@ -153,12 +112,13 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
 
                        /* Insert symlink contents into path. */
                        m = strlen(path);
-                       newbuf = xmalloc(m + n + 1);
+                       newbuf = malloc(m + n + 1);
+                       if (!newbuf)
+                               goto err;
                        memcpy(newbuf, link_path, n);
                        memcpy(newbuf + n, path, m + 1);
                        free(buf);
                        path = buf = newbuf;
-#endif
                }
                *npath++ = '/';
        }
@@ -175,3 +135,18 @@ myrealpath(const char *path, char *resolved_path, int maxreslth) {
        free(buf);
        return NULL;
 }
+
+char *
+canonicalize_path(const char *path) {
+       char canonical[PATH_MAX+2];
+
+       if (path == NULL)
+               return NULL;
+
+       if (myrealpath (path, canonical, PATH_MAX+1))
+               return strdup(canonical);
+
+       return strdup(path);
+}
+
+
index 3963fdaf688a47730e0f71ef6579ec7e42fc2395..90d956ebfd276402563a25abee5890e52ad4a7a3 100644 (file)
@@ -6,15 +6,15 @@ bin_PROGRAMS = mount umount
 sbin_PROGRAMS = losetup swapon
 dist_man_MANS = fstab.5 mount.8 swapoff.8 swapon.8 umount.8 losetup.8
 
-utils_common = sundries.c xmalloc.c realpath.c fsprobe.c
+utils_common = sundries.c xmalloc.c ../lib/canonicalize.c
 
 headers_common = fstab.h mount_mntent.h mount_constants.h \
-       lomount.h fsprobe.h realpath.h xmalloc.h \
+       lomount.h fsprobe.h xmalloc.h \
        getusername.h loop.h sundries.h
 
 mount_common = fstab.c mount_mntent.c getusername.c lomount.c \
        $(utils_common) $(headers_common) ../lib/env.c ../lib/linux_version.c \
-       ../lib/blkdev.c
+       ../lib/blkdev.c fsprobe.c
 
 mount_SOURCES = mount.c $(mount_common) ../lib/setproctitle.c
 mount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
@@ -25,10 +25,10 @@ umount_CFLAGS = $(SUID_CFLAGS) $(AM_CFLAGS)
 umount_LDFLAGS = $(SUID_LDFLAGS) $(AM_LDFLAGS)
 
 swapon_SOURCES = swapon.c swap_constants.h $(utils_common) \
-       ../lib/linux_version.c ../lib/blkdev.c
+       ../lib/linux_version.c ../lib/blkdev.c fsprobe.c
 
-losetup_SOURCES = lomount.c sundries.c xmalloc.c realpath.c \
-       loop.h lomount.h xmalloc.h sundries.h realpath.h
+losetup_SOURCES = lomount.c $(utils_common) \
+       loop.h lomount.h xmalloc.h sundries.h
 losetup_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
 
 mount_LDADD = $(LDADD_common)
@@ -61,7 +61,8 @@ losetup_static_CPPFLAGS = -DMAIN $(AM_CPPFLAGS)
 endif
 
 if HAVE_BLKID
-utils_common += fsprobe_blkid.c
+mount_common += fsprobe_blkid.c
+swapon_SOURCES += fsprobe_blkid.c
 LDADD_common += $(BLKID_LIBS)
 LDADD_common_static += $(BLKID_LIBS_STATIC)
 endif
@@ -72,13 +73,15 @@ mount_static_LDADD += $(SELINUX_LIBS_STATIC)
 endif
 
 if HAVE_VOLUME_ID
-utils_common += fsprobe_volumeid.c
+mount_common += fsprobe_volumeid.c
+swapon_SOURCES += fsprobe_volumeid.c
 LDADD_common += $(VOLUMEID_LIBS)
 LDADD_common_static += $(VOLUMEID_LIBS_STATIC)
 endif
 
 noinst_PROGRAMS = mtab_lock_test
-mtab_lock_test_SOURCES = fstab.c sundries.c xmalloc.c $(headers_common)
+mtab_lock_test_SOURCES = fstab.c sundries.c xmalloc.c $(headers_common) \
+                       ../lib/canonicalize.c
 mtab_lock_test_CPPFLAGS = -DMAIN_TEST_MTABLOCK $(AM_CPPFLAGS)
 
 install-exec-hook:
index 07ffbd9ab172d1765800ac58596c6d94aac357a0..04e267f33f8ce12d9d1bd979e0f55fd76cdfd72b 100644 (file)
@@ -9,7 +9,6 @@
 #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 b9b137b8a804dbc3b2ed5304ad995deae0d1262c..a5c928230b7f18d829ab3e36fffbcdff24de1d44 100644 (file)
@@ -12,7 +12,6 @@
 #include "blkdev.h"
 
 #include "fsprobe.h"
-#include "realpath.h"
 #include "pathnames.h"
 #include "sundries.h"
 
index c60c5f4db26a2c59e0b0697f9f5da25ad114768e..bcbc3a9db1ed3565b9922300b9920237726d19ac 100644 (file)
@@ -19,7 +19,6 @@
 #include "fsprobe.h"
 #include "pathnames.h"
 #include "nls.h"
-#include "realpath.h"
 
 #define streq(s, t)    (strcmp ((s), (t)) == 0)
 
@@ -924,10 +923,6 @@ 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 *canonicalize (const char *path) {  return NULL; }
-char *canonicalize_spec (const char *path) { return NULL; }
-int is_pseudo_fs(const char *type) { return 0; };
-
 int
 main(int argc, char **argv)
 {
index 5675eac0a7e89054b8ee58030cbe3f8e71dbaf68..ece0003e525f453f0758878e83d56972c189a5df 100644 (file)
@@ -22,7 +22,6 @@
 #include "nls.h"
 #include "sundries.h"
 #include "xmalloc.h"
-#include "realpath.h"
 #include "pathnames.h"
 
 #define SIZE(a) (sizeof(a)/sizeof(a[0]))
index 23f27d6764784a9222b5df966b432ba3c2caac75..e04dbdb516688ef9c7edcd1a18723cc29c342fa1 100644 (file)
@@ -40,7 +40,6 @@
 #include "env.h"
 #include "nls.h"
 #include "blkdev.h"
-#include "realpath.h"
 
 #define DO_PS_FIDDLING
 
diff --git a/mount/realpath.h b/mount/realpath.h
deleted file mode 100644 (file)
index 15450c1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef REALPATH_H
-#define REALPATH_H
-
-#include <limits.h>
-#ifndef PATH_MAX
-# define PATH_MAX 4096
-#endif
-
-extern char *myrealpath(const char *path, char *resolved_path, int m);
-extern char *canonicalize (const char *path);
-extern char *canonicalize_spec (const char *path);
-extern int is_pseudo_fs(const char *type);
-
-#endif /* REALPATH_H */
index fad8eaec60cfb7208c509d8baab227372d75f8fc..bdaf117221c9afdf1c9bad92cf4918193ed22156 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <mntent.h>            /* for MNTTYPE_SWAP */
+
+#include "canonicalize.h"
+
 #include "fstab.h"
 #include "sundries.h"
-#include "realpath.h"
 #include "xmalloc.h"
 #include "nls.h"
 
@@ -276,3 +278,47 @@ parse_spec(const char *spec, char **name, char **value)
        return 0;
 }
 
+int
+is_pseudo_fs(const char *type)
+{
+       if (type == NULL || *type == '/')
+               return 0;
+       if (streq(type, "none") ||
+           streq(type, "proc") ||
+           streq(type, "tmpfs") ||
+           streq(type, "sysfs") ||
+           streq(type, "devpts"))
+               return 1;
+       return 0;
+}
+
+/* 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_spec (const char *path)
+{
+       char *res;
+
+       if (path == NULL)
+               return NULL;
+       if (is_pseudo_fs(path))
+               return xstrdup(path);
+
+       res = canonicalize_path(path);
+       if (!res)
+               die(EX_SYSERR, _("not enough memory"));
+       return res;
+}
+
+char *canonicalize (const char *path)
+{
+       char *res = canonicalize_path(path);
+
+       if (!res)
+               die(EX_SYSERR, _("not enough memory"));
+       return res;
+}
+
index f64d15dbdaa3f7e779b624e5917b24f569eaa449..c8570128753752b83ec01ee3036063a68426cc53 100644 (file)
@@ -37,6 +37,11 @@ char *xstrconcat4 (char *, const char *, const char *, const char *);
 
 int parse_spec(const char *spec, char **name, char **value);
 
+int is_pseudo_fs(const char *type);
+
+char *canonicalize (const char *path);
+char *canonicalize_spec (const char *path);
+
 /* exit status - bits below are ORed */
 #define EX_USAGE       1       /* incorrect invocation or permission */
 #define EX_SYSERR      2       /* out of memory, cannot fork, ... */
index 0d5067e04818c5dcfd5552f5caf88fda3e2433fe..c50c32ae56183bb984ea30996e77d3b27333f9b6 100644 (file)
@@ -20,7 +20,6 @@
 #include "swap_constants.h"
 #include "nls.h"
 #include "fsprobe.h"
-#include "realpath.h"
 #include "pathnames.h"
 #include "sundries.h"
 #include "swapheader.h"
index 738d05c31f9c69502fb585585a180c4ef5070e1d..9901a809e6f8f636c31bc66d99b4111d22c1f1a4 100644 (file)
@@ -19,7 +19,6 @@
 #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