summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nmount.c104
1 files changed, 86 insertions, 18 deletions
diff --git a/nmount.c b/nmount.c
index a51664b..8e51ec3 100644
--- a/nmount.c
+++ b/nmount.c
@@ -37,12 +37,63 @@
//#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
//#define MS_LAZYTIME (1<<25) /* Update the on-disk [acm]times lazily */
+#define STRUCT_LEN(VAR,STRUCT) ((sizeof(VAR)/sizeof(STRUCT))-1)
+
+typedef struct vfs_option_params {
+ char *val;
+ char *descr;
+} vfs_option_params;
+
+vfs_option_params vfs_options_proc_params_hidepid[] = {
+ {"0","Everybody may access all proc"},
+ {"1","User can access only their own proc, not other /proc/[pid]"},
+ {"2","As for mode 1, extra hides pid directories of others"},
+ {NULL,NULL},
+};
+
+vfs_option_params vfs_options_proc_params_gid[] = {
+ {"gid","usergroup who sees /proc in mode 0"},
+ {NULL,NULL},
+};
+
+typedef struct vfs_options
+{
+ char *options;
+ char *description;
+ vfs_option_params **params;
+} vfs_options;
+
+vfs_options vfs_options_proc[] =
+{
+ {"hidepid=\%u" ,"", &vfs_options_proc_params_hidepid},
+ {"gid=\%u" ,"user group that can access process", &vfs_options_proc_params_gid},
+ {NULL,NULL,NULL}
+};
+
+static const struct vfs {
+ char *name;
+ long flags;
+ char *mountpoint;
+ vfs_options *options;
+} vfstab[] = {
+ {"devtmpfs", 0, "/Device", NULL},
+ {"mqueue", 0, "/MQueue/", NULL},
+ {"proc", 0, "/Process", &vfs_options_proc},
+ {"tmpfs", 0, "/Ram", NULL},
+ {"sysfs", 0, "/System", NULL},
+ {"ext4", 0, NULL, NULL},
+ {"vfat", 0, NULL, NULL},
+ {NULL, 0, NULL, NULL},
+};
typedef struct {
- int f_output; //show statistics of pipe
- int f_stopzero; //stop if 0 bytes in input
- int f_nowriteout; // dont write to output
- int f_graphmode; //show graph
+ char *f_device;
+ char *f_type;
+ char *f_dir;
+ char *f_flags;//g_params.f_output = 1;
+ char *f_options;
+ int f_verbose;
+ int f_helper;
} mount_params;
static mount_params g_params;
@@ -51,6 +102,14 @@ void helper(char *progname)
{
printf("Usage: %s [OPTS]\n\n"
"Version: 0.0.1 \n"
+ "-d device to mount\n"
+ "-t filesystem type\n"
+ "-d mount directory\n"
+ "-f mount flags\n"
+ "-o mount fs options\n"
+ "-v verbose output\n"
+ "-h help options\n"
+ "-a helper for filetype options\n"
"\n"
, progname);
}
@@ -71,13 +130,21 @@ void sig_handler(int signo)
exit(0);
}
-int smount(const char *source, const char *target,
- const char *filesystemtype, unsigned long mountflags,
- const void *data);
+int smount(
+ const char *source,
+ const char *target,
+ const char *filesystemtype,
+ unsigned long mountflags,
+ const void *data)
+{
+
+ return 0;
+}
int main(int argc, char **argv)
{
int c;
+ int i;
printf("One big real mount\n");
@@ -88,12 +155,13 @@ int main(int argc, char **argv)
}
//process arguments
- while ((c = getopt(argc, argv, "osng")) != -1)
+ while ((c = getopt(argc, argv, "a")) != -1)
{
switch (c)
{
- case 'v':
+ case 'a':
//g_params.f_output = 1;
+ g_params.f_helper = 1;
break;
default:
@@ -102,16 +170,16 @@ int main(int argc, char **argv)
}
}
- return 0;
-}
+ if (1 == g_params.f_helper)
+ {
+ for (i=0;i<STRUCT_LEN(vfstab,struct vfs);i++)
+ {
+ printf("%s %s\n",vfstab[i].name,vfstab[i].mountpoint);
+ }
+ }
-int smount(
- const char *source,
- const char *target,
- const char *filesystemtype,
- unsigned long mountflags,
- const void *data)
-{
return 0;
}
+
+