aboutsummaryrefslogtreecommitdiffstats
path: root/util/mount.fuse.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2007-12-12 14:25:40 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2007-12-12 14:25:40 +0000
commitcdb8b79bad5fea81b74931a9027f1d5ca344af8e (patch)
tree11ab550f265dc3eb546b7c26f3745e6d139b1fcc /util/mount.fuse.c
parent918f0ad95b73e506d20488cb8ddd35d1a2524c7c (diff)
downloadlibfuse-cdb8b79bad5fea81b74931a9027f1d5ca344af8e.tar.gz
change indenting
Diffstat (limited to 'util/mount.fuse.c')
-rw-r--r--util/mount.fuse.c353
1 files changed, 185 insertions, 168 deletions
diff --git a/util/mount.fuse.c b/util/mount.fuse.c
index 4cc0394..7bd0e83 100644
--- a/util/mount.fuse.c
+++ b/util/mount.fuse.c
@@ -1,3 +1,11 @@
+/*
+ FUSE: Filesystem in Userspace
+ Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
+
+ This program can be distributed under the terms of the GNU GPL.
+ See the file COPYING.
+*/
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -8,184 +16,193 @@ static char *progname;
static char *xstrdup(const char *s)
{
- char *t = strdup(s);
- if (!t) {
- fprintf(stderr, "%s: failed to allocate memory\n", progname);
- exit(1);
- }
- return t;
+ char *t = strdup(s);
+ if (!t) {
+ fprintf(stderr, "%s: failed to allocate memory\n", progname);
+ exit(1);
+ }
+ return t;
}
static void *xrealloc(void *oldptr, size_t size)
{
- void *ptr = realloc(oldptr, size);
- if (!ptr) {
- fprintf(stderr, "%s: failed to allocate memory\n", progname);
- exit(1);
- }
- return ptr;
+ void *ptr = realloc(oldptr, size);
+ if (!ptr) {
+ fprintf(stderr, "%s: failed to allocate memory\n", progname);
+ exit(1);
+ }
+ return ptr;
}
static void add_arg(char **cmdp, const char *opt)
{
- size_t optlen = strlen(opt);
- size_t cmdlen = *cmdp ? strlen(*cmdp) : 0;
- char *cmd = xrealloc(*cmdp, cmdlen + optlen * 4 + 4);
- char *s;
- s = cmd + cmdlen;
- if (*cmdp)
- *s++ = ' ';
-
- *s++ = '\'';
- for (; *opt; opt++) {
- if (*opt == '\'') {
- *s++ = '\'';
- *s++ = '\\';
- *s++ = '\'';
- *s++ = '\'';
- } else
- *s++ = *opt;
- }
- *s++ = '\'';
- *s = '\0';
- *cmdp = cmd;
+ size_t optlen = strlen(opt);
+ size_t cmdlen = *cmdp ? strlen(*cmdp) : 0;
+ char *cmd = xrealloc(*cmdp, cmdlen + optlen * 4 + 4);
+ char *s;
+ s = cmd + cmdlen;
+ if (*cmdp)
+ *s++ = ' ';
+
+ *s++ = '\'';
+ for (; *opt; opt++) {
+ if (*opt == '\'') {
+ *s++ = '\'';
+ *s++ = '\\';
+ *s++ = '\'';
+ *s++ = '\'';
+ } else
+ *s++ = *opt;
+ }
+ *s++ = '\'';
+ *s = '\0';
+ *cmdp = cmd;
}
int main(int argc, char *argv[])
{
- char *type = NULL;
- char *source;
- const char *mountpoint;
- char *basename;
- char *options = NULL;
- char *command = NULL;
- char *setuid = NULL;
- int i;
-
- progname = argv[0];
- basename = strrchr(argv[0], '/');
- if (basename)
- basename++;
- else
- basename = argv[0];
-
- if (strncmp(basename, "mount.fuse.", 11) == 0)
- type = basename + 11;
- if (strncmp(basename, "mount.fuseblk.", 14) == 0)
- type = basename + 14;
-
- if (type && !type[0])
- type = NULL;
-
- if (argc < 3) {
- fprintf(stderr, "usage: %s %s destination [-t type] [-o opt[,opts...]]\n",
- progname, type ? "source" : "type#[source]");
- exit(1);
- }
-
- source = argv[1];
- if (!source[0])
- source = NULL;
-
- mountpoint = argv[2];
-
- for (i = 3; i < argc; i++) {
- if (strcmp(argv[i], "-v") == 0) {
- continue;
- } else if (strcmp(argv[i], "-t") == 0) {
- i++;
-
- if (i == argc) {
- fprintf(stderr,
- "%s: missing argument to option '-t'\n", progname);
- exit(1);
- }
- type = argv[i];
- if (strncmp(type, "fuse.", 5) == 0)
- type += 5;
- else if (strncmp(type, "fuseblk.", 8) == 0)
- type += 8;
-
- if (!type[0]) {
- fprintf(stderr,
- "%s: empty type given as argument to option '-t'\n",
- progname);
- exit(1);
- }
- } else if (strcmp(argv[i], "-o") == 0) {
- char *opts;
- char *opt;
- i++;
- if (i == argc)
- break;
-
- opts = xstrdup(argv[i]);
- opt = strtok(opts, ",");
- while (opt) {
- int j;
- int ignore = 0;
- const char *ignore_opts[] = { "", "user", "nouser", "users",
- "auto", "noauto", "_netdev",
- NULL};
- if (strncmp(opt, "setuid=", 7) == 0) {
- setuid = xstrdup(opt + 7);
- ignore = 1;
- }
- for (j = 0; ignore_opts[j]; j++)
- if (strcmp(opt, ignore_opts[j]) == 0)
- ignore = 1;
-
- if (!ignore) {
- int oldlen = options ? strlen(options) : 0;
- options = xrealloc(options, oldlen + 1 + strlen(opt) + 1);
- if (!oldlen)
- strcpy(options, opt);
- else {
- strcat(options, ",");
- strcat(options, opt);
- }
- }
- opt = strtok(NULL, ",");
- }
- }
- }
-
- if (!type) {
- type = xstrdup(source);
- source = strchr(type, '#');
- if (source)
- *source++ = '\0';
-
- if (!type[0]) {
- fprintf(stderr, "%s: empty filesystem type\n", progname);
- exit(1);
- }
- }
-
- add_arg(&command, type);
- if (source)
- add_arg(&command, source);
- add_arg(&command, mountpoint);
- if (options) {
- add_arg(&command, "-o");
- add_arg(&command, options);
- }
-
- if (setuid && setuid[0]) {
- char *sucommand = command;
- command = NULL;
- add_arg(&command, "su");
- add_arg(&command, "-");
- add_arg(&command, setuid);
- add_arg(&command, "-c");
- add_arg(&command, sucommand);
- } else if (!getenv("HOME")) {
- /* Hack to make filesystems work in the boot environment */
- setenv("HOME", "/root", 0);
- }
-
- execl("/bin/sh", "/bin/sh", "-c", command, NULL);
- fprintf(stderr, "%s: failed to execute /bin/sh: %s\n", progname,
- strerror(errno));
- return 1;
+ char *type = NULL;
+ char *source;
+ const char *mountpoint;
+ char *basename;
+ char *options = NULL;
+ char *command = NULL;
+ char *setuid = NULL;
+ int i;
+
+ progname = argv[0];
+ basename = strrchr(argv[0], '/');
+ if (basename)
+ basename++;
+ else
+ basename = argv[0];
+
+ if (strncmp(basename, "mount.fuse.", 11) == 0)
+ type = basename + 11;
+ if (strncmp(basename, "mount.fuseblk.", 14) == 0)
+ type = basename + 14;
+
+ if (type && !type[0])
+ type = NULL;
+
+ if (argc < 3) {
+ fprintf(stderr,
+ "usage: %s %s destination [-t type] [-o opt[,opts...]]\n",
+ progname, type ? "source" : "type#[source]");
+ exit(1);
+ }
+
+ source = argv[1];
+ if (!source[0])
+ source = NULL;
+
+ mountpoint = argv[2];
+
+ for (i = 3; i < argc; i++) {
+ if (strcmp(argv[i], "-v") == 0) {
+ continue;
+ } else if (strcmp(argv[i], "-t") == 0) {
+ i++;
+
+ if (i == argc) {
+ fprintf(stderr,
+ "%s: missing argument to option '-t'\n",
+ progname);
+ exit(1);
+ }
+ type = argv[i];
+ if (strncmp(type, "fuse.", 5) == 0)
+ type += 5;
+ else if (strncmp(type, "fuseblk.", 8) == 0)
+ type += 8;
+
+ if (!type[0]) {
+ fprintf(stderr,
+ "%s: empty type given as argument to option '-t'\n",
+ progname);
+ exit(1);
+ }
+ } else if (strcmp(argv[i], "-o") == 0) {
+ char *opts;
+ char *opt;
+ i++;
+ if (i == argc)
+ break;
+
+ opts = xstrdup(argv[i]);
+ opt = strtok(opts, ",");
+ while (opt) {
+ int j;
+ int ignore = 0;
+ const char *ignore_opts[] = { "",
+ "user",
+ "nouser",
+ "users",
+ "auto",
+ "noauto",
+ "_netdev",
+ NULL};
+ if (strncmp(opt, "setuid=", 7) == 0) {
+ setuid = xstrdup(opt + 7);
+ ignore = 1;
+ }
+ for (j = 0; ignore_opts[j]; j++)
+ if (strcmp(opt, ignore_opts[j]) == 0)
+ ignore = 1;
+
+ if (!ignore) {
+ int oldlen =
+ options ? strlen(options) : 0;
+ options = xrealloc(options, oldlen + 1 + strlen(opt) + 1);
+ if (!oldlen)
+ strcpy(options, opt);
+ else {
+ strcat(options, ",");
+ strcat(options, opt);
+ }
+ }
+ opt = strtok(NULL, ",");
+ }
+ }
+ }
+
+ if (!type) {
+ type = xstrdup(source);
+ source = strchr(type, '#');
+ if (source)
+ *source++ = '\0';
+
+ if (!type[0]) {
+ fprintf(stderr, "%s: empty filesystem type\n",
+ progname);
+ exit(1);
+ }
+ }
+
+ add_arg(&command, type);
+ if (source)
+ add_arg(&command, source);
+ add_arg(&command, mountpoint);
+ if (options) {
+ add_arg(&command, "-o");
+ add_arg(&command, options);
+ }
+
+ if (setuid && setuid[0]) {
+ char *sucommand = command;
+ command = NULL;
+ add_arg(&command, "su");
+ add_arg(&command, "-");
+ add_arg(&command, setuid);
+ add_arg(&command, "-c");
+ add_arg(&command, sucommand);
+ } else if (!getenv("HOME")) {
+ /* Hack to make filesystems work in the boot environment */
+ setenv("HOME", "/root", 0);
+ }
+
+ execl("/bin/sh", "/bin/sh", "-c", command, NULL);
+ fprintf(stderr, "%s: failed to execute /bin/sh: %s\n", progname,
+ strerror(errno));
+ return 1;
}