aboutsummaryrefslogtreecommitdiff
path: root/mtab.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-04-01 16:01:11 +0000
committerEric Andersen <andersen@codepoet.org>2001-04-01 16:01:11 +0000
commitc4cef5ab063d7abb604d48610424566202dcade0 (patch)
treec661196acbb1adfa81257a7f23b08bd15d653be8 /mtab.c
parentf77d88641d934fbd9ed0da8c8e31c84dc5856532 (diff)
downloadbusybox-w32-c4cef5ab063d7abb604d48610424566202dcade0.tar.gz
busybox-w32-c4cef5ab063d7abb604d48610424566202dcade0.tar.bz2
busybox-w32-c4cef5ab063d7abb604d48610424566202dcade0.zip
Move the mtab support stuff into libbb
-Erik
Diffstat (limited to 'mtab.c')
-rw-r--r--mtab.c95
1 files changed, 0 insertions, 95 deletions
diff --git a/mtab.c b/mtab.c
deleted file mode 100644
index 049765775..000000000
--- a/mtab.c
+++ /dev/null
@@ -1,95 +0,0 @@
1/* vi: set sw=4 ts=4: */
2#include <stdlib.h>
3#include <unistd.h>
4#include <errno.h>
5#include <string.h>
6#include <stdio.h>
7#include <mntent.h>
8#include "busybox.h"
9
10extern const char mtab_file[]; /* Defined in utility.c */
11static const int MS_RDONLY = 1; /* Mount read-only. */
12
13void erase_mtab(const char *name)
14{
15 struct mntent entries[20];
16 int count = 0;
17 FILE *mountTable = setmntent(mtab_file, "r");
18 struct mntent *m;
19
20 /* Check if reading the mtab file failed */
21 if (mountTable == 0
22 /* Bummer. fall back on trying the /proc filesystem */
23 && (mountTable = setmntent("/proc/mounts", "r")) == 0) {
24 perror_msg("%s", mtab_file);
25 return;
26 }
27
28 while ((m = getmntent(mountTable)) != 0) {
29 entries[count].mnt_fsname = strdup(m->mnt_fsname);
30 entries[count].mnt_dir = strdup(m->mnt_dir);
31 entries[count].mnt_type = strdup(m->mnt_type);
32 entries[count].mnt_opts = strdup(m->mnt_opts);
33 entries[count].mnt_freq = m->mnt_freq;
34 entries[count].mnt_passno = m->mnt_passno;
35 count++;
36 }
37 endmntent(mountTable);
38 if ((mountTable = setmntent(mtab_file, "w"))) {
39 int i;
40
41 for (i = 0; i < count; i++) {
42 int result = (strcmp(entries[i].mnt_fsname, name) == 0
43 || strcmp(entries[i].mnt_dir, name) == 0);
44
45 if (result)
46 continue;
47 else
48 addmntent(mountTable, &entries[i]);
49 }
50 endmntent(mountTable);
51 } else if (errno != EROFS)
52 perror_msg("%s", mtab_file);
53}
54
55void write_mtab(char *blockDevice, char *directory,
56 char *filesystemType, long flags, char *string_flags)
57{
58 FILE *mountTable = setmntent(mtab_file, "a+");
59 struct mntent m;
60
61 if (mountTable == 0) {
62 perror_msg("%s", mtab_file);
63 return;
64 }
65 if (mountTable) {
66 int length = strlen(directory);
67
68 if (length > 1 && directory[length - 1] == '/')
69 directory[length - 1] = '\0';
70
71 if (filesystemType == 0) {
72 struct mntent *p = find_mount_point(blockDevice, "/proc/mounts");
73
74 if (p && p->mnt_type)
75 filesystemType = p->mnt_type;
76 }
77 m.mnt_fsname = blockDevice;
78 m.mnt_dir = directory;
79 m.mnt_type = filesystemType ? filesystemType : "default";
80
81 if (*string_flags) {
82 m.mnt_opts = string_flags;
83 } else {
84 if ((flags | MS_RDONLY) == flags)
85 m.mnt_opts = "ro";
86 else
87 m.mnt_opts = "rw";
88 }
89
90 m.mnt_freq = 0;
91 m.mnt_passno = 0;
92 addmntent(mountTable, &m);
93 endmntent(mountTable);
94 }
95}