diff options
| author | Csaba Henk <csaba@redhat.com> | 2012-05-15 13:41:57 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-05-21 13:47:41 -0700 | 
| commit | 6012dfe6b9c4d69914078cc0b716bf11aac5e957 (patch) | |
| tree | b98aad92cc2fdaca12d72c5d05f1250ce6a6743a /contrib/fuse-util/mount_util.c | |
| parent | 439d0426dd60ef6c1f4af13fcbbe73f1d206acc6 (diff) | |
fuse: reorganize mounting code
Macro-driven conditional compilation was a chaos.
New scheme is:
contrib/fuse-lib/mount-common.c:
  libfuse routines used both by glusterfs and fusermount
contrib/fuse-lib/mount.c:
  libfuse-derived but customized mounting code for glusterfs
contrib/fuse-util/mount_util.c:
  libfuse routines used only by fusermount
Change-Id: I3e0ba7f74e36556b78244cd7676eb4d379939602
BUG: 762389
Signed-off-by: Csaba Henk <csaba@redhat.com>
Reviewed-on: http://review.gluster.com/3342
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'contrib/fuse-util/mount_util.c')
| -rw-r--r-- | contrib/fuse-util/mount_util.c | 64 | 
1 files changed, 64 insertions, 0 deletions
diff --git a/contrib/fuse-util/mount_util.c b/contrib/fuse-util/mount_util.c new file mode 100644 index 00000000000..911b84445e9 --- /dev/null +++ b/contrib/fuse-util/mount_util.c @@ -0,0 +1,64 @@ +/* +  FUSE: Filesystem in Userspace +  Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu> + +  This program can be distributed under the terms of the GNU LGPLv2. +  See the file COPYING.LIB. +*/ + +#include <dirent.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> + +int fuse_mnt_check_empty(const char *progname, const char *mnt, +			 mode_t rootmode, off_t rootsize) +{ +	int isempty = 1; + +	if (S_ISDIR(rootmode)) { +		struct dirent *ent; +		DIR *dp = opendir(mnt); +		if (dp == NULL) { +			fprintf(stderr, +				"%s: failed to open mountpoint for reading: %s\n", +				progname, strerror(errno)); +			return -1; +		} +		while ((ent = readdir(dp)) != NULL) { +			if (strcmp(ent->d_name, ".") != 0 && +			    strcmp(ent->d_name, "..") != 0) { +				isempty = 0; +				break; +			} +		} +		closedir(dp); +	} else if (rootsize) +		isempty = 0; + +	if (!isempty) { +		fprintf(stderr, "%s: mountpoint is not empty\n", progname); +		fprintf(stderr, "%s: if you are sure this is safe, use the 'nonempty' mount option\n", progname); +		return -1; +	} +	return 0; +} + +int fuse_mnt_check_fuseblk(void) +{ +	char buf[256]; +	FILE *f = fopen("/proc/filesystems", "r"); +	if (!f) +		return 1; + +	while (fgets(buf, sizeof(buf), f)) +		if (strstr(buf, "fuseblk\n")) { +			fclose(f); +			return 1; +		} + +	fclose(f); +	return 0; +}  | 
