Move the mtab support stuff into libbb
authorEric Andersen <andersen@codepoet.org>
Sun, 1 Apr 2001 16:01:11 +0000 (16:01 -0000)
committerEric Andersen <andersen@codepoet.org>
Sun, 1 Apr 2001 16:01:11 +0000 (16:01 -0000)
 -Erik

16 files changed:
Config.h
Makefile
applets/usage.h
debian/Config.h-deb
debian/Config.h-static
debian/Config.h-udeb
include/usage.h
libbb/mtab.c [new file with mode: 0644]
libbb/mtab_file.c [new file with mode: 0644]
mount.c
mtab.c [deleted file]
mtab_file.c [deleted file]
umount.c
usage.h
util-linux/mount.c
util-linux/umount.c

index 8c7684876813487b5e9baa07816970a72482ff86..bd63665587e56f78c4b1cab100f10dc780ae530e 100644 (file)
--- a/Config.h
+++ b/Config.h
 #define BB_FEATURE_MOUNT_LOOP
 //
 // Enable support for a real /etc/mtab file instead of /proc/mounts
-//#define BB_FEATURE_MOUNT_MTAB_SUPPORT
+//#define BB_FEATURE_MTAB_SUPPORT
 //
 // Enable support for mounting remote NFS volumes. 
 // You may need to mount with "-o nolock" if you are
 // Nothing beyond this point should ever be touched by 
 // mere mortals so leave this stuff alone.
 //
-#if defined BB_MOUNT || defined BB_UMOUNT || defined BB_DF
-       #ifdef BB_FEATURE_MOUNT_MTAB_SUPPORT
-               #define BB_MTAB
-       #endif
-#else
-       #undef BB_MTAB
-#endif 
-//
 #if defined BB_SH
        #if defined BB_FEATURE_COMMAND_EDITING 
                #define BB_CMDEDIT
index ba2b2c3cb29f8ce5cc3d32bd02d4c4012d19c9b6..231073a96d57e0f1a8c47c1f5ba3a1068dc4ed2c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -202,7 +202,7 @@ endif
 # And option 4:
 -include applet_source_list
 
-OBJECTS   = $(APPLET_SOURCES:.c=.o) busybox.o messages.o usage.o applets.o mtab_file.o
+OBJECTS   = $(APPLET_SOURCES:.c=.o) busybox.o messages.o usage.o applets.o
 CFLAGS    += $(CROSS_CFLAGS)
 CFLAGS    += -DBB_VER='"$(VERSION)"'
 CFLAGS    += -DBB_BT='"$(BUILDTIME)"'
@@ -236,7 +236,7 @@ my_getgrgid.c my_getpwnamegid.c my_getpwuid.c my_getgrnam.c my_getpwnam.c \
 recursive_action.c safe_read.c safe_strncpy.c syscalls.c \
 syslog_msg_with_name.c time_string.c trim.c vdprintf.c wfopen.c xfuncs.c \
 xregcomp.c error_msg_and_die.c perror_msg.c perror_msg_and_die.c \
-verror_msg.c vperror_msg.c 
+verror_msg.c vperror_msg.c mtab.c mtab_file.c
 LIBBB_OBJS=$(patsubst %.c,$(LIBBB)/%.o, $(LIBBB_CSRC))
 LIBBB_CFLAGS = -I$(LIBBB_DIR)
 
index 32b34e45fc82772b94daad9518454313c7b29c13..1ee2ab3284f950fa598bca2a3ce56912b1b4c777 100644 (file)
 #else
   #define USAGE_MOUNT_LOOP(a)
 #endif
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
   #define USAGE_MTAB(a) a
 #else
   #define USAGE_MTAB(a)
index 075e2355733ca272dd604d6e03487b2cd6499d60..606204bfe944a8600b3a823276795f195a4d7d32 100644 (file)
 #define BB_FEATURE_MOUNT_LOOP
 //
 // Enable support for a real /etc/mtab file instead of /proc/mounts
-//#define BB_FEATURE_MOUNT_MTAB_SUPPORT
+//#define BB_FEATURE_MTAB_SUPPORT
 //
 // Enable support for mounting remote NFS volumes. 
 // You may need to mount with "-o nolock" if you are
 // Nothing beyond this point should ever be touched by 
 // mere mortals so leave this stuff alone.
 //
-#if defined BB_MOUNT || defined BB_UMOUNT || defined BB_DF
-       #ifdef BB_FEATURE_MOUNT_MTAB_SUPPORT
-               #define BB_MTAB
-       #endif
-#else
-       #undef BB_MTAB
-#endif 
-//
 #if defined BB_SH
        #if defined BB_FEATURE_COMMAND_EDITING 
                #define BB_CMDEDIT
index fc89e329d6ff1f3b9ed00db77bad497d1e1e1d0f..4cde55fdae909c64cce9f191321577a49f07c0b0 100644 (file)
 #define BB_FEATURE_MOUNT_LOOP
 //
 // Enable support for a real /etc/mtab file instead of /proc/mounts
-//#define BB_FEATURE_MOUNT_MTAB_SUPPORT
+//#define BB_FEATURE_MTAB_SUPPORT
 //
 // Enable support for mounting remote NFS volumes. 
 // You may need to mount with "-o nolock" if you are
 // Nothing beyond this point should ever be touched by 
 // mere mortals so leave this stuff alone.
 //
-#if defined BB_MOUNT || defined BB_UMOUNT || defined BB_DF
-       #ifdef BB_FEATURE_MOUNT_MTAB_SUPPORT
-               #define BB_MTAB
-       #endif
-#else
-       #undef BB_MTAB
-#endif 
-//
 #if defined BB_SH
        #if defined BB_FEATURE_COMMAND_EDITING 
                #define BB_CMDEDIT
index 4028a71da17e640d047230f8aa9ec1476fb3987d..7aeba287373b61f9a4fcd429fc7b0c7c0ae3ef87 100644 (file)
 #define BB_FEATURE_MOUNT_LOOP
 //
 // Enable support for a real /etc/mtab file instead of /proc/mounts
-//#define BB_FEATURE_MOUNT_MTAB_SUPPORT
+//#define BB_FEATURE_MTAB_SUPPORT
 //
 // Enable support for mounting remote NFS volumes. 
 // You may need to mount with "-o nolock" if you are
 // Nothing beyond this point should ever be touched by 
 // mere mortals so leave this stuff alone.
 //
-#if defined BB_MOUNT || defined BB_UMOUNT || defined BB_DF
-       #ifdef BB_FEATURE_MOUNT_MTAB_SUPPORT
-               #define BB_MTAB
-       #endif
-#else
-       #undef BB_MTAB
-#endif 
-//
 #if defined BB_SH
        #if defined BB_FEATURE_COMMAND_EDITING 
                #define BB_CMDEDIT
index 32b34e45fc82772b94daad9518454313c7b29c13..1ee2ab3284f950fa598bca2a3ce56912b1b4c777 100644 (file)
 #else
   #define USAGE_MOUNT_LOOP(a)
 #endif
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
   #define USAGE_MTAB(a) a
 #else
   #define USAGE_MTAB(a)
diff --git a/libbb/mtab.c b/libbb/mtab.c
new file mode 100644 (file)
index 0000000..28c9978
--- /dev/null
@@ -0,0 +1,95 @@
+/* vi: set sw=4 ts=4: */
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <mntent.h>
+#include "libbb.h"
+
+extern const char mtab_file[]; /* Defined in utility.c */
+static const int MS_RDONLY = 1;        /* Mount read-only.  */
+
+void erase_mtab(const char *name)
+{
+       struct mntent entries[20];
+       int count = 0;
+       FILE *mountTable = setmntent(mtab_file, "r");
+       struct mntent *m;
+
+       /* Check if reading the mtab file failed */
+       if (mountTable == 0
+                       /* Bummer.  fall back on trying the /proc filesystem */
+                       && (mountTable = setmntent("/proc/mounts", "r")) == 0) {
+               perror_msg("%s", mtab_file);
+               return;
+       }
+
+       while ((m = getmntent(mountTable)) != 0) {
+               entries[count].mnt_fsname = strdup(m->mnt_fsname);
+               entries[count].mnt_dir = strdup(m->mnt_dir);
+               entries[count].mnt_type = strdup(m->mnt_type);
+               entries[count].mnt_opts = strdup(m->mnt_opts);
+               entries[count].mnt_freq = m->mnt_freq;
+               entries[count].mnt_passno = m->mnt_passno;
+               count++;
+       }
+       endmntent(mountTable);
+       if ((mountTable = setmntent(mtab_file, "w"))) {
+               int i;
+
+               for (i = 0; i < count; i++) {
+                       int result = (strcmp(entries[i].mnt_fsname, name) == 0
+                                                 || strcmp(entries[i].mnt_dir, name) == 0);
+
+                       if (result)
+                               continue;
+                       else
+                               addmntent(mountTable, &entries[i]);
+               }
+               endmntent(mountTable);
+       } else if (errno != EROFS)
+               perror_msg("%s", mtab_file);
+}
+
+void write_mtab(char *blockDevice, char *directory,
+                               char *filesystemType, long flags, char *string_flags)
+{
+       FILE *mountTable = setmntent(mtab_file, "a+");
+       struct mntent m;
+
+       if (mountTable == 0) {
+               perror_msg("%s", mtab_file);
+               return;
+       }
+       if (mountTable) {
+               int length = strlen(directory);
+
+               if (length > 1 && directory[length - 1] == '/')
+                       directory[length - 1] = '\0';
+
+               if (filesystemType == 0) {
+                       struct mntent *p = find_mount_point(blockDevice, "/proc/mounts");
+
+                       if (p && p->mnt_type)
+                               filesystemType = p->mnt_type;
+               }
+               m.mnt_fsname = blockDevice;
+               m.mnt_dir = directory;
+               m.mnt_type = filesystemType ? filesystemType : "default";
+
+               if (*string_flags) {
+                       m.mnt_opts = string_flags;
+               } else {
+                       if ((flags | MS_RDONLY) == flags)
+                               m.mnt_opts = "ro";
+                       else
+                               m.mnt_opts = "rw";
+               }
+
+               m.mnt_freq = 0;
+               m.mnt_passno = 0;
+               addmntent(mountTable, &m);
+               endmntent(mountTable);
+       }
+}
diff --git a/libbb/mtab_file.c b/libbb/mtab_file.c
new file mode 100644 (file)
index 0000000..d9c3de3
--- /dev/null
@@ -0,0 +1,52 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ *
+ * Copyright (C) tons of folks.  Tracking down who wrote what
+ * isn't something I'm going to worry about...  If you wrote something
+ * here, please feel free to acknowledge your work.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Based in part on code from sash, Copyright (c) 1999 by David I. Bell 
+ * Permission has been granted to redistribute this code under the GPL.
+ *
+ */
+
+#include <stdio.h>
+#include "libbb.h"
+
+
+/* Busybox mount uses either /proc/mounts or /dev/mtab to 
+ * get the list of currently mounted filesystems */ 
+#if defined BB_MTAB
+const char mtab_file[] = "/etc/mtab";
+#else
+#  if defined BB_FEATURE_USE_DEVPS_PATCH
+      const char mtab_file[] = "/dev/mtab";
+#  else
+      const char mtab_file[] = "/proc/mounts";
+#  endif
+#endif
+
+
+/* END CODE */
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/
diff --git a/mount.c b/mount.c
index 9f7ac43c15135aafa4f6d99a83efcb3b1fedc20d..57dc73e55aec7abc6e720f1bb0906a51ce31ffa0 100644 (file)
--- a/mount.c
+++ b/mount.c
@@ -160,7 +160,7 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
        /* If the mount was sucessful, do anything needed, then return TRUE */
        if (status == 0 || fakeIt==TRUE) {
 
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
                if (useMtab == TRUE) {
                        erase_mtab(specialfile);        // Clean any stale entries
                        write_mtab(specialfile, dir, filesystemtype, flags, mtab_opts);
@@ -385,7 +385,7 @@ extern int mount_main(int argc, char **argv)
                                case 'f':
                                        fakeIt = TRUE;
                                        break;
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
                                case 'n':
                                        useMtab = FALSE;
                                        break;
diff --git a/mtab.c b/mtab.c
deleted file mode 100644 (file)
index 0497657..0000000
--- a/mtab.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* vi: set sw=4 ts=4: */
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <mntent.h>
-#include "busybox.h"
-
-extern const char mtab_file[]; /* Defined in utility.c */
-static const int MS_RDONLY = 1;        /* Mount read-only.  */
-
-void erase_mtab(const char *name)
-{
-       struct mntent entries[20];
-       int count = 0;
-       FILE *mountTable = setmntent(mtab_file, "r");
-       struct mntent *m;
-
-       /* Check if reading the mtab file failed */
-       if (mountTable == 0
-                       /* Bummer.  fall back on trying the /proc filesystem */
-                       && (mountTable = setmntent("/proc/mounts", "r")) == 0) {
-               perror_msg("%s", mtab_file);
-               return;
-       }
-
-       while ((m = getmntent(mountTable)) != 0) {
-               entries[count].mnt_fsname = strdup(m->mnt_fsname);
-               entries[count].mnt_dir = strdup(m->mnt_dir);
-               entries[count].mnt_type = strdup(m->mnt_type);
-               entries[count].mnt_opts = strdup(m->mnt_opts);
-               entries[count].mnt_freq = m->mnt_freq;
-               entries[count].mnt_passno = m->mnt_passno;
-               count++;
-       }
-       endmntent(mountTable);
-       if ((mountTable = setmntent(mtab_file, "w"))) {
-               int i;
-
-               for (i = 0; i < count; i++) {
-                       int result = (strcmp(entries[i].mnt_fsname, name) == 0
-                                                 || strcmp(entries[i].mnt_dir, name) == 0);
-
-                       if (result)
-                               continue;
-                       else
-                               addmntent(mountTable, &entries[i]);
-               }
-               endmntent(mountTable);
-       } else if (errno != EROFS)
-               perror_msg("%s", mtab_file);
-}
-
-void write_mtab(char *blockDevice, char *directory,
-                               char *filesystemType, long flags, char *string_flags)
-{
-       FILE *mountTable = setmntent(mtab_file, "a+");
-       struct mntent m;
-
-       if (mountTable == 0) {
-               perror_msg("%s", mtab_file);
-               return;
-       }
-       if (mountTable) {
-               int length = strlen(directory);
-
-               if (length > 1 && directory[length - 1] == '/')
-                       directory[length - 1] = '\0';
-
-               if (filesystemType == 0) {
-                       struct mntent *p = find_mount_point(blockDevice, "/proc/mounts");
-
-                       if (p && p->mnt_type)
-                               filesystemType = p->mnt_type;
-               }
-               m.mnt_fsname = blockDevice;
-               m.mnt_dir = directory;
-               m.mnt_type = filesystemType ? filesystemType : "default";
-
-               if (*string_flags) {
-                       m.mnt_opts = string_flags;
-               } else {
-                       if ((flags | MS_RDONLY) == flags)
-                               m.mnt_opts = "ro";
-                       else
-                               m.mnt_opts = "rw";
-               }
-
-               m.mnt_freq = 0;
-               m.mnt_passno = 0;
-               addmntent(mountTable, &m);
-               endmntent(mountTable);
-       }
-}
diff --git a/mtab_file.c b/mtab_file.c
deleted file mode 100644 (file)
index 3235e35..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Utility routines.
- *
- * Copyright (C) tons of folks.  Tracking down who wrote what
- * isn't something I'm going to worry about...  If you wrote something
- * here, please feel free to acknowledge your work.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Based in part on code from sash, Copyright (c) 1999 by David I. Bell 
- * Permission has been granted to redistribute this code under the GPL.
- *
- */
-
-#include <stdio.h>
-#include "busybox.h"
-
-
-/* Busybox mount uses either /proc/mounts or /dev/mtab to 
- * get the list of currently mounted filesystems */ 
-#if defined BB_MTAB
-const char mtab_file[] = "/etc/mtab";
-#else
-#  if defined BB_FEATURE_USE_DEVPS_PATCH
-      const char mtab_file[] = "/dev/mtab";
-#  else
-      const char mtab_file[] = "/proc/mounts";
-#  endif
-#endif
-
-
-/* END CODE */
-/*
-Local Variables:
-c-file-style: "linux"
-c-basic-offset: 4
-tab-width: 4
-End:
-*/
index cc7d38d7c9916ee9a4f049ca3df1ef7e72538800..3e23b9705edf3e660f277fca16eadf945d496ded 100644 (file)
--- a/umount.c
+++ b/umount.c
@@ -57,7 +57,7 @@ static int doForce = FALSE;
 #if defined BB_FEATURE_MOUNT_LOOP
 static int freeLoop = TRUE;
 #endif
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
 static int useMtab = TRUE;
 #endif
 static int umountAll = FALSE;
@@ -106,7 +106,7 @@ char *mtab_getinfo(const char *match, const char which)
                        if (which == MTAB_GETMOUNTPT) {
                                return cur->mountpt;
                        } else {
-#if !defined BB_MTAB
+#if !defined BB_FEATURE_MTAB_SUPPORT
                                if (strcmp(cur->device, "/dev/root") == 0) {
                                        /* Adjusts device to be the real root device,
                                         * or leaves device alone if it can't find it */
@@ -197,7 +197,7 @@ static int do_umount(const char *name)
                }
        }
        if (status == 0) {
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
                if (useMtab == TRUE)
                        erase_mtab(name);
 #endif
@@ -255,7 +255,7 @@ extern int umount_main(int argc, char **argv)
                                freeLoop = FALSE;
                                break;
 #endif
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
                        case 'n':
                                useMtab = FALSE;
                                break;
diff --git a/usage.h b/usage.h
index 32b34e45fc82772b94daad9518454313c7b29c13..1ee2ab3284f950fa598bca2a3ce56912b1b4c777 100644 (file)
--- a/usage.h
+++ b/usage.h
 #else
   #define USAGE_MOUNT_LOOP(a)
 #endif
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
   #define USAGE_MTAB(a) a
 #else
   #define USAGE_MTAB(a)
index 9f7ac43c15135aafa4f6d99a83efcb3b1fedc20d..57dc73e55aec7abc6e720f1bb0906a51ce31ffa0 100644 (file)
@@ -160,7 +160,7 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
        /* If the mount was sucessful, do anything needed, then return TRUE */
        if (status == 0 || fakeIt==TRUE) {
 
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
                if (useMtab == TRUE) {
                        erase_mtab(specialfile);        // Clean any stale entries
                        write_mtab(specialfile, dir, filesystemtype, flags, mtab_opts);
@@ -385,7 +385,7 @@ extern int mount_main(int argc, char **argv)
                                case 'f':
                                        fakeIt = TRUE;
                                        break;
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
                                case 'n':
                                        useMtab = FALSE;
                                        break;
index cc7d38d7c9916ee9a4f049ca3df1ef7e72538800..3e23b9705edf3e660f277fca16eadf945d496ded 100644 (file)
@@ -57,7 +57,7 @@ static int doForce = FALSE;
 #if defined BB_FEATURE_MOUNT_LOOP
 static int freeLoop = TRUE;
 #endif
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
 static int useMtab = TRUE;
 #endif
 static int umountAll = FALSE;
@@ -106,7 +106,7 @@ char *mtab_getinfo(const char *match, const char which)
                        if (which == MTAB_GETMOUNTPT) {
                                return cur->mountpt;
                        } else {
-#if !defined BB_MTAB
+#if !defined BB_FEATURE_MTAB_SUPPORT
                                if (strcmp(cur->device, "/dev/root") == 0) {
                                        /* Adjusts device to be the real root device,
                                         * or leaves device alone if it can't find it */
@@ -197,7 +197,7 @@ static int do_umount(const char *name)
                }
        }
        if (status == 0) {
-#if defined BB_MTAB
+#if defined BB_FEATURE_MTAB_SUPPORT
                if (useMtab == TRUE)
                        erase_mtab(name);
 #endif
@@ -255,7 +255,7 @@ extern int umount_main(int argc, char **argv)
                                freeLoop = FALSE;
                                break;
 #endif
-#ifdef BB_MTAB
+#ifdef BB_FEATURE_MTAB_SUPPORT
                        case 'n':
                                useMtab = FALSE;
                                break;